github Quixotic7/ChoralRootFM1 v0.31
ChoralRoot 0.31

latest releases: v0.32-smk37, v0.32, v0.31-smk37...
4 hours ago

ChoralRoot 0.31 brings USB Host to the FM-1: its USB-C port can be the host of a USB MIDI device instead of
talking to a computer, so two FM-1s play each other over one plain USB-C cable, notes, clock and start / stop in
both directions. And when USB goes (a cable pulled, a computer asleep, the host FM-1 switched off), the FM-1 now lets
go of the notes MIDI was holding. Everything else is 0.30's, and your settings, sounds, loops and favorites are stored
as before.

USB Host (new in 0.31, FM-1 only)

  • Options > USB Host: On turns the USB-C port into the host of a USB MIDI device. It is never saved: every
    start-up is a normal USB device again, so the computer, updates and backups always find the FM-1.
  • Two FM-1s: a plain USB-C to USB-C cable between them, A on USB Host, B as it is (any ChoralRoot). B plays what
    A sends on its Perform and Bass channels, and A what B sends. With A's MIDI Clock on Out and B's on In, B's tempo and
    loop follow A's start and stop; the other way round works too. Both run on their batteries: nothing else is needed.
  • In: notes, program changes, the CCs, pitch bend, aftertouch, clock and start / continue / stop, exactly as over
    USB MIDI from a computer (MIDI Keys, Clock In and 0.30's transport included). Out: what the FM-1 sends over USB
    MIDI (the Perform, Bass and Raw Chord notes, the clock with MIDI Clock Out). SysEx is not passed either way.
  • While USB Host is On the port belongs to the device: no computer, no USB audio, no updates. Off gives it
    back: the FM-1 leaves the bus for a second and the computer on the cable finds it again (on a unit, within about
    10 seconds), without a restart.
  • The FM-1 does not power the port. A keyboard, a controller or a hub needs power of its own: a powered hub or a
    powered USB-C OTG adapter. Full-speed devices only, one hub level.
  • The line under USB Host reads connected, in 1234 (the messages received) once a device is found, or looking
    and a few letters while it searches (read them out if you report a problem). A message box says what happened:
    USB device connected, USB device gone, not a USB MIDI device, nothing on USB: powered hub?,
    USB device not answering, low-speed USB: not supported.

USB Host is Melodee's (Kerem Kilic, Ellic Studio, with recursivefieldinstruments' enumeration and descriptor
parsing), ported to ChoralRoot. Thank you. Credits and licences: LICENSING.md.

Tried on units: two FM-1s on a plain cable, both ways, with clock and start / stop; USB Host On and Off with a Mac
on the cable. Not yet tried on a unit: a USB MIDI keyboard or controller, and hubs (the code is tested against
models of them). Please report what you find.

Held notes when USB goes (new in 0.31)

  • When the USB peer goes with notes held (a computer unplugged or asleep, the host FM-1 unplugged or switched to USB
    Host Off, a device on USB Host gone), the FM-1 releases every note MIDI was holding on both parts, lets the
    sustain pedal and the pitch bend go, and puts MIDI Keys' keys up. Before, an FM-1 on the device side kept the note
    until PANIC.
  • The FM-1's own keys and the loop keep theirs.
  • Limit: the FM-1 does not keep track of which input sent a note, so a USB loss also stops notes held from
    Bluetooth or the TRS jack at that moment.
  • This one is on the SMK-37 too (0.31-smk37).

Installing

  • The web installer's default is 0.31: press Install. Options > Version reads ChoralRoot 0.31.
  • From 0.30, or 0.27 to 0.29.2, nothing needs doing: your sounds, loops, favorites and settings are all there.
  • From 0.21 or older: install 0.29.2 first and switch the FM-1 on once to keep 0.21's sounds (the installer asks;
    0.30.md).
  • A Single core package: the web installer's Advanced > Hardware fallback. Options > Version then reads
    ChoralRoot 0.31 1-core.
  • From another firmware: M-Flasher with the M-Bootloader and
    choralroot-0.31.fwsc.
  • Signed builds: GitHub built these packages from the tag's source and signed them; 0.26.1.md
    "Checking a package" says how to check one (choralroot-0.31.fwsc).

Going back

  • To 0.30: the installer offers it under Other versions. 0.30 stores everything the same way, so your settings,
    sounds, loops and favorites stay. It has no USB Host, and on the device side a note a lost USB peer held stays on
    until PANIC again.
  • To another firmware: M-Flasher with the M-Bootloader (MANUAL.md
    "Switching firmwares"); back up ChoralRoot's data in the installer first.
  • To the stock firmware completely: M-VAVE's own updater, M-Updater.

ChoralRoot 0.31 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.31.fwsc.

choralroot-0.31-1core.fwsc is the same firmware on one processor core, for an FM-1 that crashes or freezes with the standard package (the installer offers it under Advanced > Hardware fallback). Settings, sounds and loops stay when you switch between the two.

SHA256SUMS lists both packages and their apps. GitHub built and signed each from this tag's source (The Firmware Hub's shared workflow); check one with gh attestation verify choralroot-0.31.fwsc --repo Quixotic7/ChoralRootFM1 --signer-workflow zvenson/fm1-build/.github/workflows/build.yml. 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.30...v0.31

Don't miss a new ChoralRootFM1 release

NewReleases is sending notifications on new releases.