ChoralRoot FM-1

A chord instrument for the M-VAVE FM-1 inspired by the Telepathic Orchid ORC—1.

Version 0.13. GPL-3.0.

Melodic Exploration, Not a Groovebox

One hand plays root notes while the other shapes the chords. The screen shows one thing at a time, BIG.

the idle screen: the name over three stripes
Idle.
D major 7 held: the chord name, the notes D4 F#4 A4 C#5
Chord. MAJ and M7 held, D4 pressed. The 7th in ORANGE.
the sound editor: the four oscillators of WARM PAD
Sound Editor. Four oscillators of creamy V-Analog goodness. Easy to program.

Get it

Try it first

The exact same firmware, running in your browser. No FM-1 needed. Chrome, Edge and Firefox supported.

It's even better on hardware

Install directly to your FM-1 from Chrome or Edge.

Download choralroot-0.13.fwsc

For the command-line installer:
python3 tools/fm1_install.py choralroot-0.13.fwsc

Source

On GitHub, GPL-3.0. Created by Quixotic7, building off of Felucca by Hügelton Instruments.

Manual

Who needs this?

The installer talks to the FM-1 over Web MIDI. The firmware it runs now (stock, Felucca or ChoralRoot) stages the update loader, the loader writes the whole image, then the FM-1 restarts and reports FM-1_920. Do not unplug it while it writes. An interrupted install resumes when you press Install again: the FM-1 stays in update mode.

On the command line, from the source: pip3 install mido python-rtmidi, then python3 tools/fm1_install.py choralroot-0.13.fwsc. --info prints the connected FM-1's identity.

Playing

The left side of the keyboard is your chord command center. Use the top row to control a chord type and the bottom row to add modifiers like 7ths and 9ths. Key B will lock your chord commands. Play a root note on the right and let ChoralRoot handle the rest. We promise, you're in good company.

The FM-1 panel with ChoralRoot's labels: VOLUME, BPM, SOUND, BASS SOUND on the left rotaries, VOICING, BASS VOICE, PERFORM, FX on KNOB 1–4, the buttons named KEY, PERF, FX, BASS, LATCH, OPT, HOME, SAVE, METRO, LOOP, REC, EDIT, the screen showing D major 7, and the keys DIM MIN MAJ SUS, 6 m7 M7 LOCK 9 on the chord block
The panel as ChoralRoot labels it. Dmaj7: MAJ and M7 held, D4 pressed. The names under the buttons and knobs are the roles below; the printed names are in the tables.
CHORD BLOCKROOTS D4 … G5OCT− / OCT+ shift them by octaves, −2 … +26m7M7LOCK9D4G5DIMMINMAJSUS

The chord block, F3 … C4

6m7M7LOCK9DIMMINMAJSUS

The roots, D4 … G5. OCT− / OCT+ shift them by octaves, −2 … +2.

D4G5

Chord types on the black keys F#3 G#3 A#3 C#4: DIM, MIN, MAJ, SUS. Extensions on the white keys F3 G3 A3 C4: 6, m7, M7, 9. Both are momentary; extensions stack.

Roots on D4 … G5, 18 keys: alone a single note, with a type held (or latched) the chord. OCT− and OCT+ shift them by octaves, −2 … +2.

LOCK

B3 is LOCK. Tap it on (B3 lit, lock top right on the screen), tap it again off. With LOCK on, the chord keys held are latched when released, so one hand plays roots. Once nothing is held, a type key resets the latch to that type alone, and an extension key toggles its extension in the latched set.

Hold MIN, release: minor. 6: m6. 9: m6/9. 9 again: m6. MAJ: major, extensions cleared.

Two types held together make a Secret Chord (Options > Secret Chords): DIM+SUS a power chord, MAJ+SUS augmented, MIN+SUS [0 3 5].

Buttons

Tap = use, hold = open, OCT− or HOME = close.

A tap is the button's on/off action, always. A hold past 300 ms opens its layer, and the layer stays open after release (the button blinks); holding another layer button switches layer. In a layer the roots and KNOB 1–4 belong to the layer; the chord keys keep their job.

