overdub
FirmwareM-VAVE FM-1

fm1-ripple

charlesvestal/fm1-ripple · ★ 4

Ripple: droplets (Lua) and currents (Faust or C) for the M-VAVE FM-1, added over a USB drive without reflashing

README from GitHub, MPL-2.0

Ripple

A firmware for the M-VAVE FM-1 that runs droplets (instruments written in Lua) playing currents (sounds written in Faust or C), both loaded from a disk in the FM-1's own flash. In disk mode, the FM-1 shows up on a computer as a USB drive: copy a droplet or a current onto it, eject it, and it's there. Nothing needs reflashing.

Droplets and currents are separate on purpose: any droplet can load any currents and chain them as it likes, so a new instrument is often just a few lines of Lua over sounds that already exist. The FM bells from one droplet can play a drum machine's pattern in another, through the same delay.

Inspired by monome's norns: Lua scripts over compiled sound engines.

Try it in the browser, install it and read the manual on Ripple's site. The latest release is on GitHub.

On the FM-1

The list shows the droplets: the ones built into Ripple (an outlined mark) and yours on the disk (a filled one). Turn SELECT (or press OCT- / OCT+) to pick one and press PLAY to start it. Hold HOME for a second to go back to the list.

At the end of the list, disk mode shows the disk to a computer as a drive called RIPPLE, with the folders droplets, currents, data and lib. Eject the drive when you're done, and Ripple comes back to the list. The whole disk (276 KB) is yours: the built-in droplets and currents live in the firmware, not on it. A droplet or a current on the disk with the same name as a built-in one is used instead of it, so to change a built-in droplet, copy it from builtin/droplets in this repository onto the disk and edit it there.

Empty the disk (press PLAY twice) erases everything on the disk and leaves the empty folders. The built-in droplets stay.

The built-in droplets:

DropletWhat it is
arpHold keys and they play one after another
awakeA melody that wanders a scale on its own
beatA 16-step drum machine on the white keys
bellsFM bells on loops of different lengths, drifting in and out of step
chordsA chord of the scale on every white key
droneThree slow FM voices that change colour by themselves
euclidThree Euclidean drum tracks
lifeConway's Game of Life, a note for each cell born
loopA note looper
midiThe FM-1 as a USB MIDI controller, no sound of its own
monkA singing voice (MonkSynth, as MONK-1 has it): lean on a key to open the vowel
polyA six-voice synth through a delay
rackBuild an instrument on the FM-1: MIDI effects (chords, arp, echo, feel, loop and beat stretch) into any voice, then two effects
rainPlucked notes falling on a scale into a reverb
sophieSixteen pads of metallic FM percussion (Sophie, as SPH-16 has it) with a 16-step pattern

For their controls, see the manual.

Besides the six currents of 0.1 and monk and sophie, seventeen of Mutable Instruments Plaits' engines are built in as currents of their own (plaits-va, plaits-modal, plaits-kick and the rest): play them with the rack. Three more (plaits-wave, plaits-dx, plaits-speech) are on each release as files to copy into currents on the disk: the firmware has no room left for them.

Each keeps its settings when you press SAVE (beat, euclid and loop their patterns too).

Writing your own

For droplets, see docs/DROPLETS.md. For currents, see sdk/README.md.

The emulator on the site has a panel for writing your own: a droplet in Lua or a current in Faust, run there at once, or a C or C++ current built for it (currents.py --web-module) and dropped on it.

Build and test

export PATH=~/github/fm1-parent/bin:$PATH        # bin/docker runs podman
./build.sh                                        # app/build/ripple.fwsc
./build.sh --host && sh tests/run_tests.sh        # the simulator and its tests
python3 base/tools/fm1_install.py app/build/ripple.fwsc --yes

build.sh builds the currents (currents/), puts them and the droplets (builtin/) into the built-in volume, then builds the firmware with fm1-base (base/). disk/ is the empty disk a new FM-1 starts with.

Licences

Ripple is MPL-2.0, on fm1-base and felucca-bsp (from Felucca by Leo Kuroshita, Hügelton Instruments). The SDK (sdk/), the built-in currents and droplets are MIT: sophie from Sophie by Matt Estela and the digisophie contributors, monk from MonkSynth by Jonathan Taylor, the plaits-* currents from Mutable Instruments Plaits by Emilie Gillet. The MIDI effects are e16-launcher's engine (MIT). Lua 5.4 is MIT (Lua.org, PUC-Rio), with the changes listed in app/third_party/lua-5.4.7/PATCHES.md. Currents are written in Faust (GRAME); the code Faust generates is the current's own. For details, see LICENSING.md.

Ripple needs fm1-base's disk mode and code window, in review as charlesvestal/fm1-base#32 and hugelton/felucca-bsp#25; until they merge, base/ follows their branches.