Skip to content

Musical Joycons v0.1.2

Choose a tag to compare

@github-actions github-actions released this 26 Feb 16:10
· 2 commits to main since this release

Added

  • Part-based MIDI normalization: notes grouped by (channel, program) into musical Parts, replacing raw track-based analysis.
  • Dual scoring models: separate Primary (melody-likeness) and Secondary (accompaniment) scorers with weighted feature vectors.
  • Rich feature computation per Part: monophony ratio, chordiness, stepwise motion, pitch/velocity percentiles, instrument priors, and active ratio.
  • Runtime L/R swap and part cycling: press S to swap Joy-Con sides, 1/2 to cycle primary/secondary candidates during playback.
  • Keyboard input thread using crossterm for non-blocking runtime controls.

Changed

  • Frequency mapping now octave-shifts notes into the 200–1252 Hz range so low-pitched MIDI parts produce audible rumble.
  • active_ratio computed against full song duration instead of per-part span, preventing sparse fill-parts from appearing artificially active.
  • Primary/secondary scoring boosted active_ratio and total_note_time weights; added hard penalties for parts covering less than 10–25% of the song.
  • Playback timing uses Instant-based wall-clock scheduling instead of accumulated thread::sleep durations, eliminating drift between Joy-Cons.
  • ticks_to_duration upgraded from f32/u64 microsecond truncation to full f64 precision.
  • Skyline algorithm now operates on a constrained candidate pool from the scoring models rather than all raw MIDI tracks.
  • HID writes coalesced for same-tick commands with a 2ms minimum interval to prevent USB pipeline overflow.

Fixed

  • Songs with many sparse monophonic parts no longer select nearly-silent fill tracks as primary/secondary.
  • Joy-Con timing desync caused by HID I/O overhead and Windows sleep granularity compounding over the song.
  • Windows HID "overlapped I/O" crash when rumble commands were sent too rapidly.