PrintedChoralRootTapHold
SELKEYKey Mode on/offthe key layer: roots = the tonic (MIN held too = a minor key); KNOB 1–4 = TONIC / SCALE / TRANSPOSE / SINGLE NOTES
ARPPERFperformance on/offthe perform layer: white roots D4–C5 = STRUM, STRUM 2, SLOP, ARP, ARP 2, PATTERN, HARP; KNOB 1–4 = the mode's parameters
FXFXthe sound's main effect on/offthe fx layer: white roots pick the effect KNOB 4 rides; KNOB 1–3 its parameters, KNOB 4 the amount
ENVBASSbass on/offthe bass layer: KNOB 1–4 = BEHAVIOUR (Chords Only / Unison / Single Notes / Solo) / REGISTER / SOUND / LEVEL; roots preview the bass. BASS held + EDIT = the bass sound's editor
LFOLATCHsticky keys / arp hold on/off—
GLOOPTthe Options menu open/closeheld + a knob = the knob's second function: KNOB 1 split point, SELECT metronome level, ALGORITHM bass volume. In the editor: SHIFT
HOMEHOMEback to the view from anywhere; tapped again on the view: the next View (CHORD / KEYBOARD / NOTES / GEEK OUT / SCOPE)—
SAVESAVEsave the sound to one of 32 user slots, named with the keyssave / load / delete loops
SEQMETROmetronome on/offthe beat layer: beat and time signature
PLAYLOOPplay / stop the loop (green LED = playing)the loop layer: white roots = slots 1–10, D#4 = CLEAR (hold 1 s), F#4 = UNDO; KNOB 1–4 = SYNC / QUANTIZE / COUNT-IN / LEVEL; while playing: the Overdub / Pause / Undo / Clear picker
RECRECrecord (count-in, then the sync length) / overdub arm; the red LED blinks while recordingundo the last layer
EDITEDITthe sound editor on the chord soundthe engine picker
OCT− / OCT+OCTAVEthe octave of the roots; in layers, menus and dialogs: back (closes) / OKboth together: PANIC (all notes off on every stream, CC 123 on the three channels, octave reset, LOCK latch cleared)

Rotaries

No push switches. A knob turn shows its value big for a second.

PrintedChoralRootTurnOPT held
MASTERVOLUMEthe volume (the pot)—
SELECTBPMthe tempo, 20–300; in menus and pickers: scrollmetronome volume
PRESETSSOUNDbrowse the chord sound; it loads at once—
ALGORITHMBASS SOUNDbrowse the bass soundbass volume
KNOB 1VOICINGthe Orchid's chord voicing: the lowest note up an octave, or the highest down; one click = one note. Never reassigned outside layers and the editorsingle-note split point
KNOB 2BASS VOICEthe bass register, in octaves—
KNOB 3PERFORMthe selected mode's main parameter: strum speed, slop amount, arp rate, pattern number, harp speed—
KNOB 4FXthe amount of the selected effect—

Options

OPT tap opens them, one setting per screen. SELECT scrolls, KNOB 1 sets, OCT+ enters, OCT− goes back, HOME or OPT leaves. Play Style (Simple / Advanced / Free), Extension Addition, Secret Chords, Velocity, Bass Behaviour, Single Notes, Split Point, the MIDI Perform / Bass / Raw Chord channels, Raw Chord Sound, MIDI Clock, View, Motion, LEDs, Hold Time, Version, Calibrate.

Screen

