github Quixotic7/ChoralRootFM1 v0.14
ChoralRoot 0.14

latest release: v0.15
pre-release5 hours ago

ChoralRoot 0.14 is the biggest release since the fork: a new FM engine, a new preset model, a looper with record
modes, USB audio recording that works, the FM-1's second core, and a recovery path for a bricked unit.

Before you install. Charge the FM-1 first, plug it straight into the computer and keep the computer awake: it
updates on its battery, and an interrupted write can leave it dark with no USB device at all. If that ever
happens, https://github.com/Quixotic7/MvaveFM1Unbricker now covers that case too (the Transporter, a $10 RP2040
board on three wires: TRANSPORTER-GUIDE.md). Your settings record is migrated in place (versions 5 to 10 this
release); nothing you saved is lost, and the installer page can take a backup first.

FM TONE: a four-operator FM engine in the style of the Digitone

Engine 15, between FM6 and VA. Our own code, aligned with the Digitone manual's Appendix A: its eight algorithms
over operators C, A, B1, B2 (drawn on the SYN 1 page as the manual draws them, a dotted line for a carrier at full
level, a solid one for a carrier under its envelope), the ratios as the Digitone steps them with Ratio B as one
knob over the B1/B2 pair (a detent steps B2 on top, OPT or Shift steps B1), harmonics −26..+26 that shape C below
zero and A and B1 above it, detune on A and B2, feedback on the algorithm's own operator, the B LEV law, key
scaling per operator, a multimode filter (Off, LP12, HP12, LP24) behind a base-width filter, operator and amp
envelopes with release INF, and three tempo-synced LFOs with a bipolar fade, phase reset modes and forty
destinations. 16 starting presets. Patches live in a new store (backup object 22) and travel as sound files
(kind quad). docs/QUAD.md.

Presets per engine

PRESETS now turns through the presets of the engine you are playing and nothing else: INIT, the factory presets,
then the ones you saved into it ("FM6 · 05/26"). OPT + PRESETS changes the engine; each engine remembers where
you were. ALGORITHM does the same for the bass. SAVE asks Overwrite or Save as new; you can overwrite a factory
preset (it gets a mark and can be reset by holding SAVE in the dialog). The curated 48-sound bank is gone; every
sound in it is still there inside its engine. ANALOG is retired (the VA does its job better): an ANALOG sound you
saved loads on the VA with its settings carried over. Eleven engines, one per picker root. docs/PRESETS.md.

The looper: a PLAY menu and five record modes

Hold LOOP for one screen: PRESETS picks the loop slot on a strip of ten, ALGORITHM the record mode, SELECT the
length, the knobs Quantize, Count-in, Level and Keys. With Keys = Play the root keys keep playing while the menu is
open; GLO switches them to the slot shortcuts. The modes: Overwrite (the default; REC again before the first
chord keeps the old loop), Advance (each recording goes to the next slot), Overdub, Replace (what you
play replaces what is under it; undo brings it back) and Step (a chord per step on the quantize grid, OCT+ a
rest, OCT− back). While a loop records or plays the menu shows a timeline with a lane per layer. A slot is its
pattern now: leaving a slot or stopping the loop saves it, and a loop survives a power cycle. docs/LOOPER.md.

USB audio recording

The computer records the FM-1 over USB with no driver: ChoralRoot In, six channels at 44.1 kHz (master, the
CHORD part and the BASS part as stereo pairs, the parts dry). Options > USB Record switches it off and presents the
serial console instead; Options > USB Level = Fixed records at full level while MASTER only sets the speaker. It
works in QuickTime, ffmpeg and Live directly, also through a USB hub: the stream used to restart every quarter
second while sound played, because the stuffed bits of real audio made a packet longer than its reserved slot;
the endpoint now reserves room for that. The MIDI port is called "ChoralRoot FM-1". Melodee's design (Kerem
Kilic). docs/USB-AUDIO.md.

The second core

The FM-1's chip has two cores and ChoralRoot now uses both: the CHORD part renders on one and the BASS part on the
other, sample for sample the same mix as before, so each part has its own eight voices (sixteen for FM6) and an
eight-note chord with the bass no longer steals from itself. Nothing to set: if the second core fails to answer
the firmware runs on one core for that session and GEEK OUT says so. Bring-up after fm1-x0x and Melodee.
docs/DUALCORE.md.

