Firmware for the M-VAVE FM‑1 · open source · early
Make a sound. Resample it. Make it new.↻
Veffbox is a resampling sound-design instrument for a 27-key pocket synth. Build one sound from a
source, a strummed chord sequence, modulation and up to eight effects. Then RESAMPLE: the recording becomes the
new source, and the recipe that made it is kept, so every sound can be rebuilt bit for bit.
6sources: FM, analog, drums, and three ways to play a resample
9×46 LFOs and 3 envelopes, 4 destinations each
8FX slots in any order, 13 effect types
64bank sounds, each with its own generation tree
Interactive · with sound
Play it right here.
The emulator runs the Veffbox firmware itself in your browser: the same screen, the same engines, the same
sound, and your bank is kept in this browser. Start tutorial lights up what to press next and says why, from
the first sound to a resample, the tree and a chord sequence.
Computer keyboard: ZSXDC… play the keys, Space PLAY, Enter resample, \ SEL (click the panel first).Open full screen ↗
00 · Your first sound
From nothing to a bank of your own sounds.
Eight steps on the FM‑1. You never lose anything: each roll can be undone, each resample is kept
with the recipe that made it, and a sound can always be rebuilt from scratch.
Pick an engine
EDIT · turn SELECT
EDIT opens the source page. Turn SELECT to choose the engine: OP4 (FM), ANLG (analog) or DRUM. The engine's
name is the big title. Play the keys to hear it.
The four knobs under the screen edit the row shown by the dots. Press EDIT again for the next row.
In DRUM, the key you press picks the voice the knobs shape. In OP4, the OP knob on the third row picks the
operator, A to D.
Roll the engine
SEL · SEL · SEL…
On the source page, SEL is RANDOMIZE: new engine settings, and the sound plays once so you hear it. Tap again
for another roll. CHAOS on GLO sets how far a roll goes, from a nudge to a whole new sound.
Hold SEL for 0.6 s to go back to the sound from before the first roll of the series.
Give it a part
ARP · SEQ · PLAY
ARP picks the mode: NOTE (the keys), SEQ (a 16-step line) or CHORD (up to 8 chords with exact notes, each with
its own length, and a strum). SEQ edits the selected step: turn SELECT to move, press keys to enter notes. PLAY
starts and stops.
Make it move
LFO · ENV · SEL = LEARN
Pick an LFO or envelope with SELECT, tap SEL, then turn any knob on any page: that parameter becomes one of its
four destinations. A ~ next to a knob's name means something modulates it.
Scramble the effects
FX · SEL · SEL · SEL…
On the FX page, SEL is SCRAMBLE: a new chain of effects, with LFOs already routed into them. Tap a few times
until something clicks, and hold SEL to go back. Or build the chain by hand: SELECT picks the slot, the knobs
set TYPE, the amounts, MIX and the slot's position.
Resample it
REC · from any page
REC records the whole chain as a new generation: G1, G2… With AFTER on FLAT (HOME), the effects and modulation
are cleared and the resample becomes the source, so you start fresh on the result.
HOME sets the resample: LEN (one note or 1, 2 or 4 bars), START on the grid, NORM, and how long the
tail rings.
Bend the resample, and resample again
EDIT · SELECT: SAMP · GRAN · CHOP
Now the resample is the sound. Play it as a sample (SAMP), scatter it into grains (GRAN) or cut it at its
transients into slices on the keys (CHOP). Roll it with SEL, scramble new effects, then REC again. Every
round adds a generation, a child of the one before.
Your tree, your bank
SAVE · SELECT · SEL
SAVE shows the sound's generation tree. Pick a generation with SELECT, choose an action with the DO knob, and
run it with SEL.
LOAD plays its resample again. EDIT brings back the recipe that made it, so the next resample grows a
new branch and the old one stays. RBLD re-renders it from the first generation, bit for bit.
PRESETS picks which of the 64 bank sounds you are on, ALGORITHM which of the 4 tracks. Everything
saves itself to the FM‑1's flash 2.5 s after you stop playing. To fill the bank, turn PRESETS to an
empty sound and start again from step 1.
Why the tree can always be rebuilt: Veffbox uses integer math only, and every random roll comes from a
seed stored in the recipe. A recipe is a few hundred bytes, so a sound keeps up to 12 generations in flash, while
audio is kept only for the last resample. REBUILD renders the rest from their recipes and gets the same bits back.
01 · The loop
Five pages. One direction.
Everything you do is a step on one road: a source, played, modulated, run through effects, resampled.
The resample goes into the bank as a new generation and comes back as the source. Round you go.
SourceEDIT
Where the sound comes from: an FM, analog or drum engine, or the last resample played as a sample, as grains or as slices.
PlayARP · SEQ
From the keys, as a 16-step line, or as an 8-step chord sequence with exact notes and a strum.
ModLFO · ENV
6 LFOs and 3 envelopes, each reaching 4 destinations anywhere on any page.
FXFX
Up to 8 effects in a chain, in any order, the same type more than once if you like.
ResampleHOME · REC
Records the whole chain. The resample is the next source; its recipe goes into the bank.
02 · Sources
Three engines. Three ways back in.
Start from a synth engine. After the first resample, the source can be the resample itself: played as a
sample, scattered into grains, or cut into slices. The knobs come in rows of four; press the page button again for
the next row. SELECT picks the engine.
Engines: make a sound from nothing
OP4
4-operator FM
Four operators, A to D, in 11 algorithms that decide who modulates whom and which ones you hear. Integer ratios
sound harmonic, odd ones metallic; a fixed-frequency operator makes drums and bells.
11 ALG
7 waves
CRS · FINE · LVL
ADSR per op
FIX
D feedback
ANLG
Two-oscillator analog
Two oscillators with detune, a sub one octave down, noise and sync, into a 24 dB ladder filter with drive
and its own envelope.
SAW SQR TRI PWM SIN NOIS
DET · SUB · SYNC
CUT · RES · ENV
DRV
DRUM
Eight 808-style voices
Kick, snare, clap, hat, tom, rim, cowbell and cymbal, each with 8 shaping knobs: pitch sweep and its time,
click, snap, metal, burst, choke. The keys play the voices.
KICK
SNARE
CLAP
HAT
TOM
RIM
COWB
CYMB
Resample sources: play the last generation
SAMP
The resample as a sample
Start and length, one-shot, forward or ping-pong loop, reverse, pitch, fade and gain.
START · LEN
LOOP FWD / P-P
REV
PITCH ±24
GRAN
The resample as grains
Position, size, density and spray, random pitch and reverse grains, four window shapes, a freeze. Grain scatter
comes from a seed, so a render repeats exactly.
POS · SIZE · DENS · SPRAY
HANN TRI RECT EXP
FRZ
SEED
CHOP
The resample as slices
Transient detection cuts the resample; SENS decides how many slices. Map them to the keys or to the steps, and
play them in order, shuffled, stuttered or reversed.
SENS
SEQ SHUF STUT REV
MAP KEYS / STEPS
03 · Play
Chords with exact notes. Steps with their own length.
Three play modes: NOTE from the keys, SEQ as a 16-step line with slides and
probability, and CHORD: 8 steps, each holding up to 6 exact notes and its own length, from a sixteenth to
four bars. Press a key to add or remove a note; the chord name is recognized for you.
The sequence every new sound starts with · 120 BPM · GATE 90%27 bars of sixteenths = 6¾ bars
Step
Chord
Exact notes
LEN
Template
Per step: ROOT moves the whole voicing, TYPE fills it from 11 templates (MAJ, MIN, 7, MAJ7,
MIN7, SUS2, SUS4, ADD9, MIN9, DIM, 5), N1–N4 set single pitches, LEN runs 1/16, 1/8, 3/16, 1/4, 3/8, 1/2,
3/4, 1, 1½, 2, 3 or 4 bars, and GATE sets how long the notes ring inside the step.
Seven ways to strum.
TIME sets the gap between strummed notes (0–250 ms) and HUMAN adds timing and velocity
drift. Each picture below is step 1, Cm7, as the screen draws it.
04 · Modulation
One source. Four destinations.
Nine modulation sources: 6 LFOs and 3 envelopes. Each one reaches up to four
destinations, each with its own bipolar amount. A destination can be any knob on any page: an operator level, a
drum's pitch sweep, a grain position, a delay time, even another LFO's rate.
LEARN: point, don't scroll.
Destinations are generated from every engine's and effect's parameters, so the list is long. LEARN skips it.
Open LFO or ENV and pick the source with SELECT (L1–L6, E1–E3).
Press SEL. The next free destination waits: TURN A KNOB…
Go to any page and turn the knob you want to move. It becomes the destination; set its amount with
A1–A4.
Modulated knobs show a ~ next to their name. Modulation adds a delta on top of the knob, so the
recipe always keeps the value you set.
LFOSINTRISQRSAWRAMPS&HEXPSYNC 8/1 … 1/32FREE TRIG HOLD ONE HALFPHASEENVADSRLOOP OFF / LOOP / BEATVEL
05 · FX chain
Eight slots. Or let it scramble.
Signal runs from slot 1 to slot 8. Every slot has a type, four knobs, a wet mix, a bypass and MOVE,
because order changes the sound. On the FX page, SEL = SCRAMBLE: a random, wild chain with LFOs patched into
its knobs. Try it here.
SCRAMBLE
Type
Knobs
What for
DRIVE
DRV TONE BIAS OUT
Saturation, asymmetric with BIAS.
FOLD
AMT SYM PRE OUT
Wavefolding: bright, hollow, wild.
CRUNCH
AMT RATE HISS OUT
ADPCM-style grit and hiss.
BITS
BITS SR JIT OUT
Bit depth and sample-rate reduction with clock jitter.
FILTER
CUT RES TYPE DRV
A resonant filter in the chain, not only in the voice.
TAPE DLY
TIME FB HP LP
Delay with a tape's pitch bend when TIME moves.
REVERB
SIZE DEC DAMP GATE
Rooms to washes, gated if you like.
CHORUS
RATE DEP FB WIDE
Width and movement.
PHASER
RATE DEP CNTR FB
Sweeping notches.
RING
TUNE WAVE EXT KEY
Ring modulation, tuned or following the key.
RESON
TUNE DEC TONE CHRD
Resonators that turn noise into pitch, or a chord.
FREEZE
SIZE SPRY PTCH HOLD
Holds a moment and smears it.
SHIFT
PTCH FB WIN TONE
Pitch shifting, spiralling with feedback.
06 · Randomize, chaos, undo
Roll the dice. Hold to take it back.
One button acts on whatever page you are on. A tap rolls, another tap re-rolls, and holding it brings
back the sound from before the first roll. You can explore without fear.
SELRANDOM
RANDOMIZE
On the source page (EDIT): new engine settings. OP4 gets a new algorithm, ratios and envelopes with its
carriers kept audible; DRUM reshapes the selected voice; GRAN rolls a new seed. At high CHAOS, OP4 and ANLG may
even swap.
GLOCHAOS
CHAOS
How far RANDOMIZE and SCRAMBLE go. Every value moves toward a random target by the CHAOS amount, so low settings
nudge your sound and high ones replace it.
0% nudges100% total chaos
SELHOLD
Hold SEL = undo
Holding SEL for 0.6 s undoes the whole run of rolls, not just the last one. It works for RANDOMIZE and
SCRAMBLE alike. And since every roll comes from a seed, whatever you resample is in the recipe.
07 · Resample and the generation tree
Every resample remembers how it was made.
REC resamples from any page. The output of the whole chain is recorded as a new generation, a
child of the one you started from. With AFTER = FLAT, effects and modulation are cleared and the resample is
loaded as the source, ready to be bent again.
LOAD, EDIT, REBUILD.
On SAVE, pick a generation with SELECT and run an action with SEL.
LOADIts audio becomes the source. The next resample is its child.
EDITLoads the recipe that made it. Change something, resample, and a new branch grows next
to it. The original stays.
REBUILDRe-renders the path from G0 using recipes and seeds only. The result is
bit-exact, so the audio does not need to be kept.
rebuild pathanother branchGRIT PAD, an example sound
Resample settings, on HOME.
LENNOTE · 1 · 2 · 4 BAR how much to record
STARTGRID · FREE on the beat or right away
NORMON · OFF normalize the level
AFTERFLAT · KEEP clear FX and MOD, or leave them
TAILAUTO · 0.5 · 1 · 2 s let effects ring out
FMTPCM · ADPCM ADPCM: 4× the time, forward only
Why bit-exact matters: the FM‑1 has room for the recipes of every generation (stored as small deltas
against the parent) but for the audio of only a few. Everything is integer math, all randomness comes from seeds in
the recipe, and a shipped engine never changes how it sounds; a fix is a new engine version. So REBUILD gives back
the same bits, and you never notice the audio was not kept.
08 · Bank and tracks
64 sounds. Four tracks. One in focus.
The bank holds 64 sounds, each with its own generation tree. Four tracks each play one bank sound.
You edit one at a time, full screen, while the others keep playing as context.
Turn to choose.
ALGORITHM picks the track you edit. PRESETS picks which of the 64 sounds sits on it. Recipes
live in flash as deltas against their parent, so 64 sounds with many generations each fit in the FM‑1's own
memory.
T1 · 01INIT
T2 · 02GRIT PAD · editing
T3 · 05SUB BASS
T4 · 06BOOM KIT
GLO holds what the tracks share: BPM and CHAOS.
09 · Panel map
Every control, one job.
The FM‑1's labels stay; Veffbox gives them these meanings. The four knobs under the screen always
edit the lit row of the current page.
FM‑1 control
Veffbox
Details
EDIT
SRC: the source
SELECT picks the engine or resample source; the keys pick the DRUM voice. SEL = RANDOMIZE.
ARPSEQ
PLAY
ARP: mode and strum row. SEQ: the step row (chord or note of the selected step).
LFOENV
MOD
6 LFOs, 3 envelopes, 4 destinations each. SEL = LEARN.
FX
FX chain
8 slots, 13 types. SEL = SCRAMBLE.
HOME
Resample settings
LEN, START, NORM, AFTER, TAIL.
REC
Resample
From any page.
SAVE
Bank
The generation tree: LOAD, EDIT, REBUILD.
GLO
Global + CHAOS
BPM, and how far the random rolls go.
PLAY
Transport
Start and stop. Flash is only written while stopped.
SEL
Act on the page
RANDOMIZE on SRC, SCRAMBLE on FX, LEARN on MOD, resample on HOME, run the action on SAVE.
hold SEL
Undo
Takes back the whole run of random rolls.
SELECT
Engine, or the item on the page
The engine on SRC; the step, LFO, FX slot or generation elsewhere.
ALGORITHM
Track
Which of the 4 tracks you edit.
PRESETS
Sound
Which of the 64 bank sounds sits on the track.
KNOB 1–4
The lit row
Press the page button again for the next row.
OCT−OCT+
Octave
Shift the keys by an octave.
OCT−+OCT+ 5 s
UBOOT recovery
The way back if anything goes wrong.
10 · Status
Running on the FM‑1 today.
The emulator above is the firmware itself, compiled for the browser. It is portable integer C,
tested on a computer before it reaches the hardware, and installed on an FM‑1 from the page below.
Firmware 0.3.2
Running on hardware today
Measured on a real FM‑1: a strummed OP4 chord sequence through a scrambled FX chain peaks at 45% CPU,
with no late audio buffers.
SourcesOP4, ANLG, DRUM, and SAMP, GRAN and CHOP playing the resample
Playkeys, a 16-step line, or a chord sequence with exact notes and seven strums
MOD6 LFOs and 3 envelopes, 4 destinations each, LEARN
FX8 slots, 13 types, SCRAMBLE; hold SEL to undo
RESAMPLEthe resample becomes the source; generations are saved to flash
REBUILDre-renders a generation from its recipe, bit-exact
M0Mockup doneEvery page, every button, the bank tree, designed before the firmware.
M1Portable core doneSix engines, 13 effects, modulation, the player, flash formats. Host tests for repeatability and overflow.
M2Platform doneMNM-1's hardware layer, loader and tools; its own identity, FM-1_62000100.
M3UI on the device donePages, rows, SELECT and SEL, RANDOMIZE and SCRAMBLE with undo, LEARN.
M4RESAMPLE doneThe chain renders into RAM (1.67 s); SAMP, GRAN and CHOP play it.
M5Bank done64 sounds and their generations in flash, LOAD, EDIT, REBUILD.
M6In the browser doneThe firmware as WebAssembly: the emulator and the step-by-step guide at the top of this page.
M7NextFour tracks sounding at once, PITCH as a modulation target, longer resamples, sidechain and spectral effects.
11 · Install
Put it on your FM‑1.
Over the FM‑1's own USB cable. The update path is the same as MNM-1's, so a Veffbox image can always
be replaced with the normal installer.
Firmware 0.3.2
Web installer
One button, in Chrome or Edge on a computer. Connect the FM‑1 with a USB data cable and keep the page open
until it says Done.
M-VAVE's own updater puts the official FM‑1 firmware back.
If something goes wrong
Hold OCT− and OCT+ together for 5 seconds: the FM‑1 goes into UBOOT, its recovery
mode, and takes a new image from there. A build that keeps crashing in its first 30 seconds drops into UBOOT
by itself.