The chord name fills the screen (the Orchid's naming, squeezed to fit), the voiced notes under it, extensions in orange; Key: C top left in Key Mode. HOME on the view steps the Views: CHORD, KEYBOARD, NOTES, GEEK OUT, SCOPE. Pickers instead of lists, meters of bold stripes, the loop as a dotted red ring. Panic turns the screen red.

The sound editor

EDIT tap opens it on the chord sound, BASS held + EDIT on the bass sound; inside, SHIFT + EDIT switches between them. EDIT tap or HOME leaves. Every group remembers its screen and lane.

The FM-1 panel in the sound editor on WARM PAD: the buttons labelled OSC, FILT, ENV, LFO, EDIT, SHIFT, HOME, SAVE, PERF, MOD, FX, MIX; KNOB 1–4 labelled WAVE, LEVEL, COARSE, FINE; SELECT labelled LANE; the screen showing the four oscillators
EDIT tapped on WARM PAD, a VA sound. The buttons become OSC FILT ENV LFO / MOD FX MIX and SHIFT; KNOB 1–4 are WAVE LEVEL COARSE FINE of OSC 1; SELECT steps the lane.

Groups

The buttons become seven groups. The top row is the signal flow (OSC on the printed FX, FILT on SEL, ENV, LFO), the bottom row the output stage (MOD on SEQ, FX on PLAY, MIX on REC). A group's button opens the group; tapped again, its next screen.

Lanes

SELECT runs through the lanes. A lane is the four values on KNOB 1–4, always in the same four colours.

A detent is 5 % of the range, an enumeration one step. SHIFT (GLO: a tap latches it, a hold is momentary) makes it one unit a detent.

the filter screen of WARM PAD: the low-pass curve over cutoff, resonance, filter type and envelope amount
edit8. Two rows of four cells under a wide shape: here the filter curve. stack screens show the instances as rows: the four oscillators, the four LFOs, the eight matrix slots.
The FM-1 panel in the sound editor's FILT group: KNOB 1–4 labelled CUTOFF, RESO, F.TYPE, ENV AMT, the screen showing the filter curve of WARM PAD
FILT: CUTOFF RESO F.TYPE ENV AMT under the filter curve.

The engine picker

EDIT held, or PRESETS turned in the editor, opens it as a preview. The white roots are the engines: ANALOG, FM6, VA, PHASE, LOFI, VOICE, TRIO, WHEEL, PHYS and NOISE. KNOB 1 steps the engine's factory presets, KNOB 2 inits the sound. OCT+ or EDIT keeps it; OCT− or HOME cancels, and the sound comes back.

Quick mapping

For an engine with a matrix (the VA): ENV held + a knob turned, and the envelope last shown modulates that knob's parameter, the amount on the knob. LFO held + a knob does the same with the LFO. OCT− held + a knob clears the parameter's modulation. A modulated cell carries a small mark in the source's colour.

SAVE

SAVE opens the save dialog. KNOB 1 picks the user slot, U01–U32; the white roots type the name, D#4 is a space, F#4 deletes. SAVE again or OCT+ saves, OCT− cancels. SAVE held 1 s on a used slot deletes it. User chord sounds list after the factory bank on PRESETS, user bass sounds on ALGORITHM.

Sounds

PRESETS browses the chord sounds, ALGORITHM the bass sounds. Eight voices are shared: a six-note chord plus the bass.

Chord bank PRESETS 1–43

  1. TINE EP
  2. FM BELL
  3. PIANO
  4. FM PAD
  5. SOFT PAD
  6. STRINGS
  7. PWM STRINGS
  8. CZ STRINGS
  9. FULL ORGAN
  10. GOSPEL ORGAN
  11. JAZZ ORGAN
  12. FM ORGAN
  13. CZ ORGAN
  14. CHOIR
  15. CLOUD PAD
  16. SHIMMER
  17. SYNTH BRASS
  18. CZ BRASS
  19. MARIMBA
  20. HARP
  21. KALIMBA
  22. PLUCK
  23. FM PLUCK
  24. SINE KEYS
  25. LUSH PAD
  26. WARM PAD
  27. GLASS PAD
  28. SLOW STRINGS
  29. ENSEMBLE STR
  30. VA BRASS
  31. SOFT BRASS
  32. POLY KEYS
  33. PWM KEYS
  34. CLAV
  35. SOFT LEAD
  36. HOLLOW
  37. BELLS
  38. SWEEP PAD
  39. SOFT AAH
  40. ORGANISH
  41. MORPH PAD
  42. VINYL KEYS
  43. WIDE STRINGS

25–43 are the VA's.

Bass bank ALGORITHM 1–12

  1. SUB BASS
  2. SQUARE BASS
  3. FM BASS
  4. FAT BASS
  5. ACID BASS
  6. WAVE BASS
  7. WOW BASS
  8. PLUCK BASS
  9. DEEP SUB
  10. PUNCH BASS
  11. RUBBER BASS
  12. SYNC BASS

0 = off.

After the banks come 32 user slots, saved with SAVE, then every engine's own factory presets through the engine picker.

Engines

All synthesis: Felucca's ANALOG, FM6 (six-operator FM, msfa), PHASE (phase distortion), LOFI, VOICE (formant), TRIO, WHEEL (tonewheel organ), PHYS (modal and string physical models) and NOISE; and ChoralRoot's VA. No samples: the firmware leaves out Felucca's SAMPLE, GRAIN and DRUM engines.

The VA

ChoralRoot's own four-oscillator virtual analog, written for this project in fixed point: four oscillators (basic waves, a morphing wave from sine to pulse, or white / brown / vinyl noise), a state-variable filter that morphs LP → BP → HP → notch with spread and drive, four AHDSR envelopes, four LFOs (free or synced to the tempo) and an eight-slot modulation matrix, in stereo. Every parameter is on the editor's screens, and a patch saves with the sound.

MIDI

USB MIDI in and out, TRS MIDI in.

Out

Three streams, each on its own channel and each on or off in Options: performance (the chord as played or performed) on channel 1, bass on channel 2, the raw chord on channel 3 (off by default, as on the Orchid). 24 PPQN clock out (Options > MIDI Clock: Out), with start when the loop starts.

In

Notes on the chord channel play the chord sound directly, with no chord generation, as on the Orchid; notes on the bass channel play the bass sound. CC 7 is the level, CC 91 / 93 / 94 the reverb / chorus / delay sends; program change picks the sound. Clock in syncs the tempo (MIDI Clock: In). SysEx is used for firmware updates.

No Bluetooth: ChoralRoot never turns the radio on.

Recovery

The installer's Return to official V15 puts M-VAVE's firmware back.

Download the official FM-1 V15 firmware (FM-1.fwsc) yourself from M-VAVE's downloads page and select it in the installer. The browser checks its size and SHA-256 locally (the file is never uploaded) and installs it the same way. On the command line: python3 tools/fm1_install.py FM-1.fwsc.

ChoralRoot has no backup protocol. User sounds, loops and settings stored on the FM-1 are not saved, and a return to stock erases them.

If an install fails and the FM-1 no longer starts, recovery needs FM-1-transporter.

Credits and licence

ChoralRoot was made by Quixotic7 with the assistance of his AI Overlords: Claude Fable 5.1 and Claude Opus 5.5. ChoralRoot is free, don't like something, feel free to make your own version. ChoralRoot FM-1 is free software under the GNU General Public License, version 3 only: LICENSE. The package and this site carry LICENSING.md and the licence texts in LICENSES.

  • Felucca by Leo Kuroshita (@kurogedelic), Hügelton Instruments: the platform, the engines, the installer, the update loader; with its CrispyZebra waveforms (MIT). github.com/hugelton/Felucca
  • The chord logic is inspired after the Telepathic Instruments Orchid ORC—1 and Quixotic7's prior monome grid iii adaption choralroot.
  • Inter Tight by The Inter Project Authors (SIL OFL 1.1, OFL.txt): the UI font, and this page's.
  • DaisySP (Electrosmith, Emilie Gillet) and Rings (Emilie Gillet), MIT: the PHYS engine.
  • msfa from Dexed (Google, Pascal Gauthier), Apache-2.0: the FM6 engine.
  • JieLi AC79 SDK: the package holds three of its files (uboot.boot, cfg_tool.bin, eq_cfg_hw.bin; JieLi Technology, Apache-2.0). No M-VAVE material.