Screens

The loop ring round every screen is gone: a playing, armed, recording or overdubbing loop shows as a small dial
at the right end of the top line (red progress, a pulse on the downbeat, a REC dot that follows the REC LED); the
ring stays only where the loop is the whole screen. The FX, PERF, BASS, KEY, LOOP, METRO and SAVE layers are knob
rows: the picker over four cells whose glyphs show what each parameter does (a room, a moon, echoes, a gate, a
spring) and change with the value, so nothing waits for a knob turn to appear. HOME tap goes home without changing
the view; HOME held opens a view menu with a lock. PERF and FX tap toggle on and off (the LEDs say it; no
messages); the arp no longer holds by default (LATCH holds it). The logo shows once at power-on and then only
after three minutes without input, and after ten minutes without input the screen switches off altogether (the
panel's backlight goes out; the LEDs, the looper and MIDI keep running); any key, button, knob or incoming MIDI
wakes it and does its normal job.

SAFE MODE

Two crashes in a row within 30 seconds of starting (power cycles do not count) start ChoralRoot in SAFE MODE:
factory sounds, the stored data ignored and untouched, installing and backing up still working, Options > Flash
Data to erase the data. Only two more crashes there fall back to ROM boot. GEEK OUT and the console's boot
command show where a crashed boot stopped.

CZ-1 and sounds as files

CZ-1 (engine 14, from Melodee): native Casio CZ-1 tones with their eight-step envelopes, Casio's 64 tones,
eight banks, Casio SysEx in and out. Sounds as files: the installer page's Sounds
section and fm1_install.py --sounds / --export-sound / --import-sound / --rename-sound / --delete-sound move one
user sound as a small JSON file; FM6 voices travel as DX7 .syx and CZ-1 tones as Casio dumps. The backup protocol
ran on hardware for the first time. docs/SOUNDS.md.

For developers

The emulator is a resizable FM-1 panel with Ableton's key layout, the FM-1's buttons on F5..F10 and 7..=, fine
knob steps on Shift, and a flicker-free panel. fm1_install.py --debug reads 79 live counters from the unit over
SysEx (ISR load, late blocks, core 1, USB capture, the boot stage), fm1_install.py --screen off|on darkens the
screen for tests driven over MIDI, and tools/uac_check.py measures the USB recording from a Mac. The FM-1 Transporter (../FM-1-transporter), the review-gate stand-in in
tools/transporter/, docs/BOOT-SAFETY.md (a boot stub so a failed upload always leaves a way to UBOOT: designed,
not yet built) and docs/INSTALL-COMPAT.md's dark-unit checklist come from recovering a unit bricked by an
interrupted write. Felucca 1.0.5's BASS+ fix is in.

Known limits

The POOL memory is at 95 %; docs/INTEGRATION.md lists what can be trimmed. The boot stub of docs/BOOT-SAFETY.md
is not built yet, so an interrupted install still needs the Transporter. The FM TONE presets were tuned against
the reference model and want an ear pass. After a flash, macOS occasionally does not pick up ChoralRoot In until
the unit restarts once more.

Credits: Melodee (Kerem Kilic, GPL-3.0) for the CZ-1, the FM6 voice platform and the USB audio design; fm1-x0x
and Melodee for the dual-core bring-up (with JieLi's AC79 SDK, Apache-2.0); Felucca (Leo Kuroshita) for the base.


ChoralRoot 0.14 for the M-VAVE FM-1 (identity FM-1_920).

Install from the browser at https://quixotic7.github.io/ChoralRootFM1/ (Chrome or Edge, the FM-1 connected by USB), or with the command-line installer: python3 tools/fm1_install.py choralroot-0.14.fwsc.

SHA256SUMS lists the package and the app. The package holds three JieLi AC79 SDK files (Apache-2.0); LICENSE, LICENSING.md and LICENSES.zip carry every licence. Installing firmware is at your own risk.

Full Changelog: v0.13...v0.14

Don't miss a new ChoralRootFM1 release

NewReleases is sending notifications on new releases.