Releases
v0.1.2
Compare
Sorry, something went wrong.
No results found
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.
You can’t perform that action at this time.