Frodhes
Frodhes turns the FM-1 into an electric piano, a vibraphone and a marimba.
- Custom firmware
- Stable
- Medium brick risk
- Reversible
Source codeWebsite: leonardomirabal.github.io
This project hasn't been claimed by its maintainer yet, so its details come from the community. Is it yours? Claim it
Frodhes 0.9.7: a physically modelled electric piano, vibraphone and marimba for the M-VAVE FM-1. Every note is computed live from the mechanics of the instrument; there are no samples.
Download: frodhes.fwsc below (the same file as frodhes-0.9.7.fwsc; the newest is always at https://github.com/leonardoMirabal/frodhes/releases/latest/download/frodhes.fwsc). Try it first in your browser: https://leonardomirabal.github.io/frodhes/
Install
pip install mido python-rtmidi
python3 tools/fm1_install.py frodhes.fwsc
If anything goes wrong, switch the FM-1 off, hold OCT− and switch it on to get the USB rescue, then install again.
New in 0.9.7
- Install from the browser: the emulator page installs Frodhes on the FM-1 (Chrome or Edge, MIDI with SysEx): Install on your FM-1,
Find my FM-1, then Install. It runs the same update as
tools/fm1_install.py, checks the package and its sha256 first, and checks the FM-1's identity after the restart. An install that was cut off gets Resume the install. Safari and Firefox get the terminal installer's command instead.
Changes
- The headphone jack keeps the full resolution after MASTER: the volume was applied and then cut to 16 bits, which left a tiny rounding error with a small offset (about -95 dBFS, under the FM-1's own hiss). USB audio is unchanged.
- The USB name carries the model (GitHub #21): the FM-1 is Frodhes FM-1 on the computer (it was "Frodhes"), an SMK-37 Frodhes SMK-37 Pro (Elite, MKE-P37 likewise). It is the name of the MIDI port, the audio input and the USB device. The community firmware flasher now finds the unit for its DOWNLOAD MODE. Each model has a new USB product id, so the computer sets the unit up as a new device by itself. A Mac asks "Allow accessory to connect?" once (allow it); the DAW then sees a new MIDI device, "Frodhes FM-1", and it has to be selected again (switch its port on once where the old one was). The update mode keeps its name, "Felucca Update".
Fixed
- Recording over USB at 48 kHz: a loud, bright passage no longer reaches full scale. The 44.1 to 48 kHz resampler could overshoot a passage the limiter kept at its ceiling and clip one sample; above three quarters of full scale it now softens the overshoot instead. 44.1 kHz and the headphone jack are unchanged.
- SMK-37 (GitHub #17): the CHORD button opens the CHORD page (press again: chord mode on / off) and PARA opens the PHASER page (again: on / off). They were the other way round. Their lights and the screen's hints follow.
- A held note dying away no longer leaves a faint, fixed distortion under it (GitHub #16): the engines' mix is dithered where it is cut to 16 bits, so its last few bits fall into a steady noise floor (about -96 dBFS, under the headphone jack's own hiss) instead of odd harmonics that stay put while the note fades. Silence is still exact digital zero. Every engine (Rhodes, VIBES, MARIMBA).
- F11 RESO SWEEP is as loud as the other Rhodes presets: it was about 1.7 LU under F01 (over the 1.5 LU the factory presets keep). Its LEVEL goes up by 1.5 dB; nothing else in it changes.
- Recording over USB: when the FM-1's USB controller did not answer one status read in time, the audio input could drop one packet of sound (about 1 ms) with no counter showing it. The packet now waits for the next poll instead, and the event is counted (CC 116 item 21). Found by reading the code, not heard in testing.
Tools
tools/fm1_install.py: "FM-1 not found" now suggests naming the port (--port NAME). An FM-1 running Frodhes (its port is called "Frodhes" since 0.9.5, now "Frodhes FM-1") is found without--port; the installer of 0.9.4 and before does not know those names, so update with this one.- The device tools send on MIDI channel 8 by default (
FRODHES_MIDI_CH=1..16to change it), so they work with the FM-1's MIDI CHANNEL on 8 or on ALL. tools/hil_crackle.py(the USB repeat check of the monkey and the crackle test): 4 or 5 equal frames where the music itself turns slowly are no longer counted as a repeated USB packet; the 44.1 kHz monkey takes that failed on them now pass, and injected copies are still found.tools/hil_monkey.py: at 48 kHz one sample at full scale fails the take (--old-48kfor firmware before this one); a passing take with notes that did not sound is kept (silent-<seed>.npz) to look at.tools/release.pynever pushesmain(it is protected): the release goes in through a pull request, thentools/release.py <version> --after-mergetags it and checks the published files.- CI: the emulator's job runs in Playwright's own image, the generators run once, and the host tests run in five
jobs at once (
make pytest SHARD=K/N,tools/pytest_shard.py). tools/final/hil_cpu_fx.py(the CPU check): a take that fails on CoreAudio's error -10863 ("cannot do in current context", the first take right after an install) before anything is measured runs once more, on a line of its own. The retry is judged like any take; the failed attempt never counts.tools/hil_crackle.py(the USB repeat check of the monkey and the crackle test): a USB copy repeats the whole stereo frame, so every channel must show it. One channel's evidence alone (a mono passage, or the other channel at its turn) needs 18 dB, and 4 or more equal frames need the wave clearly smoother without them. The host build's own music no longer fails the check, and neither does the FM-1 take it failed (a plateau of the music, every counter clean).tools/hil_monkey.py: a take that fails an audio check is triaged in the same run. The host build plays the same seed and is judged the same way, then one line in the report: HOST TOO (the test or the music), COUNTED (a device counter explains it) or DEVICE ONLY (the event and the counters). The host render is kept next to the take.
Before you start
- How hard is it?
- EasyCopy a file or use a web page. No extra software.
- What you need
- A USB or MIDI cable
- Comfort with the command line
- A computer
- Can it break my device?
- Small chance of trouble, with a way to recover.
- Can I undo it?
- Yes. You can go back to the official software.
Did it work for you?
Did Frodhes v0.9.7 work on your M-VAVE FM-1?
No reports yet for v0.9.7.
One-tap reports from owners. Bricked reports are checked before they count.
Compatibility
Devices: M-VAVE FM-1.
No compatibility information yet.
Getting started
From the project's README ("Download"):
Latest release: the release page (its version, notes and earlier versions); the firmware file is frodhes.fwsc, always the newest (package identity FM-1958, the same for every version).
Install it over USB, from the browser (Chrome or Edge: the emulator page's Install on your FM-1 or SMK-37, which finds the unit, fetches the latest release's package for its model and checks its sha256) or from a terminal:
pip install mido python-rtmidi python3 tools/fm1install.py frodhes.fwsc
If anything goes wrong, switch the FM-1 off, hold OCT− and switch it on: that is the USB rescue, from which you can always install again. To return to M-VAVE's firmware, use the "Official firmware" section of thefirmwarehub.com with V15 from m-vave.com.
Risk and recovery
- Brick risk
- Medium
- Reversible
- Yes
- Requires opening the device
- No
From the project's README ("Download"):
Latest release: the release page (its version, notes and earlier versions); the firmware file is frodhes.fwsc, always the newest (package identity FM-1958, the same for every version).
Install it over USB, from the browser (Chrome or Edge: the emulator page's Install on your FM-1 or SMK-37, which finds the unit, fetches the latest release's package for its model and checks its sha256) or from a terminal:
pip install mido python-rtmidi python3 tools/fm1install.py frodhes.fwsc
If anything goes wrong, switch the FM-1 off, hold OCT− and switch it on: that is the USB rescue, from which you can always install again. To return to M-VAVE's firmware, use the "Official firmware" section of thefirmwarehub.com with V15 from m-vave.com.
Releases
| Version | Name | Released |
|---|---|---|
| v0.9.7 | Frodhes 0.9.7Latest | 27 October 2026 |
| v0.9.6 | Frodhes 0.9.6 | 26 October 2026 |
| v0.9.5 | Frodhes 0.9.5 | 25 October 2026 |
| v0.9.4 | Frodhes 0.9.4 | 20 October 2026 |
| v0.9.3 | Frodhes 0.9.3 | 19 October 2026 |
| v0.9.2 | Frodhes 0.9.2 | 16 October 2026 |
| v0.9.1 | Frodhes 0.9.1 | 16 October 2026 |
| v0.9.0 | Frodhes 0.9.0 | 15 October 2026 |
| v0.8.1 | Frodhes 0.8.1 | 15 October 2026 |
Credits, license and support
- License
- GPL-3.0