You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Auto-Fit Voice Load - thinning with a plan - one confirmed click thins overloaded moments and over-dense passages: the whole song, a right-clicked overflow range in the voice-load lane, or exactly the notes you selected in the editor. Per-track intensity that persists, live preview in editor and lane, always a dry run first, one undo step - and it works on any MIDI file, not only in FFXIV mode
Drum-kit editor with audio A/B - build your own FFXIV pitch-mapping kits by duplicating any kit and editing its mappings; every row's speaker button plays the GM drum and its FFXIV target back to back, and "Preview group" plays a whole instrument's mapping as a run
Tempo transition curves - Edit Tempo's Smooth Transition gains Linear / Ease-in / Ease-out / S-curve, so an accelerando can lean in naturally instead of ramping mechanically
Timeline & zoom fixes - tempo edits extend the timeline immediately (TIMELINE-LEN-001), horizontal zoom anchors on the cursor (ZOOM-ANCHOR-001), and Smooth Transition ramps no longer freeze the editor with thousands of duplicate events (TEMPO-SMOOTH-001)
Full Changelog - Precision Tools
New Features
Auto-Fit Voice Load - the action counterpart to the FFXIV Voice Limiter's analysis: one confirmed click thins a song, a right-clicked overflow range in the voice-load lane, or exactly the notes selected in the editor (right-click the selection) so the material fits the in-game mixer. The voice ceiling counts notes that really sound at the same time (not the display's tail-extended numbers, which overestimate); removal order is duplicates, then chords over the configurable chord limit (outer voices always survive), then the quietest voices - percussion voice counts are never touched. Density desaturation works per track (one FFXIV performer, per drum pitch on percussion tracks): an intensity slider sets the percentage of each track to thin and the tool takes the densest passages first, halving or thirding dense runs while the upper voice survives. The modeless dialog carries a track list with individual per-track settings, live statistics, visibility eyes and a live preview in the editor and voice lane. Always shows a dry-run summary first, applies as a single undo step, and is deterministic. Works on any MIDI file, not only in FFXIV mode (the dialog's wording and the voice-lane live preview follow the active mode). Also available to the AI as auto_fit_voice_load (dry-run first, user confirmation required). Backed by a headless service with its own test target, calibrated against real stress-test songs.
Drum-kit editor (FFXIV Drum Split) - the pitch-mapping kits are no longer fixed: "Edit kits..." next to the pitch-mapping selector opens an editor for your own kits. Pick any kit, shipped or your own, duplicate it and change its mappings - editing always starts from an existing kit, never an empty table. One tab per FFXIV percussion instrument, each row a GM drum mapped to a target pitch with both spelled out ("38 Acoustic Snare" to "72 C5"). The instrument groups and their program numbers stay fixed because they are how playback and export recognise the instrument, and target pitches are limited to the range a bard can play; saving reports what a kit breaks, including the same GM drum mapped twice. User kits live with the settings and appear in the selector right after the shipped ones; the shipped kits can be neither overwritten nor deleted. Every row carries an audio A/B: the speaker button plays the GM drum and the mapped FFXIV pitch back to back (the GM half needs a General MIDI SoundFont loaded alongside the FFXIV one, e.g. GeneralUser GS), and "Preview group" plays a tab's mapped pitches as a run in drum order - with a status line naming what plays or why nothing can (playback running, instrument muted in the Equalizer, synthesizer not selected). Backed by a new persistence/validation layer with its own test target.
Tempo transition curves (Edit Tempo) - the Smooth Transition gains a Curve option: Linear (default), Ease-in (barely changes at first, then speeds up - a natural accelerando), Ease-out (changes quickly, then settles into the target) and S-curve (gentle at both ends). The curve only shifts where the per-BPM tempo steps land in time; the event count and the single-step undo stay the same.
Changed
FluidSynth audio-driver selection hardened (all platforms) - the engine now asks the local FluidSynth build which audio drivers it actually supports and only tries those, with platform-specific priority lists (Windows: WASAPI first, macOS: CoreAudio, Linux: PipeWire/PulseAudio/ALSA). Removes noisy fallback errors for drivers that were never available. (from #12, merged 2026-07-14)
Bug Fixes
Fixed the timeline not growing after tempo changes (TIMELINE-LEN-001) - slowing a song down (e.g. throttling a section to 60 BPM) made it longer in real time, but the editor kept the old total length: the end of the song was unreachable by scrolling until the file was saved and reloaded. The total length is now recomputed immediately after every Edit Tempo apply and after undo/redo of tempo changes.
Fixed horizontal zoom ignoring the cursor (ZOOM-ANCHOR-001) - zooming in or out was anchored to the left edge of the view, so the position under the cursor/marker drifted away ("the zoom lands somewhere arbitrary"). Zoom now anchors on the cursor when it is visible (it keeps its screen position, so zooming dives into the marker) and on the viewport centre otherwise.
Fixed Smooth Transition tempo ramps freezing the editor (TEMPO-SMOOTH-001) - the Edit Tempo tool wrote a tempo event every 5 ticks (a 25-BPM ramp over a few measures produced thousands of events, almost all duplicates), each one individually undo-protocolled, and every later tick-to-time conversion copied the whole tempo map per call - scrolling and editing crawled afterwards. Smooth Transition now writes exactly one event per BPM step (evenly spread, endpoints exact), applies as a single undo step, and the tick/time conversions walk the tempo map without copying it - which also un-lags files that already come with dense imported tempo ramps. (merged 2026-07-19)
Fixed the unit tests wiping the real app configuration (dev/from-source builds) - running ctest cleared the app's actual settings scope, erasing API configuration, equalizer presets and user-made drum kits. The affected tests now run against their own scope. Shipped binaries were never affected.