Skip to content

FSVR v0.3.0

Choose a tag to compare

@jameshansen jameshansen released this 15 Sep 18:50
· 204 commits to main since this release

FSVR v0.3.0: the Yamaha FS1R as a plugin and a standalone with the front panel as its GUI, its firmware logic rewritten from the decompiled ROM. Thanks to rgwan/fs1r_firmware_RE for the firmware and ROM dumps everything here is built on.

New since v0.2.0

  • The panel is the FS1R's own. It was vector art written by hand from the owner's manual's description of the front panel; it is now the manual's actual drawing, converted to vectors with the Yamaha logo removed. Live controls are placed over it in the drawing's own units, the knob caps are the drawing's caps rotated about their centres, and the LEDs light the drawing's own wells. tools/check_panel.py reads the shapes back out of the SVG and fails the build's test step if the drawing and the coordinates ever drift apart.
  • The LCD is a real dot matrix now, 120 by 37, with the two text lines and the icon strip that tracks PART, MIDI, BANK/PGM#, VOL, FLT, PAN, REV, VAR and INS the way the hardware's does.
  • A hardware capture kit, for calibrating the parts of the engine that are still models. captures/requests/ holds 21 MIDI files, 576 measurements, that play a full set of test tones into a real FS1R: each file carries its own patches as sysex and opens and closes with a marker so a recording aligns itself. tools/analyze_capture.py measures a returned recording segment by segment, fits the constants it can, and diffs the result against the engine's own render of the same file. docs/hardware_capture_request.md explains what each file settles.
  • fs1r_emu -smf file.mid -w out.wav renders a MIDI file, sysex and all, through the engine offline.
  • The engine can no longer hand its host a NaN. An effect block given parameters no preset would use could run away, poison the master EQ through the shared output path, and silence everything after it for the rest of the session. A block whose output leaves the sane range is now cleared and muted for that sample.

The downloads

  • FS1R.emu-0.3.0-Standalone-win64.zip: the standalone app, FS1R.emu.exe, with the presets/ folder (the .syx voices and the index the patch browser reads). Unzip anywhere and run it. Options > Audio/MIDI Settings picks the audio and MIDI devices; with the default Windows Audio device type the buffer is the driver's 10 ms, so choose Windows Audio (Exclusive Mode) or DirectSound if you want to set a size. Press EPROM... and point it at a 2 MB v1.20 dump for the 1408 preset voices and 360 performances; the dump is not shipped.
  • FS1R.emu-0.3.0-VST3-win64.zip: FS1R.emu.vst3, a bundle folder. Copy the whole folder into C:\Program Files\Common Files\VST3\ and rescan in the DAW.
  • FS1R.emu-0.3.0-CLAP-win64.zip: FS1R.emu.clap, one file. Copy it into C:\Program Files\Common Files\CLAP\ and rescan.
  • fs1r_emu-0.3.0-console-win64.zip: the command-line console, fs1r_emu.exe, on the same engine: MIDI in and out over WinMM, offline WAV and MIDI file rendering, the self checks. It asks once for a MIDI input and remembers it in fs1r_emu.ini beside the exe; fs1r_emu.exe -l lists the ports.

All four are 64-bit Windows builds of the same commit. The plugins read presets/index.csv from the folder next to their binary or any folder above it. There are no Linux or macOS downloads: the Linux CI job cannot configure JUCE without the X11, GTK, FreeType and libcurl development packages, which the runner does not install, and the release job that would upload the other platforms' bundles is skipped when any leg of the build fails. Both build fine locally, and cmake -B build -S . builds the engine, the console and the self checks anywhere with a C++17 compiler.

Not yet: calibration against a real unit. The chip-side models (EG shape, formant window, filter, effect algorithms) are still inferred, and every constant behind them sits in namespace cal so that calibrating is one table edit.

SHA-256

  • FS1R.emu-0.3.0-Standalone-win64.zip d341416e83ab507880974052e92742e0c8d616900e5e1711b72958f15da2e6fa
  • FS1R.emu-0.3.0-VST3-win64.zip 8717dced860c1a21243220a830bc8d25f47cf788396a86f4b2470f20b8105831
  • FS1R.emu-0.3.0-CLAP-win64.zip d0a92fdfed0a209bdadf9ffd25b625659f6aa1eb9a6b602ce02389a4bf73b121
  • fs1r_emu-0.3.0-console-win64.zip 9500858e23fc53161c49c984ad0848dfb78450627ba794a8166fb7be8b65f4d5