Firmware

ChoralRoot

Hype: on fire · 95

Chord machine that follows and voices harmonies as you play.

forM-VAVE FM-1·by@Quixotic7

Unclaimed. Is this yours? Sign in with GitHub as @Quixotic7 to claim it.

Download v0.27

choralroot-0.27.fwsc· 596 KB· +7 files

GPL-3.0· Quixotic7/ChoralRootFM1·downloads come from the creator’s GitHub releases

526 commits and 34 releases in the last year
34 releases
  1. v0.27-smk37.1ChoralRoot 0.27-smk37.1 for the SMK-37 (community test)Beta17 files

    ChoralRoot 0.27-smk37.1: a community test build for the M-Vave SMK-37 Pro, SMK-37 Elite and MKE-P37 (and the Starrykey 37 Play, which takes the Pro's package). Community-tested, not tested by the maintainer; genkigenki's port (https://github.com/genkigenki/fm1-to-smk37). Read SMK37.md first.

    One package per model: choralroot-0.27-smk37.1.fwsc (SMK-37 Pro, Starrykey 37 Play), -elite, -mke; each has a -1core twin for a keyboard that crashes or freezes with the standard one. Install with the SMK-37 test installer (the link testers were given) or python3 tools/fm1_install.py FILE. The way back: M-VAVE's package for your model with M-UPGRADE.

    SHA256SUMS lists every package and app; GitHub built and signed each from this tag's source (The Firmware Hub's shared workflow): gh attestation verify FILE --repo Quixotic7/ChoralRootFM1 --signer-workflow zvenson/fm1-build/.github/workflows/build.yml. The packages hold 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: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.27-smk37...v0.27-smk37.1

  2. v0.27-smk37ChoralRoot 0.27-smk37 for the SMK-37 (community test)Beta17 files

    ChoralRoot 0.27-smk37: a community test build for the M-Vave SMK-37 Pro, SMK-37 Elite and MKE-P37 (and the Starrykey 37 Play, which takes the Pro's package). Community-tested, not tested by the maintainer; genkigenki's port (https://github.com/genkigenki/fm1-to-smk37). Read SMK37.md first.

    One package per model: choralroot-0.27-smk37.fwsc (SMK-37 Pro, Starrykey 37 Play), -elite, -mke; each has a -1core twin for a keyboard that crashes or freezes with the standard one. Install with the SMK-37 test installer (the link testers were given) or python3 tools/fm1_install.py FILE. The way back: M-VAVE's package for your model with M-UPGRADE.

    SHA256SUMS lists every package and app; GitHub built and signed each from this tag's source (The Firmware Hub's shared workflow): gh attestation verify FILE --repo Quixotic7/ChoralRootFM1 --signer-workflow zvenson/fm1-build/.github/workflows/build.yml. The packages hold 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: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.27...v0.27-smk37

  3. v0.27ChoralRoot 0.278 files

    ChoralRoot 0.27 brings FX routing: a Routing page in the FX layer that draws the chorus, the delay, the reverb and the master filter as boxes on a wire, where you reorder them and choose between Parallel, the three send buses ChoralRoot always had, and Chain, one path through the four blocks in the order on the screen, the original firmware's way. In Parallel the filter can now sit before the effects, so a high cut keeps the fizz out of the reverb and a low cut the bass out of the delay. The web device manager finds an FM-1 that the computer still calls "FM-1". Parallel with the filter after the effects, where every FM-1 starts, is 0.26.1's sound bit for bit. 0.27 replaces 0.26.1 as the web installer's default; updating keeps your settings, sounds, loops and favorites, and going back to 0.26.1 is possible at any time.

    FX routing (new in 0.27)

    Hold FX for the FX layer and turn SELECT to the last page, Routing.

    • The picture. The effects are boxes on a wire from in to out: Chorus blue, Delay orange, Reverb yellow, the master Filter white (hollow while the filter is Off). In Parallel the three effects stand side by side between in and a sum, the Filter before or after them; in Chain the four are in a row, each feeding the next.
    • Moving a block. Five black keys are shortcuts on this page: C#4 Chorus, D#4 Delay, F#4 Reverb, G#4 Filter. Hold one and its box lifts above the row; turn KNOB 1 while you hold it, one click one place, the other boxes sliding over to make room; let go and it lands. Every other key plays as usual, so you hear the effects while you route them.
    • Parallel or Chain. A#4 (a tap) or KNOB 2 switches the mode; the small line at the top says which.
      • Parallel is ChoralRoot as it always was: three buses side by side, each fed by the parts' sends and added back into the mix. The effects' order is kept but not heard here. The Filter has two places: hold G#4 and turn KNOB 1 anticlockwise to put it before the buses (the effects hear the filtered signal, the dry sound is filtered too), clockwise to put it back after them, on the whole output, as before.
      • Chain is one path: the dry mix goes into the first block, each effect adds its sound to everything before it and passes it all on, and the filter filters everything that reached it. Chorus into Delay into Reverb makes the echoes shimmer and then washes them out; Reverb first gives a delay that repeats a whole hall. In Chain each effect's amount is the chord part's send into it (the Sends page); the bass part's own sends rest, the bass goes through the chain with the chords. The drive stays in each part's sound, before everything, in both modes.
    • Kept with the instrument. Mode and order are set once, like the other effect settings, and kept by SAVE held.
    • The same sound unless you change it. Parallel with the filter after the effects, where every FM-1 starts, is exactly 0.26.1: not one sample differs. On the FM-1 the reverb still runs on the second core in both modes.
    • The manual's Routing section has the details. GitHub issue 21 asked for this; the design is FX.md "The routing".

    The device manager finds an FM-1 called "FM-1" (new in 0.27)

    • On a Mac the web device manager could say "FM-1 not found" while the installer saw the FM-1 fine (GitHub issue 32). ChoralRoot names its USB port "ChoralRoot FM-1", but macOS keeps the name it first saw for a USB device, so an FM-1 updated from the stock firmware stays "FM-1" in the computer's MIDI list. The manager now takes either name and checks, as it always did, that the port answers as ChoralRoot before it reads anything.

    Installing

    • The web installer's default is 0.27: press Install. Options > Version reads ChoralRoot 0.27.
    • From 0.26.1 or 0.26 nothing needs doing: your sounds, loops, favorites and settings are all there, and the effects sound as they did until you open the Routing page.
    • From 0.25.1 or older: install 0.27 as you would 0.26.1; 0.25.1.md "Installing" says what the update from those changes (your FM-1 is moved to the FM-1 chord keys once).
    • A Single core package for FM-1s that have trouble with Dual Core: the web installer's Advanced > Hardware fallback. Options > Version then reads ChoralRoot 0.27 1-core. The routing works the same on one core.
    • Signed builds: as 0.26.1, 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.27.fwsc).
    • The SMK-37: the community test build stays 0.26-smk37 (SMK37.md); the routing page is not on it yet.

    Going back to 0.26.1

    The installer offers 0.26.1 under Other versions.

    • Your settings, sounds, loops and favorites stay as they are: 0.27 stores everything exactly as 0.26.1 does. The routing's mode and order are kept in the same record under two new tags that 0.26.1 skips, so it comes up in Parallel with the filter after the effects, its own sound.
    • One exception: if you had moved the filter before the effects AND set every one of the filter's four cells off its default, 0.26.1 takes the effects' global settings (the reverb's, delay's and chorus's own parameters and the bass part's sends) back to their defaults once; your sounds, loops and the chord part's sends are untouched.
    • The Routing page is not there; the FX layer has eight pages again.

    ChoralRoot 0.27 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.27.fwsc.

    choralroot-0.27-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.27.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: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.26.1...v0.27

  4. v0.26.1ChoralRoot 0.26.18 files

    ChoralRoot 0.26.1 is 0.26's firmware, built from source on GitHub and signed: the first ChoralRoot release that GitHub builds from the tag's source in The Firmware Hub's shared build workflow and signs with a build attestation, so anyone can check that a package is the one made from this source, and The Firmware Hub can show "Built from source on GitHub" on ChoralRoot's card. Nothing else changes: the sound, the features and the way your settings, sounds, loops and favorites are stored are 0.26's, and only the version line reads 0.26.1. 0.26.1 replaces 0.26 as the web installer's default; updating is optional, and going back to 0.26 changes nothing.

    Signed builds (new in 0.26.1)

    • Built by GitHub, from the tag. The packages on this release were built on GitHub's own machines by The Firmware Hub's shared workflow (zvenson/fm1-build), from the source of the tag v0.26.1, and signed there: each package and app carries a build attestation that names the repository, the tag, the commit and the build run. They are the same bytes as the maintainer's own build: the sha256s the web installer checks were committed before the tag, and the release was published only after the signed packages matched them.
    • The same firmware as 0.26. The code is 0.26's; the version line is the one difference.

    Checking a package

    With the GitHub CLI:

    gh attestation verify choralroot-0.26.1.fwsc --repo Quixotic7/ChoralRootFM1 \
      --signer-workflow zvenson/fm1-build/.github/workflows/build.yml
    

    It prints the tag, the commit and the build run; add --source-ref refs/tags/v0.26.1 to require this tag. The same works for choralroot-0.26.1-1core.fwsc and the two apps. 0.26 and older releases have no attestation: their sha256s are in SHA256SUMS and the installer's list.

    Installing

    • The web installer's default is 0.26.1: press Install. Options > Version reads ChoralRoot 0.26.1.
    • From 0.26 nothing changes but the version line: your sounds, loops, favorites and settings are all there.
    • From 0.25.1 or older this is 0.26's update: 0.26.md says what 0.26 brought (VA and FM6 chords on both cores, the black background) and what changes from older versions.
    • A Single core package for FM-1s that have trouble with Dual Core: the web installer's Advanced > Hardware fallback. Options > Version then reads ChoralRoot 0.26.1 1-core.

    Going back to 0.26

    The installer offers 0.26 under Other versions. Nothing changes: 0.26 is the same firmware and stores everything as 0.26.1 does, so your settings, sounds, loops and favorites stay as they are. Only the version line reads 0.26 again, and its packages carry no attestation.


    ChoralRoot 0.26.1 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.26.1.fwsc.

    choralroot-0.26.1-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.26.1.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: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.26...v0.26.1

  5. v0.26-smk37ChoralRoot 0.26-smk37 for the SMK-37 (community test)Beta17 files

    ChoralRoot 0.26-smk37: a community test build for the M-Vave SMK-37 Pro, SMK-37 Elite and MKE-P37 (and the Starrykey 37 Play, which takes the Pro's package). Community-tested, not tested by the maintainer; genkigenki's port (https://github.com/genkigenki/fm1-to-smk37). Read SMK37.md first.

    One package per model: choralroot-0.26-smk37.fwsc (SMK-37 Pro, Starrykey 37 Play), -elite, -mke; each has a -1core twin for a keyboard that crashes or freezes with the standard one. Install with the SMK-37 test installer (the link testers were given) or python3 tools/fm1_install.py FILE. The way back: M-VAVE's package for your model with M-UPGRADE.

    SHA256SUMS lists every package and app. The packages hold 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: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.25.1...v0.26-smk37

  6. v0.26ChoralRoot 0.268 files

    ChoralRoot 0.26 gives dense VA and FM6 chords room to breathe: with Dual Core On, a VA or FM6 chord's notes are now shared between the FM-1's two processor cores, and the VA's sound code runs from the chip's fast memory, so an 8-note VA pad over a bass that used to run out of time and drop notes now plays with about a quarter of its time to spare, and FM6 chords keep a good margin while you record. The sound is the same, bit for bit. The screen's background is now pure black, and the installer recognises the Bubba Machine firmware and shows the way from it. 0.26 replaces 0.25.1 as the web installer's default; updating keeps your settings, sounds, loops and favorites, and going back to 0.25.1 is possible at any time.

    VA and FM6 chords on both cores (new in 0.26)

    • The chord's notes are shared between the cores. With Options > Dual Core On (the default), the second core renders the bass and then part of the chord's notes, the first core the rest, and the two halves are added together. P5's chords have been shared this way since 0.22; VA and FM6 chords now are too.
    • The VA's sound code runs from fast memory (RAM instead of the flash), on both cores and in the Single core package too, so every VA voice takes less time.
    • What it gives, measured on an FM-1 (8 notes over a bass, the time one block of audio takes against the time it has):
      • a VA MORPH PAD chord over PUNCH BASS took 112 % of its time in 0.25.1 (117 % while recording): it ran late and dropped notes. In 0.26 it takes about 75 %, recording included, with nothing late and nothing dropped.
      • an FM6 TINE EP chord over DEEP SUB took 94 % (101 % while recording, with a few late blocks and dropped notes). In 0.26: 69 %, and 73 % while recording.
    • The same sound. The sums are exact: a chord played on two cores is the same samples as on one. Nothing about your sounds or how they play changes; there is simply more room before the FM-1 runs out of time.
    • CZ-1 and GRAIN chords are not shared yet, and neither is anything with Dual Core Off.

    A black background (new in 0.26)

    • The screen's background is pure black instead of a very dark grey, everywhere ChoralRoot draws on it, and the LED windows of the panel pictures and P5's cells with it. On the FM-1's screen the old grey could look like the backlight showing through. The other colours are as they were, and every text stays as readable.

    The installer and Bubba Machine (new in 0.26)

    • Bubba Machine (a groovebox firmware for the FM-1) introduces itself as an old official firmware, so the installer took it for M-VAVE's own. Its updater takes only M-VAVE's official package: an install of ChoralRoot over it was refused by the FM-1 after the first reads, with nothing written.
    • The web installer and tools/fm1_install.py now recognise it by its USB name ("FM-1 Bubba Machine"), say so ("What is on my FM-1?" and --info name it), and refuse the install at once, with or without the override, with the way out: return to the official V15 first (the page's "Return to official V15" with M-VAVE's FM-1.fwsc, or python3 tools/fm1_install.py FM-1.fwsc, or Bubba Machine's own installer), then install ChoralRoot. INSTALL-COMPAT.md "Bubba Machine" has the details.

    Installing

    • The web installer's default is 0.26: press Install. Options > Version reads ChoralRoot 0.26.
    • From 0.25.1 nothing needs doing: your sounds, loops, favorites and settings are all there, the chord keys included. 0.25.1.md says what 0.25.1 brought (the FM-1 chord keys the default).
    • From 0.25, 0.24 or older: install 0.26 as you would 0.25.1; 0.25.1.md "Installing" says what the update from those changes (your FM-1 is moved to the FM-1 chord keys once).
    • A Single core package for FM-1s that have trouble with Dual Core: the web installer's Advanced > Hardware fallback. Options > Version then reads ChoralRoot 0.26 1-core. It plays everything on one core, as before, with the VA's faster code.
    • The SMK-37: a community test build of 0.26, 0.26-smk37, SMK37.md.

    Going back to 0.25.1

    The installer offers 0.25.1 under Other versions.

    • Your settings, sounds, loops and favorites stay as they are: 0.26 stores everything exactly as 0.25.1 does, and nothing is moved or rewritten at the update or on the way back.
    • On 0.25.1 the VA and FM6 chords are rendered on one core again: the same sound, with less room, so an 8-note VA pad over a bass can run late and drop notes there as it did before.
    • The background is the dark grey again.

    ChoralRoot 0.26 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.26.fwsc.

    choralroot-0.26-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. 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: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.25.1...v0.26

  7. v0.25.1ChoralRoot 0.25.18 files

    ChoralRoot 0.25.1 makes the FM-1 chord keys the layout every FM-1 plays: the three small black keys are DIM, MIN and MAJ, G#3 + A#3 together are SUS, the white keys F3 .. B3 are 6, m7, M7 and 9, the roots run from C4, and LOCK is the LFO button. Your FM-1 switches to it once, at the first start after the update, whatever it had before; LOCK and the chord you had latched carry over, and everything else in your settings, sounds, loops and favorites stays as it was. Classic is one Option away: Options > Chord Keys. 0.25.1 is 0.25 with this one change (the sound is the same, GRAIN's included) and replaces it as the web installer's default. Going back to 0.25 is possible at any time; the last section says what it means.

    The FM-1 chord keys are the default (new in 0.25.1)

    • The layout. The three small black keys are the chord types: F#3 DIM, G#3 MIN, A#3 MAJ, and G#3 + A#3 together are SUS (one finger on both). The white keys F3 G3 A3 B3 are the extensions 6, m7, M7, 9. The roots are C4 to G5, 20 keys. LOCK is the LFO button (tap: on / off; hold: the LOCK layer) and LATCH is GLO held, then LFO. A root pressed while the SUS pair is still landing waits for it (Options > SUS Window, 30 ms), so a minor chord never turns into a sus chord under your fingers. This is the layout 0.24 added as an option; the manual's chapter 4 now describes it first.
    • Your FM-1 switches once. At the first start of 0.25.1 every FM-1 updated from an older version is put on the FM-1 chord keys, whatever it had (0.23 or older, which had no choice, and 0.24 / 0.25 on Classic or on FM-1). Everything else in your settings stays as it was: LATCH, the SUS Window, Full K Shorts, your sounds, loops and favorites.
    • With LOCK on, the chord you had latched stays latched: LOCK holds chord types, not keys, so a latched SUS now lights G#3 and A#3, a latched 9 lights B3, and LOCK's light is on the LFO button.
    • Classic is one Option away. Options > Chord Keys: Classic brings back the Orchid's layout (SUS on C#4, the 9 on C4, LOCK on B3, LATCH on LFO, roots D4 to G5). Choose it once and it stays Classic, through power cycles and later updates: the switch never runs again.
    • A new FM-1, Options > Reset Settings and Flash Data start on the FM-1 chord keys.
    • The SMK-37 is unchanged: its chord keys are its pads, and Chord Keys is not in its Options. There is no SMK-37 build of 0.25.1; 0.25-smk37 stays its current build.

    Installing

    • The web installer's default is 0.25.1: press Install. Options > Version reads ChoralRoot 0.25.1.
    • From 0.25 nothing needs doing: your sounds, loops, favorites and settings are all there, and the chord keys are FM-1's (above). 0.25.md says what 0.25 brought (GRAIN's MORPH a blend of A and B).
    • From 0.24, 0.24-beta3, beta2, beta1 or 0.23 the same; 0.24.md says what 0.24 brought. From 0.22 or older, its "Installing" says what changes.
    • A Single core package for FM-1s that have trouble with Dual Core: the web installer's Advanced > Hardware fallback. Options > Version then reads ChoralRoot 0.25.1 1-core.

    Going back to 0.25

    The installer offers 0.25 under Other versions.

    • Your settings, sounds, loops and favorites stay. 0.25 and 0.24 show the layout your settings hold: FM-1 after the switch, Classic if you chose it since. Options > LEDs reads Glow there (a Stock choice comes back when you set it again).
    • 0.23 and older have no Chord Keys: they play the Classic keys, and LATCH reads off at the first start there.
    • Coming back to 0.25.1 after the older version has saved a setting counts as an update again: the FM-1 switches to the FM-1 chord keys once more.
    • A backup made with an older version restores onto the FM-1 chord keys; one made with 0.25.1 restores the layout it holds.

    ChoralRoot 0.25.1 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.25.1.fwsc.

    choralroot-0.25.1-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. 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: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.25...v0.25.1

  8. v0.25-smk37ChoralRoot 0.25-smk37 for the SMK-37 (community test)Beta17 files

    ChoralRoot 0.25-smk37: a community test build for the M-Vave SMK-37 Pro, SMK-37 Elite and MKE-P37 (and the Starrykey 37 Play, which takes the Pro's package). Community-tested, not tested by the maintainer; genkigenki's port (https://github.com/genkigenki/fm1-to-smk37). Read SMK37.md first.

    One package per model: choralroot-0.25-smk37.fwsc (SMK-37 Pro, Starrykey 37 Play), -elite, -mke; each has a -1core twin for a keyboard that crashes or freezes with the standard one. Install with the SMK-37 test installer (the link testers were given) or python3 tools/fm1_install.py FILE. The way back: M-VAVE's package for your model with M-UPGRADE.

    SHA256SUMS lists every package and app. The packages hold 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: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.24...v0.25-smk37

  9. v0.25ChoralRoot 0.258 files

    ChoralRoot 0.25 makes GRAIN's two sources one sound: MORPH now blends A and B into the sound the grains play, smoothly, also when ENV 2 or an LFO moves it, and turning TONE, MOTION, SEED or TYPE changes the sound as you turn, with no gap. It replaces 0.24 as the web installer's default. Updating from 0.24 keeps your settings, sounds, loops and favorites, and nothing outside GRAIN changes. GRAIN sounds that use MORPH sound different from 0.24 (seven of the eight presets, and your own sounds with MORPH between the ends or modulated); the first section says how. Going back to 0.24 is possible at any time; the last section says what it means.

    GRAIN (new in 0.25)

    • MORPH is a blend of the two sources. Every grain now reads A and B at the same place and mixes them: MORPH 0 is A alone, 127 B alone, and in between the grains play one sound made of both. In 0.24 each grain read either A or B, and MORPH set how many grains read B, so the two materials alternated inside the cloud.
    • MORPH moves smoothly under modulation. ENV 2, the LFOs, velocity and the rest of the matrix's sources, and the track envelope's SHP, glide MORPH within each grain instead of in steps: an LFO on MORPH breathes between the two materials, ENV 2 on MORPH turns one into the other during the note.
    • The source knobs change the sound as you turn them. TONE, MOTION, SEED and TYPE rebuild a source while the grains go on playing: the new sound is written over the old one a little at a time, several times a second while a knob keeps turning, and it never goes quiet. In 0.24 a source fell silent while it was rebuilt, and turning a knob steadily could leave it silent until your hand stopped.
    • The wave band shows the blend. On the GRAIN screen the band draws the mix of A and B as MORPH weighs them, in a colour between A's blue and B's orange, and the grains in one colour.
    • GRAIN takes a few percent more of the processor than in 0.24 (one more read for each sample a grain plays).

    What sounds different from 0.24. Every GRAIN sound whose MORPH sits between 0 and 127, or is moved by the matrix, an LFO, ENV 2 or SHP, now plays the blend instead of the alternating grains:

    • the presets STRUM (ENV 2 turns METAL's strike into PLUCK's body) and SHIMMER (LFO 1 on MORPH) change the most; CLOUD PAD, BREATH PAD, SWARM, ACID DUST and GLITCH (MORPH at 40 or 64) sound smoother and more of one piece. FROZEN (MORPH 0, nothing on it) is exactly as before.
    • your own GRAIN sounds with MORPH between the ends, or with MORPH modulated, change the same way. A sound at MORPH 0 with nothing on it plays as before. At MORPH 127 the grains read B alone as before, but at A's pitch: B's grains no longer have their own root (a PLUCK as B sounds 6 cents sharp, a PLUCK as A leaves B 6 cents flat).
    • in the middle of MORPH a blend of two different materials is a little quieter than either one alone (about 3 dB at MORPH 64).

    The sounds themselves are unchanged: a GRAIN sound stores its knobs, not audio, and every knob means what it meant in 0.24. docs/GRAIN.md "The third phase" has the details.

    Installing

    • The web installer's default is 0.25: press Install. Options > Version reads ChoralRoot 0.25.
    • From 0.24 nothing needs doing: your sounds, loops, favorites and settings are all there.
    • From 0.24-beta3, beta2, beta1 or 0.23 the same; 0.24.md says what 0.24 brought (the FM-1 chord keys, MIDI Keys, the shortcuts on the Full keyboard, GRAIN, velocity on all 27 keys). From 0.22 or older, its "Installing" says what changes.
    • A Single core package for FM-1s that have trouble with Dual Core: the web installer's Advanced > Hardware fallback. Options > Version then reads ChoralRoot 0.25 1-core.
    • The SMK-37: a community test build of 0.25, 0.25-smk37, SMK37.md.

    Going back to 0.24

    The installer offers 0.24 under Other versions.

    • Your settings, sounds, loops and favorites stay, and every saved GRAIN sound loads on 0.24 with the same knobs: 0.25 stores sounds exactly as 0.24 does, nothing of the format changed.
    • MORPH acts as it did in 0.24 there: each grain reads A or B, and MORPH sets how many read B. So a GRAIN sound you made or changed on 0.25 with MORPH between the ends sounds as 0.24 plays it (the alternating grains), and the source knobs fall quiet again while they turn. When you come back to 0.25 it plays the blend again.
    • Going back further (0.24-beta3, beta2, beta1 or 0.23): the same, plus what 0.24.md "Going back" says about the newer Options, GRAIN sounds on 0.23 and Key Touch.

    ChoralRoot 0.25 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.25.fwsc.

    choralroot-0.25-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. 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: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.24...v0.25

  10. v0.24ChoralRoot 0.248 files

    ChoralRoot 0.24 brings a second layout for the chord keys made for the FM-1's own keybed (Options > Chord Keys: FM-1, SUS from two keys under one finger, LOCK on the LFO button), MIDI that plays the FM-1's keys, shortcuts on the Full keyboard, the GRAIN engine, velocity on all 27 keys with poly aftertouch out, a lighter FM TONE and a SAFE MODE that really starts clean. It replaces 0.23 as the web installer's default and the three 0.24 betas. Updating from 0.24-beta3, beta2, beta1 or 0.23 keeps your settings, sounds, loops and favorites; nothing changes how you play until you choose it (the chord keys stay the Orchid's layout, Classic, unless you pick FM-1). Going back is possible at any time; the last section says what it means.

    The FM-1 chord keys (new in 0.24)

    Options > Chord Keys chooses between Classic, the Orchid's layout as before (DIM MIN MAJ SUS on F#3 G#3 A#3 C#4, the extensions on F3 G3 A3 C4, LOCK on B3), and FM-1, made for this keybed:

    • F#3 G#3 A#3 are DIM MIN MAJ, and G#3 + A#3 together are SUS. Press both small black keys with one finger. F3 G3 A3 B3 are 6 m7 M7 9, and C4 and C#4 become roots: 20 of them, from C4 to G5.
    • Options > SUS Window (30 to 80 ms, 30 by default; listed with the FM-1 chord keys only): one finger never lands on both keys at once, so a root pressed while the pair is still landing waits for it and plays once, as Dsus at the pair, or as Dm when the window closes on G#3 alone. You never hear a minor chord turn into a sus chord. A root with no chord key held, or with chord keys held from before, plays at once.
    • Secret chords (with Options > Secret Chords on): F#3 + G#3 is m add4, F#3 + A#3 augmented, all three the power chord, each where it was in Classic. With them off those pairs are "the last pressed wins", as before.
    • LOCK is on LFO: tap it for LOCK on / off (the LFO light lit), hold it for the LOCK layer. A latched SUS shows as G#3 and A#3 lit; the same chord keys pressed again on their own switch it off. LATCH is GLO held, then LFO; the LFO light pulses while LATCH is on.
    • The picking keys in the layers (loop slots, naming, the KEY layer's tonic) stay on D4 to G5 as in Classic. Loops store chords, not keys, so they play the same in either layout. Changing the layout lets go of any key you hold.

    Also new in 0.24

    • MIDI Keys (Options > MIDI Keys, Off by default): on that channel the notes 53 to 79 press the FM-1's own keys F3 to G5, through the layout you chose: chord keys, roots, LOCK, everything as on the keybed. It cannot share a channel with MIDI Perform or MIDI Bass. The notes on MIDI Perform still play the sound directly, as before.
    • Shortcuts on the Full keyboard (Options > Full K Shorts, Off by default): on the KEY layer's Full keyboard F#5 brings the chord keys back on the low keys and G5 plays a chord on every key (the chord LOCK latched, else Key Mode's chord); a quick press toggles, a long press switches only while held. F3 to F5 stay notes.
    • KNOB 1 is the voicing on the Full keyboard too (it was the octave there; the octave is OCT- / OCT+).
    • SAFE MODE's Flash Data clears your saved sounds too (all 128 user slots), as the manual always said. Back up first (the device manager's Backup) if you want them again afterwards.
    • FM TONE uses about 27 KB less working memory, with every sound exactly as before; a dense chord on a preset that uses HARM (GLASS PAD, DRONE, HOLLOW, CLAV, STRINGS, SQUARE LEAD) takes up to about 9 % more of FM TONE's processor time.
    • ChoralRoot for the M-Vave SMK-37: community test builds, SMK37.md.

    GRAIN

    GRAIN plays clouds of short grains read out of two pieces of sound it makes itself (no samples to load): two sources A and B from eight families (PLUCK, DRONE, BELL, BREATH, CHIRP, SWEEP, VOWEL, METAL) with TONE, MOTION and SEED, MORPH between them, SIZE, DENS, POS, SPRD, RAND, PITCH and SCAN for the grains, the VA's filter, two envelopes, two LFOs and an eight-slot modulation matrix, and eight presets after INIT (CLOUD PAD, SHIMMER, BREATH PAD, FROZEN, STRUM, SWARM, ACID DUST, GLITCH). 0.24-beta2's notes have every knob.

    Playing

    Nothing here changes until you turn Key Touch on (Options > Key Touch, Fixed by default).

    • All 27 keys sense velocity: the top seven (C#5 to G5) now play at the velocity you strike them with, read another way (Charles Vestal's method, from his MONK-1 and CTL-1 firmwares), a little coarser than the other keys and with no aftertouch.
    • Key Touch: Vel + Poly AT sends the pressure as polyphonic aftertouch over MIDI.
    • Geek Out 2 shows the last key's velocity and the pressure (VEL 73 AT 42) while Key Touch is on.
    • With Key Touch on, notes sound a few milliseconds later than in 0.23 (the keys wait for their velocity).

    Installing

    • The web installer's default is 0.24: press Install. Options > Version reads ChoralRoot 0.24.
    • From 0.24-beta3, 0.24-beta2, 0.24-beta1 or 0.23 nothing needs doing: your sounds, loops, favorites and settings are all there; the chord keys stay Classic until you choose FM-1.
    • From 0.22 or older: 0.23.md says what changes (FM TONE at the other engines' level) and, from 0.21 or older, 0.22.md "Installing" what the first start does.
    • A Single core package for FM-1s that have trouble with Dual Core: the web installer's Advanced > Hardware fallback. Options > Version then reads ChoralRoot 0.24 1-core.

    Going back to 0.24-beta3, 0.24-beta2, 0.24-beta1 or 0.23

    The installer offers 0.23 under Other versions, and the betas under Show beta releases.

    • The new Options are not known there. With Chord Keys on FM-1, Full K Shorts on or the SUS Window off 30 ms, an older version reads LATCH as off (that is the only thing it loses) and plays the Classic layout; with MIDI Keys on, it reads Raw Chord Sound as Off. Nothing else is touched, and when you come back the Options are as you left them unless the older version saved its settings meanwhile (then set them again). KNOB 1 is the octave on the Full keyboard there again.
    • Going back to 0.24-beta3: nothing else changes.
    • Going back to 0.24-beta2: the same, and SAFE MODE's Flash Data keeps the saved sounds there.
    • Going back to 0.24-beta1 or 0.23: the same, plus what 0.24-beta3.md "Going back" says about GRAIN sounds (they stay in their slots and play as GRAIN again when you return; there they play the VA's init sound) and, for 0.23, Key Touch (Vel + Poly AT reads as Fixed there; the top seven keys follow your playing again).
    • Going back to 0.22 is the same, plus what 0.23's notes say (0.23.md, "Going back to 0.22").

    ChoralRoot 0.24 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.24.fwsc.

    choralroot-0.24-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. 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.

    What's Changed

    New Contributors

    Full Changelog: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.23...v0.24

  11. v0.24-beta3-smk37.1ChoralRoot 0.24-beta3-smk37.1 for the SMK-37 (community test)Beta17 files

    ChoralRoot 0.24-beta3-smk37.1: a community test build for the M-Vave SMK-37 Pro, SMK-37 Elite and MKE-P37 (and the Starrykey 37 Play, which takes the Pro's package). Community-tested, not tested by the maintainer; genkigenki's port (https://github.com/genkigenki/fm1-to-smk37). Read SMK37.md first.

    One package per model: choralroot-0.24-beta3-smk37.1.fwsc (SMK-37 Pro, Starrykey 37 Play), -elite, -mke; each has a -1core twin for a keyboard that crashes or freezes with the standard one. Install with the SMK-37 test installer (the link testers were given) or python3 tools/fm1_install.py FILE. The way back: M-VAVE's package for your model with M-UPGRADE.

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

    What's Changed

    Full Changelog: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.24-beta3-smk37...v0.24-beta3-smk37.1

  12. v0.24-beta3-smk37ChoralRoot 0.24-beta3-smk37 for the SMK-37 (community test)Beta17 files

    ChoralRoot 0.24-beta3-smk37: a community test build for the M-Vave SMK-37 Pro, SMK-37 Elite and MKE-P37 (and the Starrykey 37 Play, which takes the Pro's package). Community-tested, not tested by the maintainer; genkigenki's port (https://github.com/genkigenki/fm1-to-smk37). Read SMK37.md first.

    One package per model: choralroot-0.24-beta3-smk37.fwsc (SMK-37 Pro, Starrykey 37 Play), -elite, -mke; each has a -1core twin for a keyboard that crashes or freezes with the standard one. Install with the SMK-37 test installer (the link testers were given) or python3 tools/fm1_install.py FILE. The way back: M-VAVE's package for your model with M-UPGRADE.

    SHA256SUMS lists every package and app. The packages hold 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: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.24-beta2-smk37...v0.24-beta3-smk37

  13. v0.24-beta3ChoralRoot 0.24-beta3Beta8 files

    ChoralRoot 0.24-beta3 is the third beta of 0.24: it fixes SAFE MODE's Flash Data, which now really clears your saved sounds, makes FM TONE lighter on memory with the same sound, and is built for the M-Vave SMK-37 too, on top of 0.24-beta2's GRAIN engine and 0.24-beta1's velocity on the top seven keys, poly aftertouch out and the touch on Geek Out 2. Like the earlier betas it is opt-in: the web installer offers it only when you tick Show beta releases under Other versions, and 0.23 stays its default. A beta may have bugs (please report them on GitHub), and the next stable release, 0.24, replaces it. What is new since 0.24-beta2 comes first; after it are the whole of 0.24's notes so far, so this page is all you need. Updating from 0.24-beta2, 0.24-beta1 or 0.23 keeps your settings, sounds, loops and favorites; going back is possible at any time (the last section says what it means).

    New since 0.24-beta2

    • SAFE MODE's Flash Data clears your saved sounds too. Since 0.22 the saved sounds (the 128 user slots) live in an area of their own, and Flash Data left that area out: it erased the settings, the favorites and the loops but kept every saved sound. It now erases them as well, as the manual always said, so a unit started clean really is clean. Back up first (the device manager's Backup) if you want them again afterwards. Nothing else about SAFE MODE changes, and nothing is erased unless you choose Flash Data there.
    • FM TONE uses less memory, with the same sound. It used to keep a second copy of its HARM waves in the working memory; it now reads them from the firmware, sample for sample the same values, which frees about 27 KB of working memory for what comes next (more engines or effects). Every FM TONE sound plays exactly as before. The cost: a dense chord on a preset that uses HARM (GLASS PAD, DRONE, HOLLOW, CLAV, STRINGS, SQUARE LEAD) takes slightly more of the processor, up to about 9 % more for FM TONE's part of the work; the presets without HARM cost the same or a little less.
    • ChoralRoot for the M-Vave SMK-37. Community test builds of this beta exist for the SMK-37 Pro, SMK-37 Elite, MKE-P37 and Starrykey 37 Play: SMK37.md.

    GRAIN (new in 0.24-beta2)

    GRAIN plays clouds of short grains, a few milliseconds to a few tenths of a second each, read out of two pieces of sound that it makes itself. There are no samples to load: a GRAIN sound stores its knobs, and the engine renders the material from them whenever the sound loads or a knob of the material turns.

    • Two sources, A and B. Each is about three quarters of a second of sound made by one of eight families, set by four knobs: TYPE (PLUCK, a plucked string; DRONE, detuned saws under a moving filter; BELL, two-operator FM; BREATH, filtered noise; CHIRP, sweeping sines; SWEEP, a driven saw through a sweeping filter; VOWEL, a voice moving round A E I O U; METAL, inharmonic partials with a strike), TONE (the brightness or colour within the family), MOTION (how the material moves over its length: decay, sweep, vibrato, strums) and SEED (a variant: the same SEED is always the same material). Turn one and that source is made again in a moment while you play; the grains on the other source keep sounding.
    • MORPH goes from A to B. It is a granular blend, not a crossfade: each grain reads A or B, and MORPH is the share that read B, so in between the two materials interleave in the cloud. ENV 2 or an LFO on MORPH moves between them (the preset STRUM strikes on B's METAL and settles into A's PLUCK).
    • The grains: SIZE (their length), DENS (how many start each second), POS (where in the material they start) and SPRD (how far round POS they scatter); RAND (random detune, and some grains played in reverse), PITCH (-24 to +24 semitones) and SCAN (POS moving through the material by itself: right of 0 forward, left of 0 in reverse, very slowly near 0 and faster further out; 0 holds still).
    • The VA's filter (CUT, RES, FTYPE round low-pass, band-pass, high-pass and notch, DRIVE, KTRK), ENV 1 for the volume, ENV 2 a second envelope for modulation, two LFOs (RATE, WAVE, DEPTH, FADE; each can sync to the tempo with the VA's divisions) and an eight-slot modulation matrix: sources ENV1, ENV2, LFO1, LFO2, VEL, KEY, RAND and MODW (the mod wheel, CC 1 over MIDI), destinations MORPH, POS, SIZE, DENS, SPRD, RAND, PITCH, SCAN, CUT, RES, FTYPE, DRIVE, the LFOs' rates and depths and AMP. Amounts work as on the VA: tenths below 6, whole numbers from 6. Quick modulation works too: hold ENV or LFO and turn a knob.
    • The pages. In the sound editor: OSC has the two screens SRC (SRC 1 and SRC 2: TYPE, TONE, MOTION, SEED) and GRAIN (GRAIN: SIZE, DENS, POS, SPRD; GRAIN+: MORPH, RAND, PITCH, SCAN); FILT the filter under its curve (FILTER, FILTER+); ENV ENV 1 · amp and ENV 2 · mod; LFO the two LFOs and their SYNC; MOD the eight slots (SRC, DST, AMT), then EXPR as on every engine.
    • The wave band. On the SRC and GRAIN screens a band across the screen draws the material: on SRC the source of the active row, made anew when its render lands; on GRAIN both, A in blue and B in orange, each as bright as MORPH gives it, with POS as a white line (it moves with SCAN), SPRD as a green span round it, and every sounding grain as a bright line travelling over its source.
    • Eight presets after INIT: CLOUD PAD, SHIMMER, BREATH PAD, FROZEN, STRUM, SWARM, ACID DUST and GLITCH. GRAIN comes after WHEEL in the engine picker and under OPT + PRESETS.
    • Chord and bass on GRAIN share the material. The FM-1 holds one pair of sources: the chord part's (or, when only the bass is on GRAIN, the bass part's). With both parts on GRAIN the bass plays the chord sound's A and B with its own grain knobs, MORPH, filter and envelopes.
    • Notes up to C6 are pitched from the material; above C6 they stop rising.
    • The device manager and sound files carry GRAIN sounds as any engine's.

    Also new: the firmware is smaller (about 35 KB of flash freed to make room for GRAIN), with no change to any sound or screen.

    Playing (new in 0.24-beta1)

    Nothing here changes until you turn Key Touch on: with Options > Key Touch at Fixed (the default) every key plays at Options > Velocity, as in 0.23.

    • The top seven keys sense velocity. With Key Touch on (Dynamic, Vel + Aftertouch or the new Vel + Poly AT), C#5 to G5 now play at the velocity you strike them with, as F3 to C5 do; until 0.24-beta1 they followed the velocity you had been playing. All 27 keys sense velocity now.
      • These seven are read another way (the method is Charles Vestal's, from his MONK-1 and CTL-1 firmwares), which tells a light touch from a firm press less finely than the other keys can: a touch plays softly, a light press in the middle, and a firm press at or near the top.
      • They have no aftertouch: leaning on one of them moves nothing. Options > Velocity Curve does not change them (it shapes F3 to C5); Velocity Sens works on all 27.
    • Key Touch: Vel + Poly AT. A fourth value of Options > Key Touch, after Vel + Aftertouch. The keys play and sound as with Vel + Aftertouch, and the pressure goes out over MIDI (MIDI Perform and MIDI Bass) as polyphonic aftertouch, to each note that sounds, on the channel it was played on, instead of as channel pressure. Every note gets the same value: a chord is one finger's. Saved automatically, as the other Options.
    • Geek Out 2 shows the keys' touch. While Key Touch is on, the view's title line reads the last key's velocity and the pressure now, such as VEL 73 AT 42, in place of 2 cores or 1 core (AT stays 0 with Dynamic, which senses no pressure). With Key Touch at Fixed it says 2 cores or 1 core, as before.
    • With Key Touch on, notes sound a few milliseconds later than in 0.23. While the top row is read, the other keys are read less often, so a key on F3 to C5 waits about 13 ms after it lands for its velocity instead of about 9; the top seven now wait a few milliseconds for theirs (they played at once before). With Key Touch at Fixed nothing waits, as before.

    Installing

    • A beta, opt-in. In the web installer tick Show beta releases under Other versions (the page remembers it in that browser), choose 0.24-beta3 and press Install. Without the tick the installer offers 0.23, the latest stable release, as before. On an FM-1 that runs the beta, "What is on my FM-1?" says so, and Install then writes 0.23 unless you choose the beta again. Options > Version reads ChoralRoot 0.24-beta3.
    • From 0.24-beta2, 0.24-beta1 or 0.23 nothing needs doing: your sounds, loops, favorites and settings are all there (from 0.24-beta1 or 0.23, GRAIN is new in the engine picker).
    • From 0.22 or older. The beta brings everything of 0.23 with it: 0.23.md says what changes (FM TONE sounds at the Digitone's own levels play about 6 dB quieter, as loud as the other engines) and, from 0.21 or older, 0.22.md "Installing" what the first start does.
    • A Single core package, for FM-1s that have trouble with Dual Core. The web installer offers it under Advanced > Hardware fallback, as for 0.23. Options > Version then reads ChoralRoot 0.24-beta3 1-core (shown as 0.24-beta3 1-core, the line being too short for the whole name).

    Going back to 0.24-beta2, 0.24-beta1 or 0.23

    The installer offers 0.23 at any time (it is the default), and 0.24-beta2 and 0.24-beta1 under Show beta releases. 0.24-beta3 stores nothing differently from 0.24-beta2: your sounds, loops, favorites and settings stay as they are on any of them.

    • Going back to 0.24-beta2 changes nothing for your data. FM TONE sounds the same. Only SAFE MODE's Flash Data is the old one there: it keeps the saved sounds.
    • Going back to 0.24-beta1 or 0.23, the same, plus what an older version does not know:
      • GRAIN sounds you saved stay in their slots, untouched, but do not play as GRAIN there. 0.24-beta1 and 0.23 have no GRAIN engine. Each GRAIN sound you saved shows at the end of the VA's list under its own name and plays the VA's plain starting sound, with the message engine retired: init sound. Nothing is rewritten or deleted: back on 0.24-beta3 (or 0.24-beta2) the sound is GRAIN again, exactly as you saved it. Two things do replace it: saving over that slot on the older version (it then holds what you saved there), and deleting it. Renaming it keeps the GRAIN sound.
      • A part left on GRAIN (the chord or the bass sound when you go back) starts on FM6 TINE EP or VA DEEP SUB there, as on a new unit.
      • Backups. A backup taken on 0.24-beta3 restores onto 0.24-beta2, 0.24-beta1 and 0.23 with its GRAIN sounds kept as they are (they play as above on 0.24-beta1 and 0.23, and as GRAIN again on 0.24-beta2 and 0.24-beta3). 0.22 and older refuse a group of ten sounds that holds a GRAIN sound, so restore such a backup on 0.23 or newer.
      • Going back to 0.23 is also the same as from 0.24-beta1 for Key Touch:
        • Vel + Poly AT. 0.23 reads it as Key Touch Fixed: its keys play at Options > Velocity, while Velocity Sens, Aftertouch Sens, the Velocity Curve and Numerals keep their values. Once 0.23 saves its settings (you hold SAVE or change an Option there), Key Touch is Fixed when you come back; until then it is still Vel + Poly AT. To keep the keys sensing on 0.23, set Key Touch to Vel + Aftertouch before going back.
        • The top seven keys follow the velocity you have been playing again, as in 0.23.
        • Geek Out 2's title line says 2 cores or 1 core again, with Key Touch on too.
    • Going back to 0.22 is the same, plus what 0.23's notes say (0.23.md, "Going back to 0.22").

    ChoralRoot 0.24-beta3 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.24-beta3.fwsc.

    choralroot-0.24-beta3-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. 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: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.24-beta2-smk37...v0.24-beta3

  14. v0.24-beta2-smk37ChoralRoot 0.24-beta2-smk37 for the SMK-37 (community test)Beta17 files

    ChoralRoot 0.24-beta2-smk37: a community test build for the M-Vave SMK-37 Pro, SMK-37 Elite and MKE-P37 (and the Starrykey 37 Play, which takes the Pro's package). Community-tested, not tested by the maintainer; genkigenki's port (https://github.com/genkigenki/fm1-to-smk37). Read SMK37.md first.

    One package per model: choralroot-0.24-beta2-smk37.fwsc (SMK-37 Pro, Starrykey 37 Play), -elite, -mke; each has a -1core twin for a keyboard that crashes or freezes with the standard one. Install with the SMK-37 test installer (the link testers were given) or python3 tools/fm1_install.py FILE. The way back: M-VAVE's package for your model with M-UPGRADE.

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

    What's Changed

    New Contributors

    Full Changelog: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.24-beta2...v0.24-beta2-smk37

  15. v0.24-beta2ChoralRoot 0.24-beta2Beta8 files

    ChoralRoot 0.24-beta2 is the second beta of 0.24: a seventh engine, GRAIN, a granular synth that makes its own material from a few knobs, on top of 0.24-beta1's velocity on the top seven keys, poly aftertouch out and the touch on Geek Out 2. Like 0.24-beta1 it is opt-in: the web installer offers it only when you tick Show beta releases under Other versions, and 0.23 stays its default. A beta may have bugs (please report them on GitHub), and the next stable release, 0.24, replaces it. What is new since 0.24-beta1 comes first; after it are the whole of 0.24's notes so far, so this page is all you need. Updating from 0.24-beta1 or 0.23 keeps your settings, sounds, loops and favorites; going back is possible at any time (the last section says what it means for GRAIN sounds).

    New since 0.24-beta1: GRAIN

    GRAIN plays clouds of short grains, a few milliseconds to a few tenths of a second each, read out of two pieces of sound that it makes itself. There are no samples to load: a GRAIN sound stores its knobs, and the engine renders the material from them whenever the sound loads or a knob of the material turns.

    • Two sources, A and B. Each is about three quarters of a second of sound made by one of eight families, set by four knobs: TYPE (PLUCK, a plucked string; DRONE, detuned saws under a moving filter; BELL, two-operator FM; BREATH, filtered noise; CHIRP, sweeping sines; SWEEP, a driven saw through a sweeping filter; VOWEL, a voice moving round A E I O U; METAL, inharmonic partials with a strike), TONE (the brightness or colour within the family), MOTION (how the material moves over its length: decay, sweep, vibrato, strums) and SEED (a variant: the same SEED is always the same material). Turn one and that source is made again in a moment while you play; the grains on the other source keep sounding.
    • MORPH goes from A to B. It is a granular blend, not a crossfade: each grain reads A or B, and MORPH is the share that read B, so in between the two materials interleave in the cloud. ENV 2 or an LFO on MORPH moves between them (the preset STRUM strikes on B's METAL and settles into A's PLUCK).
    • The grains: SIZE (their length), DENS (how many start each second), POS (where in the material they start) and SPRD (how far round POS they scatter); RAND (random detune, and some grains played in reverse), PITCH (-24 to +24 semitones) and SCAN (POS moving through the material by itself: right of 0 forward, left of 0 in reverse, very slowly near 0 and faster further out; 0 holds still).
    • The VA's filter (CUT, RES, FTYPE round low-pass, band-pass, high-pass and notch, DRIVE, KTRK), ENV 1 for the volume, ENV 2 a second envelope for modulation, two LFOs (RATE, WAVE, DEPTH, FADE; each can sync to the tempo with the VA's divisions) and an eight-slot modulation matrix: sources ENV1, ENV2, LFO1, LFO2, VEL, KEY, RAND and MODW (the mod wheel, CC 1 over MIDI), destinations MORPH, POS, SIZE, DENS, SPRD, RAND, PITCH, SCAN, CUT, RES, FTYPE, DRIVE, the LFOs' rates and depths and AMP. Amounts work as on the VA: tenths below 6, whole numbers from 6. Quick modulation works too: hold ENV or LFO and turn a knob.
    • The pages. In the sound editor: OSC has the two screens SRC (SRC 1 and SRC 2: TYPE, TONE, MOTION, SEED) and GRAIN (GRAIN: SIZE, DENS, POS, SPRD; GRAIN+: MORPH, RAND, PITCH, SCAN); FILT the filter under its curve (FILTER, FILTER+); ENV ENV 1 · amp and ENV 2 · mod; LFO the two LFOs and their SYNC; MOD the eight slots (SRC, DST, AMT), then EXPR as on every engine.
    • The wave band. On the SRC and GRAIN screens a band across the screen draws the material: on SRC the source of the active row, made anew when its render lands; on GRAIN both, A in blue and B in orange, each as bright as MORPH gives it, with POS as a white line (it moves with SCAN), SPRD as a green span round it, and every sounding grain as a bright line travelling over its source.
    • Eight presets after INIT: CLOUD PAD, SHIMMER, BREATH PAD, FROZEN, STRUM, SWARM, ACID DUST and GLITCH. GRAIN comes after WHEEL in the engine picker and under OPT + PRESETS.
    • Chord and bass on GRAIN share the material. The FM-1 holds one pair of sources: the chord part's (or, when only the bass is on GRAIN, the bass part's). With both parts on GRAIN the bass plays the chord sound's A and B with its own grain knobs, MORPH, filter and envelopes.
    • Notes up to C6 are pitched from the material; above C6 they stop rising.
    • The device manager and sound files carry GRAIN sounds as any engine's.

    Also new: the firmware is smaller (about 35 KB of flash freed to make room for GRAIN), with no change to any sound or screen.

    Playing (new in 0.24-beta1)

    Nothing here changes until you turn Key Touch on: with Options > Key Touch at Fixed (the default) every key plays at Options > Velocity, as in 0.23.

    • The top seven keys sense velocity. With Key Touch on (Dynamic, Vel + Aftertouch or the new Vel + Poly AT), C#5 to G5 now play at the velocity you strike them with, as F3 to C5 do; until 0.24-beta1 they followed the velocity you had been playing. All 27 keys sense velocity now.
      • These seven are read another way (the method is Charles Vestal's, from his MONK-1 and CTL-1 firmwares), which tells a light touch from a firm press less finely than the other keys can: a touch plays softly, a light press in the middle, and a firm press at or near the top.
      • They have no aftertouch: leaning on one of them moves nothing. Options > Velocity Curve does not change them (it shapes F3 to C5); Velocity Sens works on all 27.
    • Key Touch: Vel + Poly AT. A fourth value of Options > Key Touch, after Vel + Aftertouch. The keys play and sound as with Vel + Aftertouch, and the pressure goes out over MIDI (MIDI Perform and MIDI Bass) as polyphonic aftertouch, to each note that sounds, on the channel it was played on, instead of as channel pressure. Every note gets the same value: a chord is one finger's. Saved automatically, as the other Options.
    • Geek Out 2 shows the keys' touch. While Key Touch is on, the view's title line reads the last key's velocity and the pressure now, such as VEL 73 AT 42, in place of 2 cores or 1 core (AT stays 0 with Dynamic, which senses no pressure). With Key Touch at Fixed it says 2 cores or 1 core, as before.
    • With Key Touch on, notes sound a few milliseconds later than in 0.23. While the top row is read, the other keys are read less often, so a key on F3 to C5 waits about 13 ms after it lands for its velocity instead of about 9; the top seven now wait a few milliseconds for theirs (they played at once before). With Key Touch at Fixed nothing waits, as before.

    Installing

    • A beta, opt-in. In the web installer tick Show beta releases under Other versions (the page remembers it in that browser), choose 0.24-beta2 and press Install. Without the tick the installer offers 0.23, the latest stable release, as before. On an FM-1 that runs the beta, "What is on my FM-1?" says so, and Install then writes 0.23 unless you choose the beta again. Options > Version reads ChoralRoot 0.24-beta2.
    • From 0.24-beta1 or 0.23 nothing needs doing: your sounds, loops, favorites and settings are all there, and GRAIN is in the engine picker.
    • From 0.22 or older. The beta brings everything of 0.23 with it: 0.23.md says what changes (FM TONE sounds at the Digitone's own levels play about 6 dB quieter, as loud as the other engines) and, from 0.21 or older, 0.22.md "Installing" what the first start does.
    • A Single core package, for FM-1s that have trouble with Dual Core. The web installer offers it under Advanced > Hardware fallback, as for 0.23. Options > Version then reads ChoralRoot 0.24-beta2 1-core (shown as 0.24-beta2 1-core, the line being too short for the whole name).

    Going back to 0.24-beta1 or 0.23

    The installer offers 0.23 at any time (it is the default), and 0.24-beta1 under Show beta releases. Your sounds, loops and favorites stay, and so do your other settings. What an older version does not know:

    • GRAIN sounds you saved stay in their slots, untouched, but do not play as GRAIN there. 0.24-beta1 and 0.23 have no GRAIN engine. Each GRAIN sound you saved shows at the end of the VA's list under its own name and plays the VA's plain starting sound, with the message engine retired: init sound. Nothing is rewritten or deleted: back on 0.24-beta2 the sound is GRAIN again, exactly as you saved it. Two things do replace it: saving over that slot on the older version (it then holds what you saved there), and deleting it. Renaming it keeps the GRAIN sound.
    • A part left on GRAIN (the chord or the bass sound when you go back) starts on FM6 TINE EP or VA DEEP SUB there, as on a new unit.
    • Backups. A backup taken on 0.24-beta2 restores onto 0.24-beta1 and 0.23 with its GRAIN sounds kept as they are (they play as above there and as GRAIN again on 0.24-beta2). 0.22 and older refuse a group of ten sounds that holds a GRAIN sound, so restore such a backup on 0.23 or newer.
    • Going back to 0.23 is also the same as from 0.24-beta1 for Key Touch:
      • Vel + Poly AT. 0.23 reads it as Key Touch Fixed: its keys play at Options > Velocity, while Velocity Sens, Aftertouch Sens, the Velocity Curve and Numerals keep their values. Once 0.23 saves its settings (you hold SAVE or change an Option there), Key Touch is Fixed when you come back; until then it is still Vel + Poly AT. To keep the keys sensing on 0.23, set Key Touch to Vel + Aftertouch before going back.
      • The top seven keys follow the velocity you have been playing again, as in 0.23.
      • Geek Out 2's title line says 2 cores or 1 core again, with Key Touch on too.
    • Going back to 0.22 is the same, plus what 0.23's notes say (0.23.md, "Going back to 0.22").

    ChoralRoot 0.24-beta2 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.24-beta2.fwsc.

    choralroot-0.24-beta2-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. 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: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.24-beta1...v0.24-beta2

  16. v0.24-beta1ChoralRoot 0.24-beta1Beta8 files

    ChoralRoot 0.24-beta1 is a first beta of 0.24: with Key Touch on, the FM-1's top seven keys sense velocity too, Key Touch has a fourth value that sends the keys' pressure as polyphonic aftertouch, and Geek Out 2 shows the last key's velocity and the pressure while the keys sense. It is opt-in: the web installer offers it only when you tick Show beta releases under Other versions, and 0.23 stays its default. A beta may have bugs (please report them on GitHub), and the next stable release, 0.24, replaces it. Updating from 0.23 keeps your settings, sounds, loops and favorites; going back to 0.23 is possible at any time (the last section says what it means).

    Nothing is different after the update until you turn Key Touch on: with Options > Key Touch at Fixed (the default) every key plays at Options > Velocity, as in 0.23.

    Playing

    • The top seven keys sense velocity. With Key Touch on (Dynamic, Vel + Aftertouch or the new Vel + Poly AT), C#5 to G5 now play at the velocity you strike them with, as F3 to C5 do; until now they followed the velocity you had been playing. All 27 keys sense velocity now.
      • These seven are read another way (the method is Charles Vestal's, from his MONK-1 and CTL-1 firmwares), which tells a light touch from a firm press less finely than the other keys can: a touch plays softly, a light press in the middle, and a firm press at or near the top.
      • They have no aftertouch: leaning on one of them moves nothing. Options > Velocity Curve does not change them (it shapes F3 to C5); Velocity Sens works on all 27.
    • Key Touch: Vel + Poly AT. A fourth value of Options > Key Touch, after Vel + Aftertouch. The keys play and sound as with Vel + Aftertouch, and the pressure goes out over MIDI (MIDI Perform and MIDI Bass) as polyphonic aftertouch, to each note that sounds, on the channel it was played on, instead of as channel pressure. Every note gets the same value: a chord is one finger's. Saved automatically, as the other Options.
    • Geek Out 2 shows the keys' touch. While Key Touch is on, the view's title line reads the last key's velocity and the pressure now, such as VEL 73 AT 42, in place of 2 cores or 1 core (AT stays 0 with Dynamic, which senses no pressure). With Key Touch at Fixed it says 2 cores or 1 core, as before.
    • With Key Touch on, notes sound a few milliseconds later than in 0.23. While the top row is read, the other keys are read less often, so a key on F3 to C5 waits about 13 ms after it lands for its velocity instead of about 9; the top seven now wait a few milliseconds for theirs (they played at once before). With Key Touch at Fixed nothing waits, as before.

    Installing

    • A beta, opt-in. In the web installer tick Show beta releases under Other versions (the page remembers it in that browser), choose 0.24-beta1 and press Install. Without the tick the installer offers 0.23, the latest stable release, as before. On an FM-1 that runs the beta, "What is on my FM-1?" says so, and Install then writes 0.23 unless you choose the beta again. Options > Version reads ChoralRoot 0.24-beta1.
    • From 0.22 or older. The beta brings everything of 0.23 with it: 0.23.md says what changes (FM TONE sounds at the Digitone's own levels play about 6 dB quieter, as loud as the other engines) and, from 0.21 or older, 0.22.md "Installing" what the first start does.
    • A Single core package, for FM-1s that have trouble with Dual Core. The web installer offers it under Advanced > Hardware fallback, as for 0.23. Options > Version then reads ChoralRoot 0.24-beta1 1-core (shown as 0.24-beta1 1-core, the line being too short for the whole name).

    Going back to 0.23

    The installer offers 0.23 at any time: it is the default. Your sounds, loops and favorites stay, and so do your other settings. What 0.23 does not know:

    • Vel + Poly AT. 0.23 reads it as Key Touch Fixed: its keys play at Options > Velocity, while Velocity Sens, Aftertouch Sens, the Velocity Curve and Numerals keep their values. Once 0.23 saves its settings (you hold SAVE or change an Option there), Key Touch is Fixed when you come back; until then it is still Vel + Poly AT. To keep the keys sensing on 0.23, set Key Touch to Vel + Aftertouch before going back.
    • The top seven keys follow the velocity you have been playing again, as in 0.23.
    • Geek Out 2's title line says 2 cores or 1 core again, with Key Touch on too.
    • Going back to 0.22 is the same for Key Touch, plus what 0.23's notes say (0.23.md, "Going back to 0.22").

    ChoralRoot 0.24-beta1 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.24-beta1.fwsc.

    choralroot-0.24-beta1-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. 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: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.23...v0.24-beta1

  17. v0.23ChoralRoot 0.238 files

    ChoralRoot 0.23 puts FM TONE at the level of the other engines and takes the pops out of its voices, adds a Velocity Curve for the FM-1's own keys and Solfège to Key Mode's numerals, and fixes the device manager refusing to place sounds next to one saved on another build. Updating from 0.22 keeps your settings, sounds, loops and favorites; going back to 0.22 is possible at any time (the last section says what it means).

    One thing is different after the update without your doing anything: FM TONE sounds at the Digitone's own levels (INIT, every sound imported from a .dnsnd, and the sounds you made from them) play about 6 dB quieter, as loud as the other engines' sounds. The 16 factory FM TONE presets sound as they did.

    Sounds and engines

    • FM TONE at the other engines' level. Since 0.22 FM TONE has the Digitone's ranges, and a sound at the Digitone's own volume (Level 100 .. 127: INIT's 110, an imported Digitone sound's own) came out 4 to 9 dB louder than the VA, FM6, CZ-1 and P5. Measured as loudness (BS.1770) over every sound of every engine and the Digitone's 256 factory sounds imported: FM TONE's output is now 6 dB lower, before the part's Drive, and the factory presets' Level is raised to match (EP 72 -> 102, GLASS PAD 88 -> 124 and so on), so 13 of them are within 0.1 dB of where they were. BASS, SQUARE LEAD and WOBBLE reach the top of Level and are about 3.5 dB softer. A driven sound reaches the Drive as any other engine's does: an imported sound with Drive is a little less saturated than in 0.22.
    • FM TONE without pops. A note struck again while its voice still sounds (the same chord again, the notes two chords share when you change chords, an arpeggio over its own tails, a MONO line) restarted the voice's operators at phase 0 under its level, with Phase Reset on (the default): a pop, plainest on soft sounds such as INIT and HOLLOW. Now a voice that sounds keeps what you hear running and restarts only the operators that are silent, so the attack is the patch's own without the step. Two more, heard on imported sounds: a filter that an envelope or an LFO switches in or out within a note (the multimode opening past its top and closing again, BASE reaching 0, BASE + WIDTH reaching the top) clicked as it switched, and MIX moved by an LFO stepped every 0.7 ms; both are smooth now. A sound whose filters never switch and whose MIX does not move plays exactly as before.

    Playing

    • Velocity Curve. A new Options entry after Velocity Sens: -3 .. +3, 0 the default. Higher, you play harder to reach the loudest notes; lower, softer playing reaches them. It moves the velocity the keys send, MIDI included, where Velocity Sens shapes the level after it. Saved automatically.
    • Solfège numerals. Numerals, on the KEY layer's second page (KNOB 4), has a third value: Solfège shows the chord's degree as a movable-do syllable in the numeral's place, Do on the tonic: SOL for G in C major, la for Am, ti° for Bdim, #FA between two degrees (the case and the marks are the numeral's). Hold SAVE to keep it. Nothing you hear changes.

    Fixes

    • The device manager could not place a sound in some groups of ten. After a build that saved a sound of an engine this one keeps no patch for (a GRAIN sound from a test build), the FM-1 refused every change to that sound's group of ten slots ("The FM-1 refused the user sounds 031-040 (rc 2)"), whatever was placed there. Such a sound is now kept as it is, and the group takes changes again.

    Installing

    • From 0.22. 0.23 is what the web installer installs by default: press Install. Your settings, sounds, loops and favorites stay. Options > Version reads ChoralRoot 0.23.
    • From 0.21 or older. As 0.22's notes say (0.22.md, "Installing"): your 32 sounds are copied into U001 to U032 at the first start and FM TONE sounds are converted as they load.
    • A Single core package, for FM-1s that have trouble with Dual Core. The web installer offers it under Advanced > Hardware fallback, as for 0.22; Options > Version then reads ChoralRoot 0.23 1-core.

    Going back to 0.22

    0.22 is in the web installer's list (Other versions). Your sounds, loops and favorites stay. What 0.22 does not know:

    • FM TONE is 6 dB louder again there: INIT, imported sounds and your own FM TONE sounds play as they did in 0.22, and the pops come back. A sound you saved in 0.23 from one of the factory FM TONE presets carries the preset's new Level and plays about 6 dB louder on 0.22.
    • A Velocity Curve other than 0, saved, is not read by 0.22, and with it 0.22 resets the Options that share its stored byte to their defaults: Output (Clean), USB Rate (44.1 kHz), Chord Names (Orchid) and 6th with 7th (In place). Set the Curve to 0 before going back to keep them.
    • Numerals on Solfège, saved: 0.22 shows no numeral and reads the scale as Major until you set them again.
    • A sound of another build's engine (above) blocks its group of ten in the device manager on 0.22 again.

    ChoralRoot 0.23 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.23.fwsc.

    choralroot-0.23-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. 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: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.22...v0.23

  18. v0.22ChoralRoot 0.228 files

    ChoralRoot 0.22 is a big release: a sixth engine, P5 (Melodee's Prophet-5 model), 128 sound slots shared by all engines, favorites, FM TONE in the Digitone's own ranges and times with Digitone sounds to import, velocity and aftertouch from the FM-1's own keys, knobs that accelerate, Snap and numerals in Key Mode, a Filter on the whole sound, a step preview in the loop editor, and Dual Core on by default with a fallback after a crash. These notes cover everything new since 0.20, so 0.21's two chorus changes (Depth no longer pops, the Width knob) are here too. Updating from 0.20, from 0.21 or from any 0.22 beta keeps your settings, sounds and loops; going back to 0.21 or 0.20 is possible at any time (the last two sections say what it means).

    Three things are different after the update without your doing anything: FM TONE sounds from before 0.22 are converted to the new ranges and play on the Digitone's times, mostly longer (Sounds and engines says what that means); the knobs accelerate, and SHIFT in the sound editor snaps to round values instead of giving fine steps (a slow turn gives them now); and the delay's repeats lose what is above 11 kHz, less than its Tone takes at its default. Everything else new is off until you turn it on, or is new in itself.

    Sounds and engines

    • A new engine: P5, the Prophet-5 model of Melodee (Kerem Kilic's FM-1 firmware): two oscillators with sync and Poly-Mod, the four-pole filter in its Rev 1/2 and Rev 3 characters, two envelopes and the wheel's modulation. It comes with 115 of the 200 factory programs Sequential made for the Prophet-5 (picked by ear), after 00 INIT. Choose it as any engine: hold OPT (printed GLO) and turn PRESETS for the chord part or ALGORITHM for the bass.
      • Its sound editor is rows of the Prophet-5's controls. P5's screens are rows of up to four controls, as on every engine: the row on the knobs is in colour, the others grey; SELECT moves from row to row and on to the next screen of the group; KNOB 1 to 4 turn the row's places from left to right, and a place with nothing in it does nothing. Each control is drawn as the Prophet-5's own: a knob with the eleven marks of its printed scale, a button with its LED and the wave it switches, the filter's REV with two LEDs, a lever for the filter's keyboard tracking. EDIT shows eleven screens, then EXPR as on every engine: OSC A with the mixer, and OSC B (OSC); the filter under its curve, the filter envelope under its curve, then the envelope's velocity, the keyboard tracking and the filter's aftertouch (FILT); the amplifier envelope under its curve, then its velocity and the release switch (ENV); the LFO with its three wave buttons on one row, and the wheel's modulation (LFO); Poly-Mod, and the voice with UNISON, voices, detune, glide, priority and Vintage (MOD). Only P5's controls look like this.
      • UNISON. A program whose UNISON switch is on loads in UNISON: one note on up to four stacked voices (a chord plays its lowest or its last note, as the program's key priority says). The next program without it plays chords again.
      • Voices. With Dual Core on (the new default: Dual Core and the screen) the chord part plays up to eight P5 voices, shared between the chip's two cores. A P5 bass gets up to four (a UNISON stack), but the chord comes first, and the bass always keeps one voice. With one core P5 plays four voices, three while a P5 bass sounds, and a P5 bass plays one. When you hold more keys than there are voices, the oldest held note that is not the lowest fades out quickly to make room.
      • Level. P5 plays a little quieter than the other engines (a four-note chord about 4 dB under FM6 and 6 dB under the VA), so that UNISON programs and big chords stay clear of the output's limiter.
    • FM TONE in the Digitone's ranges. FM TONE's values now read like the Digitone's, so a sound can be compared and copied number for number: FREQ (the cutoff, now the Digitone's number instead of Hz), RESO, BASE and DTUNE from 0.00 to 127.00 with two decimals, HARM from -26.00 to +26.00, the filter envelope's DEPTH and each LFO's SPEED and DEPTH from -64.00 to +63.99, FDBK from 0 to 127, LEVEL a whole number from 0 to 127, and AMP DEC and AMP REL whole numbers from 0 to 126, then INF. AMP DEC at INF holds the level the attack reached, as the Digitone's DEC 127 does (AMP REL's INF is as before). VEL, the operators' KEY and the filter's SUS and KTRK read 0 to 127 instead of a percentage.
    • FM TONE sounds from before 0.22 are converted when they load (your saved sounds, the factory sounds, the last session, backups and sound files): each value is carried over into its new range. The conversion is close, not exact, so a sound may come out a little different; an AMP DEC that was at its top (127) is INF now, so the sound holds its level instead of falling slowly to SUS. The times keep their numbers, which now mean the Digitone's times (below). The next save keeps the sound in the new form.
    • FM TONE's LFOs reach all 57 of the Digitone's destinations, listed in the Digitone's order on the DEST cell. New are LFO 1's own SPEED, MULT, FADE, WAVE, start phase, MODE and DEPTH (from LFO 2 and 3), RATIO ALL, A and B together (LEV, ATK, DEC, END, DLY), DRIVE, the reverb, delay and chorus sends, and the filter envelope's DELAY.
    • FM TONE's times are the Digitone's. Every envelope (the amp's, the filter's, operators A and B), the DELAYs and the LFOs' FADE now take as long as on a Digitone at the same value, measured on a real Digitone, so a sound copied number for number also has the Digitone's timing. The time cells show numbers from 0 to 127, as the Digitone does, instead of milliseconds and seconds. The operators' attack rises the Digitone's way (slowly, then fast at the end); the DELAYs (A, B and the filter's) count 32nds of a beat at the part's tempo (16 is half a beat); a FADE of -16 takes 0.05 s, -32 about 0.8 s, -48 about 12 s. INIT is now the Digitone's init sound, so a sound started from INIT begins where one on the Digitone does. The factory FM TONE sounds were set again on the new times, so they keep their timing.
      • FM TONE sounds you saved before keep their numbers, so their envelopes now run on the Digitone's times: most times are longer than before, many much longer (an AMP DEC of 96 fell away in about 1.6 s and now takes about 15 s), the amp's attack changes least. Set the times again by ear where a sound needs it.
    • VA: a finer filter envelope and more sync rates. The filter envelope's depth (FENV) has two decimals, -64.00 to +63.99, so a small amount such as 0.04 is possible. A synced LFO's RATE is a list of 42 rates: 8, 4, 3, 2 and 1 bars and 1/2 to 1/256, each dotted, straight and triplet, then 4, 3 and 2 ms. It moves one rate a detent; with OPT held it steps the straight ones. VA sounds from before 0.22 are converted exactly and sound as they did.
    • VA: finer modulation amounts. In the VA's modulation matrix (the MOD screen of the sound editor: eight rows of Source · Dest · Amount) the Amount now reads as its own number, -64.00 to +63.00, instead of a percentage: a slot that read +50% reads +32.00, the same amount. Below 6 either way it moves in tenths: a slow turn from 0 goes +0.10, +0.20 .. +5.90, then 6.00, 7.00 and on in whole steps as before; a quick turn still jumps (from 0 to 6, from 6 to 12), and SHIFT snaps to whole numbers. So a gentle vibrato can be set: LFO to PITCH at +0.50 is about 9 cents with the LFO at full depth, where the smallest step before, +1% (the amount 1), was about 19. Holding ENV or LFO and turning a knob sets an amount the same way, and the cell shows it as LFO1 +0.3. Every VA sound plays exactly as before. Asked for in GitHub issue 13.

    The effects

    • A Filter on the whole sound. The FX layer has an eighth page, Filter (hold FX, turn SELECT past Drive): a low cut and a high cut on everything the FM-1 plays, chords, bass and the effects' tails together, after the effects and just before the output. A way to soften a bright patch, to take the low end out of the chords so the bass has the room, or to leave a band open for a voice.
      • Low cut (KNOB 1): Off at the bottom, then 20 Hz up to 2 kHz; what is below the corner goes. High cut (KNOB 2): 200 Hz up to 16 kHz, then Off at the top; what is above the corner goes. Both in at once is a band-pass. Slope (KNOB 3): 6 dB or 12 dB an octave; 12 dB (where it starts) is the firmer cut, 6 dB is gentler, a tone control.
      • Filter (KNOB 4): Off or On. Turning Low cut or High cut switches it on by itself (and FX on, if FX was off), so you hear the knob at once; KNOB 4 takes it out and puts it back with the cutoffs as you left them, to compare. With FX off the filter is off with the effects, and the cell reads Off.
      • It is not part of any sound: like the effects it is set once for the instrument, every sound plays through it, and SAVE held keeps it. A new FM-1, and one updated to 0.22, has it Off with both cuts at their Off ends, and with it Off nothing in the sound changes. Turning a cutoff while a chord plays is smooth, and switching the filter or the slope fades over a hundredth of a second: no click. If every sound is dull or thin whatever you load, look here first. Asked for in GitHub issue 16.
    • Chorus Width, on KNOB 3 of the Chorus page (0.21; hold FX, SELECT to Chorus). The chorus has been stereo since 0.19; Width sets how far it spreads: 127, where it starts, is the full spread of 0.19 and 0.20, 0 is one chorus in the middle, the same in both ears. It turns as smoothly as Depth (below, under Fixes) and is kept with the other effect settings when you hold SAVE.
    • The delay at half rate. The delay now runs at 22.05 kHz, as the reverb always has: its repeats lose what is above 11 kHz, which is less than Tone takes at its default (judged on the unit by ear). It gives back 65 KB of the chip's buffer memory for what comes next. The longest time is still 0.74 s.

    Playing and editing

    • Chord numerals in Key Mode. A new setting, Numerals, on the KEY layer's second page (hold KEY, turn SELECT, KNOB 4). It is off until you turn it on. With Key Mode on, the Chord view then shows the Roman numeral of the chord you are playing, in blue above the chord's name: in C major I for C, V for G, vi for Am. Capitals are chords with a major third, small letters chords with a minor third. The numeral is the degree you played: Transpose is left out, so the tonic chord reads I at any Transpose, while the name shows the chord you hear. Hold SAVE to keep the setting. Nothing you hear changes.
    • Snap: a key outside the scale plays a right note. A new setting, Snap, on the KEY layer's second page (hold KEY, turn SELECT, KNOB 3): Off, Scale or Chord. With Key plays Notes, a key outside the scale used to be a dead key: no sound, no MIDI. With Scale it plays the nearest note of the scale instead, going down between two (in C major C# plays C, D# plays D), the way the Scaler app remaps its keyboard. With Chord it plays the nearest tone of the chord that is sounding right now, yours or a playing loop's (over C major D# plays E and A# plays C), so a melody over a chord or a loop can hardly miss; when no chord sounds it does what Scale does. A key inside the scale always plays itself, and the snapped key behaves exactly as if you had pressed the key it was moved to: the chord keys, the bass, the performance modes, the looper and MIDI out all see that note. With Snap on, the keys outside the scale glow faintly instead of staying dark, and the note that sounds is lit on its own keys. With Key plays Chords those keys keep their sus chord on a neighbouring scale note, and Snap's cell is drawn grey. Hold SAVE to keep the setting. Asked for in GitHub issue 18.
    • The Full keyboard plays the key's chords. With Keyboard Full and Key Mode on, Key plays now decides what the 27 keys do, as on the Chords keyboard: with Chords every key plays the chord that belongs on its note of the scale (in C major D gives Dm, G gives G) and a key outside the scale its sus chord on a neighbouring scale note, with the voicing you set on the Chords keyboard; with Notes the keys are single notes, with the notes outside the scale silent or snapped. Until 0.22 the Full keyboard played single notes whatever Key plays said. KNOB 1 on the view is still the octave there.
    • Velocity and aftertouch from the keys. The FM-1's keys can sense how hard you play and how hard you lean on a held key, with no change to the hardware (the carbon contact under each key is read as a resistance; the idea and the method are Charles Vestal's, from his Velo and MONK-1 firmwares). Off until you turn it on: Options > Key Touch is Fixed (every key at Options > Velocity, as before), Dynamic (each chord at the velocity it was struck with) or Velocity + Aftertouch (and pressing harder on a held key moves the sound). Velocity Sens and Aftertouch Sens (Low / Mid / High) set how much. The keys that sense are F3 to C5; the top seven (C#5 to G5) follow the velocity you have been playing. A struck chord sounds a few milliseconds later than with Fixed, because the key is measured after it lands. With Key Touch on, every engine's level follows the velocity (FM6 and CZ-1 included), and with aftertouch the held pressure opens the filter; MIDI notes and aftertouch from USB do the same, and the keys' velocity and pressure go out over MIDI.
    • Expression, per sound. In the editor, the MOD group's last screen is EXPR: velocity (VEL) and aftertouch (AT) each to a destination (level, cutoff, shape, pitch, pan, the sends, the LFO's rate or vibrato, the engine's own parameters) by an amount from -64 to +63, saved with the sound. A sound that routes nothing uses the defaults (velocity to level, aftertouch to cutoff); turn the Dest or Amount cell to take them over, Dest OFF switches a default off.
    • The knobs accelerate. A value knob turned slowly moves its finest step (1, or 0.01 on a value with decimals); turned quickly it moves up to a twentieth of the range a detent, so a quick turn of about one revolution crosses the whole range. The first two detents of a turn (after a second's rest, or a change of direction) always move the finest step, however quickly they come, so a nudge is always one; a spin speeds up from the third. Detents that arrive together, while the screen is busy redrawing, count the time they really took, so a slow turn stays slow. That is every value in the sound editor of every engine and most value knobs outside it (the effects, the BASS layer's level, Options > Velocity). Lists (presets, algorithms, named choices, the VA's sync rates) still move one item a detent, and so do the tempo, the PLAY menu's Level and the click level.
    • Hold OPT to snap. While you hold OPT (printed GLO), a value knob jumps to round values: 0, 16, 32 .. 127 on a 0 to 127 value, steps of 8 on -64 to 63, whole numbers on a value with decimals, 8, 16, 32 and 64 on an LFO speed, octaves on a value in semitones. In the sound editor GLO is SHIFT: hold it, or tap it to keep snapping until you tap it again (snap shows in the title line). Until 0.21 SHIFT gave fine steps in the editor; a slow turn does that now. OPT's other jobs (with PRESETS, ALGORITHM, KNOB 1 and SELECT) are unchanged.
    • The loop editor previews a step. In the loop editor, while the loop is stopped, turning PRESETS onto a step plays it once, as the loop would play it: its notes on both sides (the chords and the bass), for their length, with the step's voicing and its ratchet, so you can hear your way along the pattern. A step's condition and chance are not asked: a preview always sounds. GLO held + PRESETS (8 steps a click) previews the same way; opening the editor plays nothing until you turn. An empty step is silence, and the next click ends what is sounding; so does a key you play (what you play goes into the step as before), REC clearing the step, LOOP starting the loop, or closing the editor. The keys' lights and the Chord view show the step's notes and chord as they do for a chord the loop plays. While the loop plays you hear the loop, not the step. Nothing is recorded by it: no note goes in, REC is not armed, the loop's position does not move. Asked for in GitHub issue 8.
    • Bigger rows under a curve. A screen with a curve over one row of controls draws that row at full size: P5's filter and envelope screens, CZ-1's envelope END screens (SUS and END) and WHEEL's ENV screen.

    Dual Core and the screen

    • Dual Core is on by default. A new FM-1, and one whose settings you reset (Options > Reset Settings), now uses the chip's second core: the bass plays there with its own voices, and P5's chords get their eight voices. Updating does not change your setting: if your FM-1 had Dual Core Off, it still has. To turn it on, set Options > Dual Core to On and switch the FM-1 off and on. Should the second core keep the FM-1 from starting, the next start comes up on one core with Dual Core reading On · restart, so that you can switch it Off there.
      • After a crash beside the second core, Dual Core turns itself off. If the FM-1 crashes, hangs or gives the second core up while Dual Core is On, the screen says dual core off: crash after the restart (or hang, gave up), the line under Options > Dual Core gives the reason (off after a crash on 2 cores), Geek Out says c1 off · after a crash, and the FM-1 stays on one core over power cycles until you set Dual Core On again (a Reset Settings straight after keeps it Off too). Until 0.21 such a crash restarted the FM-1 with Dual Core still On, so it could crash again and again. If your FM-1 ever crashes or restarts while playing and Dual Core is still On, set it to Off and switch off and on.
      • With Dual Core On, the chip's regulator (VDC14) goes to 1.50 V before the second core starts (it was 1.45 V; the core voltage stays at 1.35 V). Some FM-1s crash with both cores running (issue #9 here; fm1-x0x #10 and #21, where fc79 and zednaked measured it), and every report agrees this voltage is what matters: at 1.50 V the affected units ran clean where 1.45 V still crashed. fm1-x0x ships 1.50 V since 1.0.7, the chip's data sheet allows 1.55 V and the stock M-VAVE firmware runs 1.60 V. With Dual Core Off nothing changes.
      • If your FM-1 turns Dual Core off by itself, please tell us (with fm1_install.py --debug): it means this unit does not run both cores at 1.50 V either, and that is worth knowing. --debug now also prints the last crash (what the crash screen showed for four seconds: the vector, the program counter, the return address, the debug unit's word and the uptime; kept until the FM-1 is switched off) and why the last restart happened.
    • Geek Out 2: the cores' load and the memory as meters. A sixth view, after Scope in the HOME cycle and in the view menu (hold HOME: the white keys D4 to B4 choose the view, Lock moves to C5; Options > View): four tall meters. CORE 0 (blue) is the audio engine's share of the first core over the last second, CORE 1 (orange) the second core's share when Dual Core is On (off, failed or gave up otherwise), RAM (white) and POOL (green) how much of the chip's two memory regions this firmware takes. The bars glide to each second's figure; a tick above a bar marks the second's peak. The title line says 2 cores or 1 core.
    • The screen is faster. Its bus runs at 20 MHz instead of 12, so a full redraw takes 46 ms instead of 77; nothing looks different (judged on the unit by eye).

    Saving and favorites

    • 128 user sound slots, shared by all engines. Save up to 128 of your own sounds, of any engine, in any mix (until now 32). The slots are numbered U001 to U128. Your 32 sounds from 0.21 or 0.20 are copied into U001 to U032 the first time the FM-1 starts with 0.22, each with its own patch. The device manager and the installer page's Sounds section work with the 128 slots, and with an older FM-1's 32 as before.
    • P5 sounds can be saved. SAVE on a P5 sound offers Overwrite and Save as new like every engine: the whole program is kept with the sound, edited or not, and loading it brings back exactly what you saved, with its UNISON. The device manager exports and imports P5 sounds as sound files.
    • Naming a sound has a cursor. When you Save as new, SELECT moves a cursor along the name (turned right on the last letter it adds one), KNOB 1 changes the letter under it and KNOB 4 to the left deletes it, so a name can be written with the knobs alone. The keys still type, just after the cursor. The other knobs do nothing while you name a sound: PRESETS and ALGORITHM no longer change the sound under the name, and KNOB 2 no longer changes the last letter (that is KNOB 1 at the cursor).
    • Favorites, with a filter. Mark the sounds you like, then step through just those. Tap SAVE: in the save menu KNOB 4 marks the sound (right) or takes the mark off (left); nothing is saved or overwritten. Or mark while you browse: in the sound editor turn PRESETS and use KNOB 4 on the sound you are hearing. A marked sound shows a small yellow star before its name when you turn PRESETS or ALGORITHM. Factory presets, P5's programs and your own sounds can be marked (00 INIT cannot).
      • The filter. In the save menu KNOB 2 turns the favorites filter on or off. While it is on, PRESETS and ALGORITHM step through the favorites of the engine you are on and nothing else; a yellow line under the meter (favorites 03/07) shows that it is on. An engine without a favorite steps through all its sounds and says no favorites: all.
      • Chord or bass. KNOB 3 gives a sound a type: Both, Chord or Bass. With the filter on, Chord sounds are offered to the chord part only and Bass sounds to the bass part only. The type stays with the sound when you take its mark off and put it back.
      • The save menu now works like the Options: SELECT picks one of five entries (Overwrite, Save as new, Favorite, Favorites filter, Favorite type) and KNOB 1 changes the selected entry's value. KNOB 1 no longer moves between Overwrite and Save as new: use SELECT.
      • The marks, the types and the filter are kept by themselves and are part of a backup. With the command-line tool, --favorites prints them as text and --restore-favorites writes such a text back.
    • Back up before you try another firmware. Some other FM-1 firmwares (Melodee, a remix of ChoralRoot) use the part of the flash where 0.22 keeps your favorites and your sounds. A full backup from the installer page or the device manager keeps everything; restore it when you come back.

    On the computer

    • Digitone sounds into FM TONE. The device manager takes sound files exported from an Elektron Digitone (.dnsnd, several at once) and turns each into an FM TONE sound that you place in a slot like any other; the installer page's Sounds section imports them one at a time. The files are read on your computer: nothing is uploaded. The algorithm, the ratios, the operators' envelopes and levels, the filter and its type, the amp envelope, the LFOs and their destinations, DRIVE, the decimals and, where it can, the sound's octave are carried over; what does not translate, or only roughly, is listed beside each sound before you place it. An imported sound is close to the Digitone's, not the same: the file format was worked out from exported files, and the levels are approximations. The times are taken as they are, now that FM TONE's are the Digitone's.
    • Replace the factory sounds in one go. In the device manager, Replace factory puts the sounds you selected in the library (Digitone imports or any other sounds of one engine) in the places of that engine's factory presets, in order: PRESETS then steps through your sounds where the factory ones were. Each takes a user slot; more sounds than factory presets are added after them while free slots last. Restore factory order brings the factory presets back and keeps your sounds as added ones. The factory sounds stay in the firmware either way.
    • Factory presets back, or a clean start. In the device manager, Restore brings back the factory presets you select, all of one engine's or all of every engine's, and deletes your sounds that took their places; Delete all user sounds and Reset sounds to factory empty all 128 slots in one go and take the favorite marks off your own sounds (marks on factory presets stay). Each asks first, offers a backup on the spot, and Undo puts everything back while the page is open.
    • P5 in the device manager. P5 has its own tab: its programs in the order the FM-1 shows them, then your P5 sounds, which you can place over a program, restore, delete or keep as files like any engine's (P5's factory programs themselves cannot be saved as files), and every tab shows your favorite stars as the FM-1 does.
    • Several FM-1s on one computer: the unit ID. Each FM-1 now has an ID of its own, 8 characters such as A1B2C3D4, read from its flash chip, so it stays the same through every install and reset. Options > Version shows it on the line under the version (unit ID A1B2C3D4). "What is on my FM-1?" shows it too and lists each FM-1 when several answer; Install, Back up, Restore and the Sounds then refuse, writing nothing, until only one is connected. The device manager asks which FM-1 to open and shows its ID. With the command-line tool, --info lists every FM-1 with its ID, and --unit ID makes any command use that FM-1 alone, through an install's restarts too.

    Fixes

    • The chorus no longer pops or crackles while you turn Depth (0.21). Until 0.20 every step of the Depth knob made a small click under a held sound. Now the chorus slides to the new setting in about a twentieth of a second. With the knobs left alone the chorus sounds exactly as it did in 0.20.
    • Fewer pauses when the FM-1 writes to flash. A flash write used to stop the sound for about 18 ms. The FM-1 now clears the space ahead of time, at power-on or after ten seconds of quiet, for your favorites, for what SAVE held keeps (the sounds and the state you come back to) and for the 128 slots, so those writes no longer pause the sound (a second favorite change soon after waits for a quiet moment; a second save soon after pauses as before). Changing an Option still pauses once, after you stop playing, as in 0.21, and so does saving a loop. Taking a backup, or reading the favorites from a computer, no longer writes anything to the FM-1.
    • LATCH turns a performance mode's Hold off. Strum's Hold (KNOB 4 in the PERF layer) and the arpeggiator's light LATCH (printed LFO), since they hold the sound the way LATCH does. A tap on the lit LATCH now turns that Hold off and the notes stop; the next tap latches as usual. Until 0.22 LATCH could not release them.

    Installing

    • From 0.21 or 0.20. 0.22 is what the web installer installs by default: press Install. Your settings, sounds and loops stay; your 32 sounds are copied into U001 to U032 at the first start (the older version's slots are left as they are, for going back), FM TONE sounds are converted as they load (above), the Filter starts Off and your Dual Core setting is kept. Options > Version reads ChoralRoot 0.22.
    • From a 0.22 beta. Install 0.22 over it as over any version: your settings, sounds, loops and favorites stay as they are. 0.22 is 0.22-beta4 with one change more, the VA's finer modulation amounts. The four betas stay in the installer's list, behind Show beta releases, with their own notes; going back to one of them loses what it does not know: on every beta a VA sound saved with an Amount in tenths plays INIT (your other sounds load as before); beta3 and older do not know the Filter, beta2 and beta1 not Snap either, as 0.22-beta4.md says under "Going back to an earlier beta".
    • A Single core package, for FM-1s that have trouble with Dual Core. The web installer offers it under Advanced > Hardware fallback: the same firmware, built so that the second core is never started. Choose it if your FM-1 crashes or freezes with the standard package. Options > Dual Core then reads 1 core build, and Options > Version ChoralRoot 0.22 1-core. Your settings, sounds, loops and favorites stay when you switch between the two.

    Going back to 0.21

    The installer offers 0.21 under Other versions at any time. 0.21 has none of what is new in 0.22 (it does have the chorus's Width and its smooth Depth: they came with it), and:

    • Your sounds. 0.21 shows its 32 slots as they were when you updated: 0.22 never writes them. Sounds saved under 0.22, in any slot, are not there; they are still in the 128 slots when you come back. Sounds you save under 0.21 are not copied by themselves when you return: the device manager's Import the 0.21 slots copies 0.21's 32 slots into U001 to U032 again, over what is there (U033 to U128 stay).
    • A sound saved under 0.22, taken to 0.21 (export it with the device manager, then place it on 0.21): P5 sounds cannot go, 0.21 has no P5. The device manager converts FM TONE and VA sounds to what 0.21 reads and says what changed: values with decimals are rounded (a VA modulation Amount in tenths too: 0.21 has whole amounts, so +0.30 becomes 0 and +2.60 becomes 3), an FM TONE LFO aimed at one of the destinations new in 0.22 is switched off, an AMP DEC at INF becomes 0.21's longest decay, and a VA LFO synced to a rate 0.21 does not have takes the nearest one it has. An FM TONE sound's times keep their numbers, which 0.21 plays on its own times: most of them come out much shorter there.
    • The sound you left playing. A part left on a P5 sound starts on 0.21's default sound. 0.21 does not read FM TONE and VA sounds in their 0.22 form either: a part left on one may start on another sound, or on INIT.
    • Favorites. 0.21 has none: it ignores the marks, the types and the filter, and leaves them alone, so they are still there when you come back.
    • Numerals, Snap and Key Touch. 0.21 has none of them (its keys play at Options > Velocity, as before; its Full keyboard plays single notes). With Snap Scale or Chord it reads Key Mode as off, with Key plays and Keyboard at Chords, until you set them again there; otherwise nothing is lost or reset. It does not keep them: once 0.21 saves its settings (you hold SAVE or change an Option there), Numerals and Snap are off and Key Touch is Fixed, with Velocity Sens and Aftertouch Sens at Mid, when you come back.
    • The Filter. 0.21 has none: it plays without it. If you had changed the Filter page (turning a cutoff is enough) before you last held SAVE, 0.21 also starts with the effects' settings (the reverb's, the chorus's, the delay's) and the chord part's sends at their defaults, until you set them again there; nothing else is lost. Once 0.21 holds SAVE, the Filter is Off when you come back.
    • Dual Core and the single-core package. 0.21 keeps the Dual Core setting as it is (On on an FM-1 that was new or reset under 0.22; Off if 0.22 turned it off after a crash) and has no single-core package: on an FM-1 that needs one core, set Options > Dual Core to Off on 0.21 straight after installing it. With Dual Core On, 0.21 sets the regulator to 1.45 V again, and it does not turn Dual Core off by itself after a crash.
    • The unit ID. 0.21 has none: the pages and fm1_install.py --info list an FM-1 on 0.21 without one, and --unit cannot choose it.
    • Geek Out 2. 0.21 has five views: with Geek Out 2 as the saved view (Options > View), it starts on the Chord view.
    • The knobs move in fixed steps again, and SHIFT in the sound editor gives fine steps again.
    • Backups. A backup made with 0.22 holds the 128 slots and the favorites; restored on 0.21 it brings back the settings, the FM6 and CZ-1 banks and the loops, but not the sounds or the favorites. A backup made with 0.21 restores on 0.22 into U001 to U032.

    Going back to 0.20

    Everything above about 0.21 is true of 0.20 too, and 0.20 also has no chorus Width: its chorus is always the full spread, its Depth clicks again while you turn it, and it ignores the Width that 0.21 and 0.22 store (nothing else is lost or reset). If you hold SAVE while on 0.20, the stored Width is dropped, and 0.22 starts at 127 again when you come back.


    ChoralRoot 0.22 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.22.fwsc.

    choralroot-0.22-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. 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: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.21...v0.22

  19. v0.22-beta4ChoralRoot 0.22-beta4Beta8 files

    ChoralRoot 0.22-beta4 is the fourth beta of 0.22: a sixth engine, P5, 128 sound slots shared by all engines, favorites, FM TONE in the Digitone's own ranges and times with Digitone sounds to import, knobs that accelerate, velocity and aftertouch from the FM-1's own keys, Snap in Key Mode, and, since 0.22-beta3, a Filter on the whole sound and a step preview in the loop editor. Like the betas before it, it is opt-in: the web installer offers it only when you tick Show beta releases under Other versions, and 0.21 stays its default. A beta may have bugs (please report them on GitHub), and the next stable release, 0.22, replaces it. What is new since 0.22-beta3 comes first; after it are the whole of 0.22's notes, so this page is all you need. Updating from 0.22-beta3, 0.22-beta2 or 0.22-beta1 keeps everything; going back to one of them loses only what it does not know: the Filter, and with it in use the effects' settings, and on 0.22-beta2 and beta1 Snap (the Installing section says what that means). Updating from 0.21 keeps your settings, sounds and loops; going back to 0.21 is possible at any time (the last section says what it means).

    New since 0.22-beta3

    • A Filter on the whole sound. The FX layer has an eighth page, Filter (hold FX, turn SELECT past Drive): a low cut and a high cut on everything the FM-1 plays, chords, bass and the effects' tails together, after the effects and just before the output. A way to soften a bright patch, to take the low end out of the chords so the bass has the room, or to leave a band open for a voice.
      • Low cut (KNOB 1): Off at the bottom, then 20 Hz up to 2 kHz; what is below the corner goes. High cut (KNOB 2): 200 Hz up to 16 kHz, then Off at the top; what is above the corner goes. Both in at once is a band-pass. Slope (KNOB 3): 6 dB or 12 dB an octave; 12 dB (where it starts) is the firmer cut, 6 dB is gentler, a tone control.
      • Filter (KNOB 4): Off or On. Turning Low cut or High cut switches it on by itself (and FX on, if FX was off), so you hear the knob at once; KNOB 4 takes it out and puts it back with the cutoffs as you left them, to compare. With FX off the filter is off with the effects, and the cell reads Off.
      • It is not part of any sound: like the effects it is set once for the instrument, every sound plays through it, and SAVE held keeps it. A new FM-1, and one updated to this beta, has it Off with both cuts at their Off ends, and with it Off nothing in the sound changes. Turning a cutoff while a chord plays is smooth, and switching the filter or the slope fades over a hundredth of a second: no click. If every sound is dull or thin whatever you load, look here first. Asked for in GitHub issue 16.
    • The loop editor previews a step. In the loop editor, while the loop is stopped, turning PRESETS onto a step plays it once, as the loop would play it: its notes on both sides (the chords and the bass), for their length, with the step's voicing and its ratchet, so you can hear your way along the pattern. A step's condition and chance are not asked: a preview always sounds. GLO held + PRESETS (8 steps a click) previews the same way; opening the editor plays nothing until you turn. An empty step is silence, and the next click ends what is sounding; so does a key you play (what you play goes into the step as before), REC clearing the step, LOOP starting the loop, or closing the editor. The keys' lights and the Chord view show the step's notes and chord as they do for a chord the loop plays. While the loop plays you hear the loop, not the step. Nothing is recorded by it: no note goes in, REC is not armed, the loop's position does not move. Asked for in GitHub issue 8.

    Sounds and engines

    • A new engine: P5, the Prophet-5 model of Melodee (Kerem Kilic's FM-1 firmware): two oscillators with sync and Poly-Mod, the four-pole filter in its Rev 1/2 and Rev 3 characters, two envelopes and the wheel's modulation. It comes with 115 of the 200 factory programs Sequential made for the Prophet-5 (picked by ear), after 00 INIT. Choose it as any engine: hold OPT (printed GLO) and turn PRESETS for the chord part or ALGORITHM for the bass.
      • Its sound editor is rows of the Prophet-5's controls. P5's screens are rows of up to four controls, as on every engine: the row on the knobs is in colour, the others grey; SELECT moves from row to row and on to the next screen of the group; KNOB 1 to 4 turn the row's places from left to right, and a place with nothing in it does nothing. Each control is drawn as the Prophet-5's own: a knob with the eleven marks of its printed scale, a button with its LED and the wave it switches, the filter's REV with two LEDs, a lever for the filter's keyboard tracking. EDIT shows eleven screens, then EXPR as on every engine: OSC A with the mixer, and OSC B (OSC); the filter under its curve, the filter envelope under its curve, then the envelope's velocity, the keyboard tracking and the filter's aftertouch (FILT); the amplifier envelope under its curve, then its velocity and the release switch (ENV); the LFO with its three wave buttons on one row, and the wheel's modulation (LFO); Poly-Mod, and the voice with UNISON, voices, detune, glide, priority and Vintage (MOD). Only P5's controls look like this.
      • UNISON. A program whose UNISON switch is on loads in UNISON: one note on up to four stacked voices (a chord plays its lowest or its last note, as the program's key priority says). The next program without it plays chords again.
      • Voices. With Dual Core on (the new default, below) the chord part plays up to eight P5 voices, shared between the chip's two cores. A P5 bass gets up to four (a UNISON stack), but the chord comes first, and the bass always keeps one voice. With one core P5 plays four voices, three while a P5 bass sounds, and a P5 bass plays one. When you hold more keys than there are voices, the oldest held note that is not the lowest fades out quickly to make room.
      • Level. P5 plays a little quieter than the other engines (a four-note chord about 4 dB under FM6 and 6 dB under the VA), so that UNISON programs and big chords stay clear of the output's limiter.
    • FM TONE in the Digitone's ranges. FM TONE's values now read like the Digitone's, so a sound can be compared and copied number for number: FREQ (the cutoff, now the Digitone's number instead of Hz), RESO, BASE and DTUNE from 0.00 to 127.00 with two decimals, HARM from -26.00 to +26.00, the filter envelope's DEPTH and each LFO's SPEED and DEPTH from -64.00 to +63.99, FDBK from 0 to 127, LEVEL a whole number from 0 to 127, and AMP DEC and AMP REL whole numbers from 0 to 126, then INF. AMP DEC at INF holds the level the attack reached, as the Digitone's DEC 127 does (AMP REL's INF is as before). VEL, the operators' KEY and the filter's SUS and KTRK read 0 to 127 instead of a percentage.
    • FM TONE sounds from before 0.22 are converted when they load (your saved sounds, the factory sounds, the last session, backups and sound files): each value is carried over into its new range. The conversion is close, not exact, so a sound may come out a little different; an AMP DEC that was at its top (127) is INF now, so the sound holds its level instead of falling slowly to SUS. The times keep their numbers, which now mean the Digitone's times (below). The next save keeps the sound in the new form.
    • FM TONE's LFOs reach all 57 of the Digitone's destinations, listed in the Digitone's order on the DEST cell. New are LFO 1's own SPEED, MULT, FADE, WAVE, start phase, MODE and DEPTH (from LFO 2 and 3), RATIO ALL, A and B together (LEV, ATK, DEC, END, DLY), DRIVE, the reverb, delay and chorus sends, and the filter envelope's DELAY.
    • FM TONE's times are the Digitone's. Every envelope (the amp's, the filter's, operators A and B), the DELAYs and the LFOs' FADE now take as long as on a Digitone at the same value, measured on a real Digitone, so a sound copied number for number also has the Digitone's timing. The time cells show numbers from 0 to 127, as the Digitone does, instead of milliseconds and seconds. The operators' attack rises the Digitone's way (slowly, then fast at the end); the DELAYs (A, B and the filter's) count 32nds of a beat at the part's tempo (16 is half a beat); a FADE of -16 takes 0.05 s, -32 about 0.8 s, -48 about 12 s. INIT is now the Digitone's init sound, so a sound started from INIT begins where one on the Digitone does. The factory FM TONE sounds were set again on the new times, so they keep their timing.
      • FM TONE sounds you saved before keep their numbers, so their envelopes now run on the Digitone's times: most times are longer than before, many much longer (an AMP DEC of 96 fell away in about 1.6 s and now takes about 15 s), the amp's attack changes least. Set the times again by ear where a sound needs it.
      • Digitone sounds imported before: import them again. Their times were translated for FM TONE's old times, so they now play longer than on the Digitone; imported again, the times are taken as they are.
    • Digitone sounds into FM TONE. The device manager takes sound files exported from an Elektron Digitone (.dnsnd, several at once) and turns each into an FM TONE sound that you place in a slot like any other; the installer page's Sounds section imports them one at a time. The files are read on your computer: nothing is uploaded. The algorithm, the ratios, the operators' envelopes and levels, the filter and its type, the amp envelope, the LFOs and their destinations, DRIVE, the decimals and, where it can, the sound's octave are carried over; what does not translate, or only roughly, is listed beside each sound before you place it. An imported sound is close to the Digitone's, not the same: the file format was worked out from exported files, and the levels are approximations. The times are taken as they are, now that FM TONE's are the Digitone's.
    • Replace the factory sounds in one go. In the device manager, Replace factory puts the sounds you selected in the library (Digitone imports or any other sounds of one engine) in the places of that engine's factory presets, in order: PRESETS then steps through your sounds where the factory ones were. Each takes a user slot; more sounds than factory presets are added after them while free slots last. Restore factory order brings the factory presets back and keeps your sounds as added ones. The factory sounds stay in the firmware either way.
    • Factory presets back, or a clean start. In the device manager, Restore brings back the factory presets you select, all of one engine's or all of every engine's, and deletes your sounds that took their places; Delete all user sounds and Reset sounds to factory empty all 128 slots in one go and take the favorite marks off your own sounds (marks on factory presets stay). Each asks first, offers a backup on the spot, and Undo puts everything back while the page is open.
    • P5 in the device manager. P5 has its own tab: its programs in the order the FM-1 shows them, then your P5 sounds, which you can place over a program, restore, delete or keep as files like any engine's (P5's factory programs themselves cannot be saved as files), and every tab shows your favorite stars as the FM-1 does.
    • VA: a finer filter envelope and more sync rates. The filter envelope's depth (FENV) has two decimals, -64.00 to +63.99, so a small amount such as 0.04 is possible. A synced LFO's RATE is a list of 42 rates: 8, 4, 3, 2 and 1 bars and 1/2 to 1/256, each dotted, straight and triplet, then 4, 3 and 2 ms. It moves one rate a detent; with OPT held it steps the straight ones. VA sounds from before 0.22 are converted exactly and sound as they did.
    • The delay at half rate. The delay now runs at 22.05 kHz, as the reverb always has: its repeats lose what is above 11 kHz, which is less than Tone takes at its default (judged on the unit by ear). It gives back 65 KB of the chip's buffer memory for what comes next. The longest time is still 0.74 s.
    • A Filter on everything (0.22-beta4). The FX layer's eighth page, Filter, is a low cut (Off, 20 Hz to 2 kHz) and a high cut (200 Hz to 16 kHz, Off) on the whole sound after the effects, 6 or 12 dB an octave; turning a cutoff switches it on, KNOB 4 takes it out and back to compare, and SAVE held keeps it. It is Off on a new or updated FM-1. The "New since 0.22-beta3" section above has the details.

    Playing and editing

    • Chord numerals in Key Mode. A new setting, Numerals, on the KEY layer's second page (hold KEY, turn SELECT, KNOB 4). It is off until you turn it on. With Key Mode on, the Chord view then shows the Roman numeral of the chord you are playing, in blue above the chord's name: in C major I for C, V for G, vi for Am. Capitals are chords with a major third, small letters chords with a minor third. The numeral is the degree you played: Transpose is left out, so the tonic chord reads I at any Transpose, while the name shows the chord you hear. Hold SAVE to keep the setting. Nothing you hear changes.
    • Snap: a key outside the scale plays a right note. A new setting, Snap, on the KEY layer's second page (hold KEY, turn SELECT, KNOB 3): Off, Scale or Chord. With Key plays Notes, a key outside the scale used to be a dead key: no sound, no MIDI. With Scale it plays the nearest note of the scale instead, going down between two (in C major C# plays C, D# plays D), the way the Scaler app remaps its keyboard. With Chord it plays the nearest tone of the chord that is sounding right now, yours or a playing loop's (over C major D# plays E and A# plays C), so a melody over a chord or a loop can hardly miss; when no chord sounds it does what Scale does. A key inside the scale always plays itself, and the snapped key behaves exactly as if you had pressed the key it was moved to: the chord keys, the bass, the performance modes, the looper and MIDI out all see that note. With Snap on, the keys outside the scale glow faintly instead of staying dark, and the note that sounds is lit on its own keys. With Key plays Chords those keys keep their sus chord on a neighbouring scale note, and Snap's cell is drawn grey. Hold SAVE to keep the setting. Asked for in GitHub issue 18.
    • The Full keyboard plays the key's chords. With Keyboard Full and Key Mode on, Key plays now decides what the 27 keys do, as on the Chords keyboard: with Chords every key plays the chord that belongs on its note of the scale (in C major D gives Dm, G gives G) and a key outside the scale its sus chord on a neighbouring scale note, with the voicing you set on the Chords keyboard; with Notes the keys are single notes, with the notes outside the scale silent or snapped. Until 0.22-beta3 the Full keyboard played single notes whatever Key plays said. KNOB 1 on the view is still the octave there.
    • The knobs accelerate. A value knob turned slowly moves its finest step (1, or 0.01 on a value with decimals); turned quickly it moves up to a twentieth of the range a detent, so a quick turn of about one revolution crosses the whole range. The first two detents of a turn (after a second's rest, or a change of direction) always move the finest step, however quickly they come, so a nudge is always one; a spin speeds up from the third. Detents that arrive together, while the screen is busy redrawing, count the time they really took, so a slow turn stays slow. That is every value in the sound editor of every engine and most value knobs outside it (the effects, the BASS layer's level, Options > Velocity). Lists (presets, algorithms, named choices, the VA's sync rates) still move one item a detent, and so do the tempo, the PLAY menu's Level and the click level.
    • Hold OPT to snap. While you hold OPT (printed GLO), a value knob jumps to round values: 0, 16, 32 .. 127 on a 0 to 127 value, steps of 8 on -64 to 63, whole numbers on a value with decimals, 8, 16, 32 and 64 on an LFO speed, octaves on a value in semitones. In the sound editor GLO is SHIFT: hold it, or tap it to keep snapping until you tap it again (snap shows in the title line). Until 0.21 SHIFT gave fine steps in the editor; a slow turn does that now. OPT's other jobs (with PRESETS, ALGORITHM, KNOB 1 and SELECT) are unchanged.
    • LATCH and a performance mode's Hold. Strum's Hold (KNOB 4 in the PERF layer) and the arpeggiator's light LATCH (printed LFO), since they hold the sound the way LATCH does. A tap on the lit LATCH now turns that Hold off and the notes stop; the next tap latches as usual. Until now LATCH could not release them.
    • The loop editor previews a step (0.22-beta4). With the loop stopped, turning PRESETS onto a step plays it as the loop would (its length, its voicing, its ratchet); an empty step is silence; while the loop plays you hear the loop. Nothing is recorded by it. The "New since 0.22-beta3" section above has the details.
    • Bigger rows under a curve. A screen with a curve over one row of controls draws that row at full size: P5's filter and envelope screens, CZ-1's envelope END screens (SUS and END) and WHEEL's ENV screen.
    • Dual Core is on by default. A new FM-1, and one whose settings you reset (Options > Reset Settings), now uses the chip's second core: the bass plays there with its own voices, and P5's chords get their eight voices. Updating does not change your setting: if your FM-1 had Dual Core Off, it still has. To turn it on, set Options > Dual Core to On and switch the FM-1 off and on. Should the second core keep the FM-1 from starting, the next start comes up on one core with Dual Core reading On · restart, so that you can switch it Off there.
      • After a crash beside the second core, Dual Core turns itself off. If the FM-1 crashes, hangs or gives the second core up while Dual Core is On, the screen says dual core off: crash after the restart (or hang, gave up), the line under Options > Dual Core gives the reason (off after a crash on 2 cores), Geek Out says c1 off · after a crash, and the FM-1 stays on one core over power cycles until you set Dual Core On again (a Reset Settings straight after keeps it Off too). Until 0.21 such a crash restarted the FM-1 with Dual Core still On, so it could crash again and again. If your FM-1 ever crashes or restarts while playing and Dual Core is still On, set it to Off and switch off and on.
      • With Dual Core On, the chip's regulator (VDC14) goes to 1.50 V before the second core starts (it was 1.45 V; the core voltage stays at 1.35 V). Some FM-1s crash with both cores running (issue #9 here; fm1-x0x #10 and #21, where fc79 and zednaked measured it), and every report agrees this voltage is what matters: at 1.50 V the affected units ran clean where 1.45 V still crashed. fm1-x0x ships 1.50 V since 1.0.7, the chip's data sheet allows 1.55 V and the stock M-VAVE firmware runs 1.60 V. With Dual Core Off nothing changes.
      • If your FM-1 turns Dual Core off by itself, please tell us (with fm1_install.py --debug): it means this unit does not run both cores at 1.50 V either, and that is worth knowing. --debug now also prints the last crash (what the crash screen showed for four seconds: the vector, the program counter, the return address, the debug unit's word and the uptime; kept until the FM-1 is switched off) and why the last restart happened.
    • Geek Out 2: the cores' load and the memory as meters. A sixth view, after Scope in the HOME cycle and in the view menu (hold HOME: the white keys D4 to B4 choose the view, Lock moves to C5; Options > View): four tall meters. CORE 0 (blue) is the audio engine's share of the first core over the last second, CORE 1 (orange) the second core's share when Dual Core is On (off, failed or gave up otherwise), RAM (white) and POOL (green) how much of the chip's two memory regions this firmware takes. The bars glide to each second's figure; a tick above a bar marks the second's peak. The title line says 2 cores or 1 core.
    • The screen is faster. Its bus runs at 20 MHz instead of 12, so a full redraw takes 46 ms instead of 77; nothing looks different (judged on the unit by eye).
    • Velocity and aftertouch from the keys. The FM-1's keys can sense how hard you play and how hard you lean on a held key, with no change to the hardware (the carbon contact under each key is read as a resistance; the idea and the method are Charles Vestal's, from his Velo and MONK-1 firmwares). Off until you turn it on: Options > Key Touch is Fixed (every key at Options > Velocity, as before), Dynamic (each chord at the velocity it was struck with) or Velocity + Aftertouch (and pressing harder on a held key moves the sound). Velocity Sens and Aftertouch Sens (Low / Mid / High) set how much. The keys that sense are F3 to C5; the top seven (C#5 to G5) follow the velocity you have been playing. A struck chord sounds a few milliseconds later than with Fixed, because the key is measured after it lands. With Key Touch on, every engine's level follows the velocity (FM6 and CZ-1 included), and with aftertouch the held pressure opens the filter; MIDI notes and aftertouch from USB do the same, and the keys' velocity and pressure go out over MIDI.
    • Expression, per sound. In the editor, the MOD group's last screen is EXPR: velocity (VEL) and aftertouch (AT) each to a destination (level, cutoff, shape, pitch, pan, the sends, the LFO's rate or vibrato, the engine's own parameters) by an amount from -64 to +63, saved with the sound. A sound that routes nothing uses the defaults (velocity to level, aftertouch to cutoff); turn the Dest or Amount cell to take them over, Dest OFF switches a default off.

    Saving and favorites

    • 128 user sound slots, shared by all engines. Save up to 128 of your own sounds, of any engine, in any mix (until now 32). The slots are numbered U001 to U128. Your 32 sounds from 0.21 are copied into U001 to U032 the first time the FM-1 starts with 0.22, each with its own patch. The device manager and the installer page's Sounds section work with the 128 slots, and with a 0.21 FM-1's 32 as before.
    • P5 sounds can be saved. SAVE on a P5 sound offers Overwrite and Save as new like every engine: the whole program is kept with the sound, edited or not, and loading it brings back exactly what you saved, with its UNISON. The device manager exports and imports P5 sounds as sound files.
    • Naming a sound has a cursor. When you Save as new, SELECT moves a cursor along the name (turned right on the last letter it adds one), KNOB 1 changes the letter under it and KNOB 4 to the left deletes it, so a name can be written with the knobs alone. The keys still type, just after the cursor. The other knobs do nothing while you name a sound: PRESETS and ALGORITHM no longer change the sound under the name, and KNOB 2 no longer changes the last letter (that is KNOB 1 at the cursor).
    • Favorites, with a filter. Mark the sounds you like, then step through just those. Tap SAVE: in the save menu KNOB 4 marks the sound (right) or takes the mark off (left); nothing is saved or overwritten. Or mark while you browse: in the sound editor turn PRESETS and use KNOB 4 on the sound you are hearing. A marked sound shows a small yellow star before its name when you turn PRESETS or ALGORITHM. Factory presets, P5's programs and your own sounds can be marked (00 INIT cannot).
      • The filter. In the save menu KNOB 2 turns the favorites filter on or off. While it is on, PRESETS and ALGORITHM step through the favorites of the engine you are on and nothing else; a yellow line under the meter (favorites 03/07) shows that it is on. An engine without a favorite steps through all its sounds and says no favorites: all.
      • Chord or bass. KNOB 3 gives a sound a type: Both, Chord or Bass. With the filter on, Chord sounds are offered to the chord part only and Bass sounds to the bass part only. The type stays with the sound when you take its mark off and put it back.
      • The save menu now works like the Options: SELECT picks one of five entries (Overwrite, Save as new, Favorite, Favorites filter, Favorite type) and KNOB 1 changes the selected entry's value. KNOB 1 no longer moves between Overwrite and Save as new: use SELECT.
      • The marks, the types and the filter are kept by themselves and are part of a backup. With the command-line tool, --favorites prints them as text and --restore-favorites writes such a text back.
    • Fewer pauses when the FM-1 writes to flash. A flash write used to stop the sound for about 18 ms. The FM-1 now clears the space ahead of time, at power-on or after ten seconds of quiet, for your favorites, for what SAVE held keeps (the sounds and the state you come back to) and for the 128 slots, so those writes no longer pause the sound (a second favorite change soon after waits for a quiet moment; a second save soon after pauses as before). Changing an Option still pauses once, after you stop playing, as in 0.21, and so does saving a loop. Taking a backup, or reading the favorites from a computer, no longer writes anything to the FM-1.
    • Back up before you try another firmware. Some other FM-1 firmwares (Melodee, a remix of ChoralRoot) use the part of the flash where 0.22 keeps your favorites and your sounds. A full backup from the installer page or the device manager keeps everything; restore it when you come back.

    Installing

    • A beta, opt-in. In the web installer tick Show beta releases under Other versions (the page remembers it in that browser), choose 0.22-beta4 and press Install. 0.22-beta3, 0.22-beta2 and 0.22-beta1 are still listed there too, below it. Without the tick the installer offers 0.21, the latest stable release, as before. On an FM-1 that runs a beta, "What is on my FM-1?" says so, and Install then writes 0.21 unless you choose a beta again. Options > Version reads ChoralRoot 0.22-beta4.
    • From 0.22-beta3, 0.22-beta2 or 0.22-beta1. Install 0.22-beta4 over it as over any version: your settings, sounds, loops and favorites stay as they are, and the Filter starts Off.
    • Going back to an earlier beta. It reads your settings, sounds, loops and favorites again, but it does not know the Filter and plays without it. If you had changed the Filter page (turning a cutoff is enough) before you last held SAVE, the earlier beta also starts with the effects' settings (the reverb's, the chorus's, the delay's) and the chord part's sends at their defaults, until you set them again there; your sounds, loops and the rest are untouched, and an FM-1 that never used the Filter goes back exactly as before. Once the earlier beta holds SAVE itself, the Filter is Off when you come back. 0.22-beta2 and 0.22-beta1 do not know Snap either: if Snap is Scale or Chord when you go back to one of them, it reads Key Mode as off, with Key plays and Keyboard at Chords, until you set them again there (nothing else is touched); with Snap Off it reads everything as before. Once that beta saves its settings (SAVE held, or an Option changed), Snap is Off when you come back.
    • A Single core package, for FM-1s that have trouble with Dual Core. The web installer offers it under Advanced > Hardware fallback: the same firmware, built so that the second core is never started. Choose it if your FM-1 crashes or freezes with the standard package. Options > Dual Core then reads 1 core build, and the version ChoralRoot 0.22-beta4 1-core (Options > Version shows it as 0.22-beta4 1-core, the line being too short for the whole name). Your settings, sounds, loops and favorites stay when you switch between the two.
    • Several FM-1s on one computer: the unit ID. Each FM-1 now has an ID of its own, 8 characters such as A1B2C3D4, read from its flash chip, so it stays the same through every install and reset. Options > Version shows it on the line under the version (unit ID A1B2C3D4). "What is on my FM-1?" shows it too and lists each FM-1 when several answer; Install, Back up, Restore and the Sounds then refuse, writing nothing, until only one is connected. The device manager asks which FM-1 to open and shows its ID. With the command-line tool, --info lists every FM-1 with its ID, and --unit ID makes any command use that FM-1 alone, through an install's restarts too.

    Going back to 0.21

    The installer offers 0.21 at any time: it is the default. 0.21 has none of the above, and:

    • Your sounds. 0.21 shows its 32 slots as they were when you updated: 0.22 never writes them. Sounds saved under 0.22, in any slot, are not there; they are still in the 128 slots when you come back. Sounds you save under 0.21 are not copied by themselves when you return: the device manager's Import the 0.21 slots copies 0.21's 32 slots into U001 to U032 again, over what is there (U033 to U128 stay).
    • A sound saved under 0.22, taken to 0.21 (export it with the device manager, then place it on 0.21): P5 sounds cannot go, 0.21 has no P5. The device manager converts FM TONE and VA sounds to what 0.21 reads and says what changed: values with decimals are rounded, an FM TONE LFO aimed at one of the destinations new in 0.22 is switched off, an AMP DEC at INF becomes 0.21's longest decay, and a VA LFO synced to a rate 0.21 does not have takes the nearest one it has. An FM TONE sound's times keep their numbers, which 0.21 plays on its own times: most of them come out much shorter there.
    • The sound you left playing. A part left on a P5 sound starts on 0.21's default sound. 0.21 does not read FM TONE and VA sounds in their 0.22 form either: a part left on one may start on another sound, or on INIT.
    • Favorites. 0.21 has none: it ignores the marks, the types and the filter, and leaves them alone, so they are still there when you come back.
    • Numerals, Snap and Key Touch. 0.21 has none of them (its keys play at Options > Velocity, as before; its Full keyboard plays single notes). With Snap Scale or Chord it reads Key Mode as off, with Key plays and Keyboard at Chords, until you set them again there; otherwise nothing is lost or reset. It does not keep them: once 0.21 saves its settings (you hold SAVE or change an Option there), Numerals and Snap are off and Key Touch is Fixed, with Velocity Sens and Aftertouch Sens at Mid, when you come back.
    • The Filter. 0.21 has none: it plays without it. If you had changed the Filter page (turning a cutoff is enough) before you last held SAVE, 0.21 also starts with the effects' settings (the reverb's, the chorus's, the delay's) and the chord part's sends at their defaults, until you set them again there; nothing else is lost. Once 0.21 holds SAVE, the Filter is Off when you come back.
    • Dual Core and the single-core package. 0.21 keeps the Dual Core setting as it is (On on an FM-1 that was new or reset under 0.22; Off if 0.22 turned it off after a crash) and has no single-core package: on an FM-1 that needs one core, set Options > Dual Core to Off on 0.21 straight after installing it. With Dual Core On, 0.21 sets the regulator to 1.45 V again, and it does not turn Dual Core off by itself after a crash.
    • The unit ID. 0.21 has none: the pages and fm1_install.py --info list an FM-1 on 0.21 without one, and --unit cannot choose it.
    • Geek Out 2. 0.21 has five views: with Geek Out 2 as the saved view (Options > View), it starts on the Chord view.
    • The knobs move in fixed steps again, and SHIFT in the sound editor gives fine steps again.
    • Backups. A backup made with 0.22 holds the 128 slots and the favorites; restored on 0.21 it brings back the settings, the FM6 and CZ-1 banks and the loops, but not the sounds or the favorites. A backup made with 0.21 restores on 0.22 into U001 to U032.

    ChoralRoot 0.22-beta4 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.22-beta4.fwsc.

    choralroot-0.22-beta4-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. 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: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.22-beta3...v0.22-beta4

  20. v0.22-beta3ChoralRoot 0.22-beta3Beta8 files

    ChoralRoot 0.22-beta3 is the third beta of 0.22: a sixth engine, P5, 128 sound slots shared by all engines, favorites, FM TONE in the Digitone's own ranges and times with Digitone sounds to import, knobs that accelerate, velocity and aftertouch from the FM-1's own keys, and, since 0.22-beta2, Snap in Key Mode and the key's chords on the Full keyboard. Like the betas before it, it is opt-in: the web installer offers it only when you tick Show beta releases under Other versions, and 0.21 stays its default. A beta may have bugs (please report them on GitHub), and the next stable release, 0.22, replaces it. What is new since 0.22-beta2 comes first; after it are the whole of 0.22's notes, so this page is all you need. Updating from 0.22-beta2 or 0.22-beta1 keeps everything, and going back to either loses nothing but Snap, which they do not know (the Installing section says what that means). Updating from 0.21 keeps your settings, sounds and loops; going back to 0.21 is possible at any time (the last section says what it means).

    New since 0.22-beta2

    • Snap: a key outside the scale plays a right note. A new setting, Snap, on the KEY layer's second page (hold KEY, turn SELECT, KNOB 3): Off, Scale or Chord. With Key plays Notes, a key outside the scale used to be a dead key: no sound, no MIDI. With Scale it plays the nearest note of the scale instead, going down between two (in C major C# plays C, D# plays D), the way the Scaler app remaps its keyboard. With Chord it plays the nearest tone of the chord that is sounding right now, yours or a playing loop's (over C major D# plays E and A# plays C), so a melody over a chord or a loop can hardly miss; when no chord sounds it does what Scale does. A key inside the scale always plays itself, and the snapped key behaves exactly as if you had pressed the key it was moved to: the chord keys, the bass, the performance modes, the looper and MIDI out all see that note. With Snap on, the keys outside the scale glow faintly instead of staying dark, and the note that sounds is lit on its own keys. With Key plays Chords those keys keep their sus chord on a neighbouring scale note, and Snap's cell is drawn grey. Hold SAVE to keep the setting. Asked for in GitHub issue 18.
    • The Full keyboard plays the key's chords. With Keyboard Full and Key Mode on, Key plays now decides what the 27 keys do, as on the Chords keyboard: with Chords every key plays the chord that belongs on its note of the scale (in C major D gives Dm, G gives G) and a key outside the scale its sus chord on a neighbouring scale note, with the voicing you set on the Chords keyboard; with Notes the keys are single notes, with the notes outside the scale silent or snapped. Until now the Full keyboard played single notes whatever Key plays said. KNOB 1 on the view is still the octave there.

    Sounds and engines

    • A new engine: P5, the Prophet-5 model of Melodee (Kerem Kilic's FM-1 firmware): two oscillators with sync and Poly-Mod, the four-pole filter in its Rev 1/2 and Rev 3 characters, two envelopes and the wheel's modulation. It comes with 115 of the 200 factory programs Sequential made for the Prophet-5 (picked by ear), after 00 INIT. Choose it as any engine: hold OPT (printed GLO) and turn PRESETS for the chord part or ALGORITHM for the bass.
      • Its sound editor is rows of the Prophet-5's controls. P5's screens are rows of up to four controls, as on every engine: the row on the knobs is in colour, the others grey; SELECT moves from row to row and on to the next screen of the group; KNOB 1 to 4 turn the row's places from left to right, and a place with nothing in it does nothing. Each control is drawn as the Prophet-5's own: a knob with the eleven marks of its printed scale, a button with its LED and the wave it switches, the filter's REV with two LEDs, a lever for the filter's keyboard tracking. EDIT shows eleven screens, then EXPR as on every engine: OSC A with the mixer, and OSC B (OSC); the filter under its curve, the filter envelope under its curve, then the envelope's velocity, the keyboard tracking and the filter's aftertouch (FILT); the amplifier envelope under its curve, then its velocity and the release switch (ENV); the LFO with its three wave buttons on one row, and the wheel's modulation (LFO); Poly-Mod, and the voice with UNISON, voices, detune, glide, priority and Vintage (MOD). Only P5's controls look like this.
      • UNISON. A program whose UNISON switch is on loads in UNISON: one note on up to four stacked voices (a chord plays its lowest or its last note, as the program's key priority says). The next program without it plays chords again.
      • Voices. With Dual Core on (the new default, below) the chord part plays up to eight P5 voices, shared between the chip's two cores. A P5 bass gets up to four (a UNISON stack), but the chord comes first, and the bass always keeps one voice. With one core P5 plays four voices, three while a P5 bass sounds, and a P5 bass plays one. When you hold more keys than there are voices, the oldest held note that is not the lowest fades out quickly to make room.
      • Level. P5 plays a little quieter than the other engines (a four-note chord about 4 dB under FM6 and 6 dB under the VA), so that UNISON programs and big chords stay clear of the output's limiter.
    • FM TONE in the Digitone's ranges. FM TONE's values now read like the Digitone's, so a sound can be compared and copied number for number: FREQ (the cutoff, now the Digitone's number instead of Hz), RESO, BASE and DTUNE from 0.00 to 127.00 with two decimals, HARM from -26.00 to +26.00, the filter envelope's DEPTH and each LFO's SPEED and DEPTH from -64.00 to +63.99, FDBK from 0 to 127, LEVEL a whole number from 0 to 127, and AMP DEC and AMP REL whole numbers from 0 to 126, then INF. AMP DEC at INF holds the level the attack reached, as the Digitone's DEC 127 does (AMP REL's INF is as before). VEL, the operators' KEY and the filter's SUS and KTRK read 0 to 127 instead of a percentage.
    • FM TONE sounds from before 0.22 are converted when they load (your saved sounds, the factory sounds, the last session, backups and sound files): each value is carried over into its new range. The conversion is close, not exact, so a sound may come out a little different; an AMP DEC that was at its top (127) is INF now, so the sound holds its level instead of falling slowly to SUS. The times keep their numbers, which now mean the Digitone's times (below). The next save keeps the sound in the new form.
    • FM TONE's LFOs reach all 57 of the Digitone's destinations, listed in the Digitone's order on the DEST cell. New are LFO 1's own SPEED, MULT, FADE, WAVE, start phase, MODE and DEPTH (from LFO 2 and 3), RATIO ALL, A and B together (LEV, ATK, DEC, END, DLY), DRIVE, the reverb, delay and chorus sends, and the filter envelope's DELAY.
    • FM TONE's times are the Digitone's. Every envelope (the amp's, the filter's, operators A and B), the DELAYs and the LFOs' FADE now take as long as on a Digitone at the same value, measured on a real Digitone, so a sound copied number for number also has the Digitone's timing. The time cells show numbers from 0 to 127, as the Digitone does, instead of milliseconds and seconds. The operators' attack rises the Digitone's way (slowly, then fast at the end); the DELAYs (A, B and the filter's) count 32nds of a beat at the part's tempo (16 is half a beat); a FADE of -16 takes 0.05 s, -32 about 0.8 s, -48 about 12 s. INIT is now the Digitone's init sound, so a sound started from INIT begins where one on the Digitone does. The factory FM TONE sounds were set again on the new times, so they keep their timing.
      • FM TONE sounds you saved before keep their numbers, so their envelopes now run on the Digitone's times: most times are longer than before, many much longer (an AMP DEC of 96 fell away in about 1.6 s and now takes about 15 s), the amp's attack changes least. Set the times again by ear where a sound needs it.
      • Digitone sounds imported before: import them again. Their times were translated for FM TONE's old times, so they now play longer than on the Digitone; imported again, the times are taken as they are.
    • Digitone sounds into FM TONE. The device manager takes sound files exported from an Elektron Digitone (.dnsnd, several at once) and turns each into an FM TONE sound that you place in a slot like any other; the installer page's Sounds section imports them one at a time. The files are read on your computer: nothing is uploaded. The algorithm, the ratios, the operators' envelopes and levels, the filter and its type, the amp envelope, the LFOs and their destinations, DRIVE, the decimals and, where it can, the sound's octave are carried over; what does not translate, or only roughly, is listed beside each sound before you place it. An imported sound is close to the Digitone's, not the same: the file format was worked out from exported files, and the levels are approximations. The times are taken as they are, now that FM TONE's are the Digitone's.
    • Replace the factory sounds in one go. In the device manager, Replace factory puts the sounds you selected in the library (Digitone imports or any other sounds of one engine) in the places of that engine's factory presets, in order: PRESETS then steps through your sounds where the factory ones were. Each takes a user slot; more sounds than factory presets are added after them while free slots last. Restore factory order brings the factory presets back and keeps your sounds as added ones. The factory sounds stay in the firmware either way.
    • Factory presets back, or a clean start. In the device manager, Restore brings back the factory presets you select, all of one engine's or all of every engine's, and deletes your sounds that took their places; Delete all user sounds and Reset sounds to factory empty all 128 slots in one go and take the favorite marks off your own sounds (marks on factory presets stay). Each asks first, offers a backup on the spot, and Undo puts everything back while the page is open.
    • P5 in the device manager. P5 has its own tab: its programs in the order the FM-1 shows them, then your P5 sounds, which you can place over a program, restore, delete or keep as files like any engine's (P5's factory programs themselves cannot be saved as files), and every tab shows your favorite stars as the FM-1 does.
    • VA: a finer filter envelope and more sync rates. The filter envelope's depth (FENV) has two decimals, -64.00 to +63.99, so a small amount such as 0.04 is possible. A synced LFO's RATE is a list of 42 rates: 8, 4, 3, 2 and 1 bars and 1/2 to 1/256, each dotted, straight and triplet, then 4, 3 and 2 ms. It moves one rate a detent; with OPT held it steps the straight ones. VA sounds from before 0.22 are converted exactly and sound as they did.
    • The delay at half rate. The delay now runs at 22.05 kHz, as the reverb always has: its repeats lose what is above 11 kHz, which is less than Tone takes at its default (judged on the unit by ear). It gives back 65 KB of the chip's buffer memory for what comes next. The longest time is still 0.74 s.

    Playing and editing

    • Chord numerals in Key Mode. A new setting, Numerals, on the KEY layer's second page (hold KEY, turn SELECT, KNOB 4). It is off until you turn it on. With Key Mode on, the Chord view then shows the Roman numeral of the chord you are playing, in blue above the chord's name: in C major I for C, V for G, vi for Am. Capitals are chords with a major third, small letters chords with a minor third. The numeral is the degree you played: Transpose is left out, so the tonic chord reads I at any Transpose, while the name shows the chord you hear. Hold SAVE to keep the setting. Nothing you hear changes.
    • Snap, and the key's chords on the Full keyboard (0.22-beta3). Snap (the KEY layer's second page, KNOB 3: Off, Scale or Chord) gives the keys outside the scale a right note to play with Key plays Notes: the nearest note of the scale, or the nearest tone of the chord that is sounding, instead of silence; those keys glow faintly. And with Keyboard Full, Key Mode on and Key plays Chords, every key plays the chord of its note of the scale, as a lone root does on the Chords keyboard. The "New since 0.22-beta2" section above has the details.
    • The knobs accelerate. A value knob turned slowly moves its finest step (1, or 0.01 on a value with decimals); turned quickly it moves up to a twentieth of the range a detent, so a quick turn of about one revolution crosses the whole range. The first two detents of a turn (after a second's rest, or a change of direction) always move the finest step, however quickly they come, so a nudge is always one; a spin speeds up from the third. Detents that arrive together, while the screen is busy redrawing, count the time they really took, so a slow turn stays slow. That is every value in the sound editor of every engine and most value knobs outside it (the effects, the BASS layer's level, Options > Velocity). Lists (presets, algorithms, named choices, the VA's sync rates) still move one item a detent, and so do the tempo, the PLAY menu's Level and the click level.
    • Hold OPT to snap. While you hold OPT (printed GLO), a value knob jumps to round values: 0, 16, 32 .. 127 on a 0 to 127 value, steps of 8 on -64 to 63, whole numbers on a value with decimals, 8, 16, 32 and 64 on an LFO speed, octaves on a value in semitones. In the sound editor GLO is SHIFT: hold it, or tap it to keep snapping until you tap it again (snap shows in the title line). Until 0.21 SHIFT gave fine steps in the editor; a slow turn does that now. OPT's other jobs (with PRESETS, ALGORITHM, KNOB 1 and SELECT) are unchanged.
    • LATCH and a performance mode's Hold. Strum's Hold (KNOB 4 in the PERF layer) and the arpeggiator's light LATCH (printed LFO), since they hold the sound the way LATCH does. A tap on the lit LATCH now turns that Hold off and the notes stop; the next tap latches as usual. Until now LATCH could not release them.
    • Bigger rows under a curve. A screen with a curve over one row of controls draws that row at full size: P5's filter and envelope screens, CZ-1's envelope END screens (SUS and END) and WHEEL's ENV screen.
    • Dual Core is on by default. A new FM-1, and one whose settings you reset (Options > Reset Settings), now uses the chip's second core: the bass plays there with its own voices, and P5's chords get their eight voices. Updating does not change your setting: if your FM-1 had Dual Core Off, it still has. To turn it on, set Options > Dual Core to On and switch the FM-1 off and on. Should the second core keep the FM-1 from starting, the next start comes up on one core with Dual Core reading On · restart, so that you can switch it Off there.
      • After a crash beside the second core, Dual Core turns itself off. If the FM-1 crashes, hangs or gives the second core up while Dual Core is On, the screen says dual core off: crash after the restart (or hang, gave up), the line under Options > Dual Core gives the reason (off after a crash on 2 cores), Geek Out says c1 off · after a crash, and the FM-1 stays on one core over power cycles until you set Dual Core On again (a Reset Settings straight after keeps it Off too). Until 0.21 such a crash restarted the FM-1 with Dual Core still On, so it could crash again and again. If your FM-1 ever crashes or restarts while playing and Dual Core is still On, set it to Off and switch off and on.
      • With Dual Core On, the chip's regulator (VDC14) goes to 1.50 V before the second core starts (it was 1.45 V; the core voltage stays at 1.35 V). Some FM-1s crash with both cores running (issue #9 here; fm1-x0x #10 and #21, where fc79 and zednaked measured it), and every report agrees this voltage is what matters: at 1.50 V the affected units ran clean where 1.45 V still crashed. fm1-x0x ships 1.50 V since 1.0.7, the chip's data sheet allows 1.55 V and the stock M-VAVE firmware runs 1.60 V. With Dual Core Off nothing changes.
      • If your FM-1 turns Dual Core off by itself, please tell us (with fm1_install.py --debug): it means this unit does not run both cores at 1.50 V either, and that is worth knowing. --debug now also prints the last crash (what the crash screen showed for four seconds: the vector, the program counter, the return address, the debug unit's word and the uptime; kept until the FM-1 is switched off) and why the last restart happened.
    • Geek Out 2: the cores' load and the memory as meters. A sixth view, after Scope in the HOME cycle and in the view menu (hold HOME: the white keys D4 to B4 choose the view, Lock moves to C5; Options > View): four tall meters. CORE 0 (blue) is the audio engine's share of the first core over the last second, CORE 1 (orange) the second core's share when Dual Core is On (off, failed or gave up otherwise), RAM (white) and POOL (green) how much of the chip's two memory regions this firmware takes. The bars glide to each second's figure; a tick above a bar marks the second's peak. The title line says 2 cores or 1 core.
    • The screen is faster. Its bus runs at 20 MHz instead of 12, so a full redraw takes 46 ms instead of 77; nothing looks different (judged on the unit by eye).
    • Velocity and aftertouch from the keys. The FM-1's keys can sense how hard you play and how hard you lean on a held key, with no change to the hardware (the carbon contact under each key is read as a resistance; the idea and the method are Charles Vestal's, from his Velo and MONK-1 firmwares). Off until you turn it on: Options > Key Touch is Fixed (every key at Options > Velocity, as before), Dynamic (each chord at the velocity it was struck with) or Velocity + Aftertouch (and pressing harder on a held key moves the sound). Velocity Sens and Aftertouch Sens (Low / Mid / High) set how much. The keys that sense are F3 to C5; the top seven (C#5 to G5) follow the velocity you have been playing. A struck chord sounds a few milliseconds later than with Fixed, because the key is measured after it lands. With Key Touch on, every engine's level follows the velocity (FM6 and CZ-1 included), and with aftertouch the held pressure opens the filter; MIDI notes and aftertouch from USB do the same, and the keys' velocity and pressure go out over MIDI.
    • Expression, per sound. In the editor, the MOD group's last screen is EXPR: velocity (VEL) and aftertouch (AT) each to a destination (level, cutoff, shape, pitch, pan, the sends, the LFO's rate or vibrato, the engine's own parameters) by an amount from -64 to +63, saved with the sound. A sound that routes nothing uses the defaults (velocity to level, aftertouch to cutoff); turn the Dest or Amount cell to take them over, Dest OFF switches a default off.

    Saving and favorites

    • 128 user sound slots, shared by all engines. Save up to 128 of your own sounds, of any engine, in any mix (until now 32). The slots are numbered U001 to U128. Your 32 sounds from 0.21 are copied into U001 to U032 the first time the FM-1 starts with 0.22, each with its own patch. The device manager and the installer page's Sounds section work with the 128 slots, and with a 0.21 FM-1's 32 as before.
    • P5 sounds can be saved. SAVE on a P5 sound offers Overwrite and Save as new like every engine: the whole program is kept with the sound, edited or not, and loading it brings back exactly what you saved, with its UNISON. The device manager exports and imports P5 sounds as sound files.
    • Naming a sound has a cursor. When you Save as new, SELECT moves a cursor along the name (turned right on the last letter it adds one), KNOB 1 changes the letter under it and KNOB 4 to the left deletes it, so a name can be written with the knobs alone. The keys still type, just after the cursor. The other knobs do nothing while you name a sound: PRESETS and ALGORITHM no longer change the sound under the name, and KNOB 2 no longer changes the last letter (that is KNOB 1 at the cursor).
    • Favorites, with a filter. Mark the sounds you like, then step through just those. Tap SAVE: in the save menu KNOB 4 marks the sound (right) or takes the mark off (left); nothing is saved or overwritten. Or mark while you browse: in the sound editor turn PRESETS and use KNOB 4 on the sound you are hearing. A marked sound shows a small yellow star before its name when you turn PRESETS or ALGORITHM. Factory presets, P5's programs and your own sounds can be marked (00 INIT cannot).
      • The filter. In the save menu KNOB 2 turns the favorites filter on or off. While it is on, PRESETS and ALGORITHM step through the favorites of the engine you are on and nothing else; a yellow line under the meter (favorites 03/07) shows that it is on. An engine without a favorite steps through all its sounds and says no favorites: all.
      • Chord or bass. KNOB 3 gives a sound a type: Both, Chord or Bass. With the filter on, Chord sounds are offered to the chord part only and Bass sounds to the bass part only. The type stays with the sound when you take its mark off and put it back.
      • The save menu now works like the Options: SELECT picks one of five entries (Overwrite, Save as new, Favorite, Favorites filter, Favorite type) and KNOB 1 changes the selected entry's value. KNOB 1 no longer moves between Overwrite and Save as new: use SELECT.
      • The marks, the types and the filter are kept by themselves and are part of a backup. With the command-line tool, --favorites prints them as text and --restore-favorites writes such a text back.
    • Fewer pauses when the FM-1 writes to flash. A flash write used to stop the sound for about 18 ms. The FM-1 now clears the space ahead of time, at power-on or after ten seconds of quiet, for your favorites, for what SAVE held keeps (the sounds and the state you come back to) and for the 128 slots, so those writes no longer pause the sound (a second favorite change soon after waits for a quiet moment; a second save soon after pauses as before). Changing an Option still pauses once, after you stop playing, as in 0.21, and so does saving a loop. Taking a backup, or reading the favorites from a computer, no longer writes anything to the FM-1.
    • Back up before you try another firmware. Some other FM-1 firmwares (Melodee, a remix of ChoralRoot) use the part of the flash where 0.22 keeps your favorites and your sounds. A full backup from the installer page or the device manager keeps everything; restore it when you come back.

    Installing

    • A beta, opt-in. In the web installer tick Show beta releases under Other versions (the page remembers it in that browser), choose 0.22-beta3 and press Install. 0.22-beta2 and 0.22-beta1 are still listed there too, below it. Without the tick the installer offers 0.21, the latest stable release, as before. On an FM-1 that runs a beta, "What is on my FM-1?" says so, and Install then writes 0.21 unless you choose a beta again. Options > Version reads ChoralRoot 0.22-beta3.
    • From 0.22-beta2 or 0.22-beta1. Install 0.22-beta3 over it as over any version: your settings, sounds, loops and favorites stay as they are, and the earlier beta reads all of them again if you go back to it, with one exception: it does not know Snap. If Snap is Scale or Chord when you go back, that beta reads Key Mode as off, with Key plays and Keyboard at Chords, until you set them again there (nothing else is touched); with Snap Off it reads everything as before. Once the earlier beta saves its settings (SAVE held, or an Option changed), Snap is Off when you come back.
    • A Single core package, for FM-1s that have trouble with Dual Core. The web installer offers it under Advanced > Hardware fallback: the same firmware, built so that the second core is never started. Choose it if your FM-1 crashes or freezes with the standard package. Options > Dual Core then reads 1 core build, and the version ChoralRoot 0.22-beta3 1-core (Options > Version shows it as 0.22-beta3 1-core, the line being too short for the whole name). Your settings, sounds, loops and favorites stay when you switch between the two.
    • Several FM-1s on one computer: the unit ID. Each FM-1 now has an ID of its own, 8 characters such as A1B2C3D4, read from its flash chip, so it stays the same through every install and reset. Options > Version shows it on the line under the version (unit ID A1B2C3D4). "What is on my FM-1?" shows it too and lists each FM-1 when several answer; Install, Back up, Restore and the Sounds then refuse, writing nothing, until only one is connected. The device manager asks which FM-1 to open and shows its ID. With the command-line tool, --info lists every FM-1 with its ID, and --unit ID makes any command use that FM-1 alone, through an install's restarts too.

    Going back to 0.21

    The installer offers 0.21 at any time: it is the default. 0.21 has none of the above, and:

    • Your sounds. 0.21 shows its 32 slots as they were when you updated: 0.22 never writes them. Sounds saved under 0.22, in any slot, are not there; they are still in the 128 slots when you come back. Sounds you save under 0.21 are not copied by themselves when you return: the device manager's Import the 0.21 slots copies 0.21's 32 slots into U001 to U032 again, over what is there (U033 to U128 stay).
    • A sound saved under 0.22, taken to 0.21 (export it with the device manager, then place it on 0.21): P5 sounds cannot go, 0.21 has no P5. The device manager converts FM TONE and VA sounds to what 0.21 reads and says what changed: values with decimals are rounded, an FM TONE LFO aimed at one of the destinations new in 0.22 is switched off, an AMP DEC at INF becomes 0.21's longest decay, and a VA LFO synced to a rate 0.21 does not have takes the nearest one it has. An FM TONE sound's times keep their numbers, which 0.21 plays on its own times: most of them come out much shorter there.
    • The sound you left playing. A part left on a P5 sound starts on 0.21's default sound. 0.21 does not read FM TONE and VA sounds in their 0.22 form either: a part left on one may start on another sound, or on INIT.
    • Favorites. 0.21 has none: it ignores the marks, the types and the filter, and leaves them alone, so they are still there when you come back.
    • Numerals, Snap and Key Touch. 0.21 has none of them (its keys play at Options > Velocity, as before; its Full keyboard plays single notes). With Snap Scale or Chord it reads Key Mode as off, with Key plays and Keyboard at Chords, until you set them again there; otherwise nothing is lost or reset. It does not keep them: once 0.21 saves its settings (you hold SAVE or change an Option there), Numerals and Snap are off and Key Touch is Fixed, with Velocity Sens and Aftertouch Sens at Mid, when you come back.
    • Dual Core and the single-core package. 0.21 keeps the Dual Core setting as it is (On on an FM-1 that was new or reset under 0.22; Off if 0.22 turned it off after a crash) and has no single-core package: on an FM-1 that needs one core, set Options > Dual Core to Off on 0.21 straight after installing it. With Dual Core On, 0.21 sets the regulator to 1.45 V again, and it does not turn Dual Core off by itself after a crash.
    • The unit ID. 0.21 has none: the pages and fm1_install.py --info list an FM-1 on 0.21 without one, and --unit cannot choose it.
    • Geek Out 2. 0.21 has five views: with Geek Out 2 as the saved view (Options > View), it starts on the Chord view.
    • The knobs move in fixed steps again, and SHIFT in the sound editor gives fine steps again.
    • Backups. A backup made with 0.22 holds the 128 slots and the favorites; restored on 0.21 it brings back the settings, the FM6 and CZ-1 banks and the loops, but not the sounds or the favorites. A backup made with 0.21 restores on 0.22 into U001 to U032.

    ChoralRoot 0.22-beta3 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.22-beta3.fwsc.

    choralroot-0.22-beta3-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. 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: https://github.com/Quixotic7/ChoralRootFM1/compare/v0.22-beta2...v0.22-beta3