Skip to content

v0.4.7

Choose a tag to compare

@github-actions github-actions released this 24 Sep 17:12
· 96 commits to main since this release

FSVR v0.4.7: every DX-bank preset was the next voice's data under this voice's name.

The EPROM's DX7 voice table starts at 0x230000 as plain 155-byte VCEDs with the name last. The extractor had read it from 0x230091, the first name, so each record carried the following voice's operators and common block; rgwan fixed the extractor (5c2a48b), but the engine's own ROM loader, the plugin's bundled voice bank and the selftest's fixture still read the old way. Every PrC to PrK voice, and every performance that names one (B014 Full Tines, B025 Tremolo, A020 and the rest of the DX-bank set), played the wrong voice with the right name. Fixed in all three places.

Verified byte for byte against the unit's own conversions: the demo songs send FullTine 1 and DX-Acrd 4 as bulks the firmware itself converted, and the engine's conversion of the same ROM records now matches each on every byte but the category, the demo's one edit (27 differing bytes before). The selftest diffs the whole DX-Acrd 4 bulk with no skip list. captures/demo_preset/02_Full Tines.mid loads B014 by bank select and program change instead of sysex, and its render against the demo's own differs only by the performance volume byte the demo edits, a flat -1.38 dB with a residual under 2e-8. check_presets now diffs the bundled bank's bytes against presets/, not just the names, so a stale blob fails the build.

Known issue, not in this release: A020 Vox Morph and any performance that layers two parts with all eight unvoiced operators live is heavy, about half a desktop core at 8 notes and beyond a laptop i7 in a DAW. Measured, with the fixes in order of cost, in docs/performance.md.

Also in this line: v0.4.6's byte-for-byte DX7 conversion, v0.4.5's formant vibrato (B011 Human Eh), v0.4.4's operator slots.