The Firmware Hub · FM-1 · DUELL

DUELL1.2
A MULTIMORPHING bitimbral synth: two complete parts, three ways to play them together, and a morph that glides between two versions of every sound. Ten engines including wavetables, twin filters, effects and a mod matrix. Layer, dual or stereo mode. Velocity sensitivity and aftertouch. Dual core.
Text by the maker.
About it
- Engines
- 6-op FM / DX7Analog / VAWavetablePhysical modellingChip / retroOrganVoice & speechIts own: ANALOG · FM6 · PHASE · LOFI · VOICE · TRIO · WHEEL · PHYS · NOISE · WAVE
- Runs on
- FM-1 · Browser ↗
- Release
- 1.2 · released 10 Nov 2026 · on the hub since 13 Oct 2026600 KB · what's new
- Licence
- GPL-3.0 · source ↗ · copy on the hub
- Flash chip
- Every FM-1, the newer chip
0xB36014too - Identity
FM-1_901what it reports over USB while it runs- Build
- Built by its maker, not signed
- Popular
- ↓ 164 installs via the hub · ★ 21 on GitHub
Ratings
More by OSCILL/R
Like DUELL






Changelog
What changed, version by version8 versions
DUELL 1.2
An update for the M-VAVE FM-1. Up to 16 voices a part from one shared voice pool over both cores, and it works with newer FM-1 units.
- New: one shared pool of voices for both parts over both cores; the limit of 8 voices a part is gone (up to 16 a part, FM6 up to 12, 6 while the TWIN FILTER is COMB, VOICE no longer held to 4); the number on the screen is what really plays.
- New: each part's AVAILABLE VOICES shows how many more notes that part can play right now and drops when the other part plays; a key on a part that shows 0 takes the oldest note of the part that holds more.
- Fixed: no crackle when chords start, when knobs or MIDI CCs move or when the MORPH fader moves; WAVE chords in CHORD mode play clean; ANALOG clicks on loud parts; a rare WHEEL freeze with 8 voices; the panel lights stay on during saves; FM6's OP pages come right after the EDIT pages; updated SCALE and CHORD keyboards; UI improvements (two-digit voice numbers in the header, a steady voice number with the arp, lines under each parameter, text on its baseline).
- Fixed: newer FM-1 units with the UC25HQ80 flash chip can save and update; the installer finds any FM-1 whatever its MIDI port is called; other FM-1 firmwares can be installed from DUELL.
- Install: save a backup, use the installer page, and make a new backup with 1.2.
DUELL 1.1
An update for the M-VAVE FM-1. The whole user interface is redesigned, so you see more at a glance, and PERFORM, STRUM and MORPH have new things to play with.
- New: the whole user interface is redesigned; the part marker in the header shows the available voices in POLY and M, L or U in MONO, LEGATO and UNISON; the quick pages GLO, SEQ, REC, ENV, LFO and EDIT look and behave the same in PERFORM as outside it; the matrix and the CYCLE, SUB and TWIN MOD cards show each value as it sounds at the current morph position, and matrix names are written out in full.
- New: STRUM on the CHORD page (OFF, or 1 to 100ms between the notes of a chord, saved with the patch); on the PERFORM page the SELECT knob is the balance between the two parts; SPLIT starts on the middle key.
- New: MORPH: ROLL is chained (each roll continues from the sound that end has now, UNDO goes back up to two rolls), End B is saved and loaded exactly as it sounds, the SMART and WILD randomizers are reworked.
- New: parameter locks are recorded by turning any knob while REC is armed, with a PARAMETER LOCKS list; TRANS + and TRANS - move a whole pattern by a semitone, SHIFT < and SHIFT > move it in time; swing runs from 50 to 75 percent.
- Install: save a backup, use the installer page, and make a new backup with 1.1.
DUELL 1.0
The first full release: everything of the 0.2.33 test beta, named 1.0 (no beta label on the unit, in the installer or in the editor). The firmware code is the one of the 0.2.33 test build T0233 apart from the version strings and one change: the release build runs part 2 on the second core by default.
- New: part 2 plays on core 1 from every power-on, with the automatic fallback to one core (a start that fails, a misread, a stall or a crash leaves that session or the next start on one core). The release build has no BENCH menu, no TEST screen and no USB serial console.
- What 1.0 is: the owner's 128 factory patches (levelled by TRIM, #25 DRIVEN SAW new), the owner's 15 factory multis with a MORPH End B rolled by the firmware's own ROLL B, one list of 32 patterns, the MULTI and TWIN filters, the update screen while the firmware installs (DUELL, WRITING, percent, a 20-segment bar, DO NOT SWITCH OFF), KEY VELOCITY (off by default) and AFTERTOUCH (on).
- Install: the package is
duell-1.0.fwsc(identity FM-1_901); back up first, then use the installer page.
DUELL 0.2.33 beta
A test beta (not 1.0): the 0.2.32 line with the owner's multis, a new lead, level balance, a loader screen while the firmware installs, and the installer and editor notes cleaned up.
- New: while the firmware is written the unit shows the DUELL screen: the DUELL word over the splash's wave lines, WRITING, the percent, a bar of 20 segments and DO NOT SWITCH OFF (the update loader draws it; if the panel does not answer, the loader writes exactly as before). The factory multis M01 to M05 and M08 to M15 are the owner's records; M01 to M15 have a new MORPH End B (the firmware's own ROLL B, fixed seeds). New patch #25 DRIVEN SAW (an aggressive twin-filter lead) replaces CROONER.
- Changed: the levels of the factory multis are balanced by TRIM (both parts of a multi by the same dB); #65 ARP PLUCK is one step quieter. The patches FUNFARE to PIXEL HERO are now #26 to #33 (one higher). The installer has one plain notice about installing at your own risk; the "saves may change" notes are gone.
- Compatibility: the VOICE engine's factory sounds were renumbered after CROONER left (a saved patch of VOICE number 2 or higher may show another sound). Back up first.
- Install: the package with the loader screen is
duell-0.2.33-beta.fwsc; a package without it (same sources, DUELL_LOADER_SCREEN=0) has the name ending in-noscreen.
DUELL 0.2.32 beta
A test beta (not 1.0): the new factory bank, one list of 32 patterns, the MULTI and TWIN filter names, TWIN OFFSET in semitones, true plus and minus 100 percent.
- New: the 128 factory patches are the owner's bank (levels balanced by TRIM alone); every patch stores and recalls its own arp (OFF too) and chord keys; one list of 32 patterns P01 to P32 (none empty, ERASE gives a slot its default back); the editor reads the 32 slots; the BLEND card shows MULTI / BOTH / TWIN; the TWIN CHAIN flow strip (two branches in PARALLEL); the menu lines KEY VELOCITY (OFF by default) and AFTERTOUCH (ON by default); the ENGINE selector is the first line of the ENGINE tab; the installer says "Done. Switch the unit off and on once."
- Changed: the two filters are called MULTI FILTER and TWIN FILTER everywhere; TWIN OFFSET is in whole semitones (-36 to +36) with LINK on; a depth at +63 acts as 100 percent (matrix amounts and the direct depth cards ENV / LFO to PIT, FLT, SHP and TWIN ENV 2 / LFO 1 / LFO 2; 0 and the negative side are unchanged); the matrix destinations DEPTH and DEPTH 2 are hidden (a stored route still plays).
- Compatibility: pattern objects changed format (PTS3): older saves with 16 pattern slots are refused once and the unit starts with the new bank and the 32 default patterns. Back up first.
DUELL 0.2.31 beta
A test beta (not 1.0): the 0.2.30 line with the factory patches refined, the owner's BEHIVE and WOOD & SKIN, the SUB harmonics switched off and the editor's save form fixed.
- New: the factory patches use the twin filter (both filters), the CYCLE envelope, the matrix and the effects where they fit, with their names and ideas kept (list: PATCH_REVIEW.md, "Refinement pass"); aftertouch goes to many different places (no destination on more than a fifth of the patches); #1 is the owner's BEHIVE; M15 WOOD & SKIN is the owner's multi; #30 HAN SOLO is 2.4 dB louder.
- Changed: SUB OSC HARMONICS is disabled for now (it did little on the sine and glitched): the HARM card is gone from the SUB OSC page (WAVE, OCTAVE, LEVEL) and from the editor, the stored value is never played, the id stays reserved, nothing in the stored formats changed; no factory patch has a value. KEY VELOCITY stays OFF by default.
- Fixed: the editor's PATCHES save form follows the clicked patch (no slot pre-selected, Save stores the selected patch, a second click deselects).
DUELL 0.2.30 beta
A test beta (not 1.0): the full new synthesizer in one line. The cloud line (twin filter, MIDI map, SUB layer / CYCLE / WAVE STEPS, editable End B, key velocity, ANALOG / TRIO / NOISE on the multimode filter, LOFI / BITS) joined with the click fixes (smooth master volume, no seam steps in PHASE's attack, no steps at re-strikes, INSERT and WAVE glides).
- New: KEY VELOCITY (MENU > CONTROL, default OFF: pressing a key hard makes it very quiet, to be measured; the keys' velocity and aftertouch; converter word 0x204F). The MASTER knob's top is 0 dB (the level the old default position gave); there is no gain above it.
- Fixed: a rolled End B of ANALOG or TRIO could nearly silence a sound (a closed or misplaced filter 1): the roll keeps filter 1's cutoff steering and band window again; the bench's per-test reset now also clears filter 2's per-voice drift state.
- Removed: USB LEVEL (USB audio is always at the fixed level).
DUELL 0.2.25 beta
Everything since the published 0.2.20, in one section: sixteen factory multis (the owner's edited ones among them) and twelve reworked factory sounds, a stereo WIDTH, a MASTER page with BASS MONO, the global effects on the GLO button with a master compressor (COMP), quick LEVEL and PAN with the mutes on the OCT keys, a stereo chorus, KEY TRK and a second MULTI FILTER page, a SEND FX page, an EQ switch, a packed mod matrix, an engine change that keeps the sound, the delay modes in DUEL, the sidechain's MIDI setup as a setting of the unit, MASTER TUNE in Hz, a reverb low cut that reaches 2 kHz, a multi load that leaves the master alone, a RENAME in the SAVE dialog, a cheaper SHIM and a load bench for the developers. Since the 0.2.24 test build: a part EQ that costs a third on the unit and an EQ HIGH band that works, an overload guard, WAVE SUB and DTN without a zipper, no click at the filter's open end, and a larger round in the web editor. Removed: the master saturator and SHIM's PITCH BOTH. (The 0.2.21 to 0.2.24 builds were test builds only; this section holds everything since 0.2.20.)
- Overload guard. When the processor is near its limit (two audio blocks in a row over 85 %), the delay's RANDOM or OCT UP mode plays as the plain delay, faded over about 12 ms. When the CPU bar has stayed under 70 % for about 3 s, the events fade back in. Automatic and always on; nothing is saved and nothing changes below the limit. ABOUT shows LIGHT FX while it is on. In the host model it takes about 5 points off M16 STRESS TEST in LAYER and about 9 in DUEL.
- WIDTH, the master stereo width (a page of the GLO button, right before BASS MONO). One knob, K1 WIDTH, 0 to 200 %. 100 % is the default and means off: the stage is not run and the sound is bit for bit what it was. Below 100 % the mix gets narrower, 0 % is mono; above 100 % it gets wider, 200 % makes the side twice as loud.
- The bass stays where it is. Wider only acts above 125 Hz (a 12 dB/octave crossover), so the low end is never made wider. Narrower acts on everything, the bass too. BASS MONO comes after WIDTH, so when it is on, the low end below its corner stays mono whatever WIDTH does.
- Mono stays the same. Only the side (the difference of left and right) is changed, never the middle: the mono sum of the mix is exactly what it was at every setting, and a mono sound stays mono.
- No click: a turn glides over about 23 ms.
- Both: in the chain after the effects, SPACE and PERFORM: WIDTH, BASS MONO, COMP, then the MASTER volume, the limiter and the soft clip. The GLO pages follow that order: TEMPO, CHORUS, DELAY 1/2, DELAY 2/2, REVERB, SHIMMER (with TYPE SHIM), WIDTH, MASTER (BASS MONO), COMP, MODULES, SIDECHAIN, MIDI, MIDI LEARN. STEREO and LAYER only: in DUEL (part 1 left, part 2 right) WIDTH and BASS MONO do not run, their cards are not shown, and the page says NOT IN DUEL MODE and why. WIDTH belongs to the unit like COMP: kept when you power off, not saved in a patch, a multi or a project, and a load does not change it; ERASE DATA resets it. Not learnable by MIDI LEARN, not morphed. Editor: WIDTH is a card of the MASTER group of the GLOBAL tab (setting 42).
- Cost (host instructions a sample, 33 = 1 %; the device reads about 0.75 to 0.9 of it): WIDTH about 38 (1.2 %), nothing at 100 %.
- Load bench (for developers).
./host_tests.sh benchprints one table of what the processor pays for each engine's voice, each INSERT type, SAT, EQ, DUCK, each reverb type, delay mode, the chorus (in STEREO and in DUEL), the master stages, and a worst-case scene per MODE with the estimated number of voices a part before 100 %. It fails only when a figure grows more than 10 % over the stored baseline. See [docs/TESTING.md](docs/TESTING.md). - All sixteen MULTI slots hold a factory multi. Fifteen are music, sorted so related ones sit together: M01 REESE SWAMP, M02 NIGHT ORGAN, M03 PAD SPLIT, M04 DUB CHORD (bass grooves and splits); M05 WHISPER TIDE, M06 TINE STRINGS, M07 FINAL REEL, M08 HAZY TENSOR (pads and layers); M09 ACID ETHER, M10 WIRED SNAIL, M11 EERIE SIGNAL, M12 DEAD BUFFER; M13 COLD CHAPEL, M14 GARGLE ACID, M15 WOOD & SKIN (for performing); M16 STRESS TEST. NIGHT ORGAN, PAD SPLIT, DUB CHORD, WHISPER TIDE, TINE STRINGS, HAZY TENSOR, ACID ETHER, DEAD BUFFER and GARGLE ACID are the owner's multis, byte for byte as he saved them (M02 to M06 from his backup of 2026-10-17). No tribute remains (BASILDON is spare). They use all ten engines, splits (NIGHT ORGAN, PAD SPLIT), MORPH, the ducker and the arps. The splits are applied when MULTI LOAD is set to SETS MODE; with KEEPS MODE (the default) every multi also plays in LAYER. Three multis made for 0.2.23 (VELVET TINES, SEVENOAKS and a drone) left the sixteen to make room; their records are kept as spare data (
felucca-base/tests/scenes/spare/, listed intools/factory_multis.pySPARE) and can come back. - M07 FINAL REEL is the owner's refined version. Same two sounds (#58 BRASS PAD + #54 STRING MACH), LAYER, 71 BPM; he reworked the sounds' settings in the multi, the effects and the XFADE, and the keys no longer latch (HOLD OFF); imported byte for byte from his multi file (the importer reads the editor's MULTIS file now, tools/import_owner_edits.py).
- M08 is the owner's HAZY TENSOR (#3 LADDER BASS + #20 GEARBOX, LAYER, 117 BPM), byte for byte from his multi file. It replaces MONO DUEL (the owner: "Mono-dual is out"), which was the only factory multi in DUEL: no factory multi uses DUEL now. MONO DUEL's record is kept as spare data (
felucca-base/tests/scenes/spare/M08_MONO_DUEL.bin, listed intools/factory_multis.pySPARE) and can come back. The other multis are unchanged. - M16 STRESS TEST is a test, not music: the two heaviest sounds with every stage on, so you can hear how many notes your unit takes before it clicks (docs/TESTING.md). It is set so that one key plays on the unit: the FLANG insert and SAT are on the whistle, the three-band EQ and the ducker on the pad, the pad's 1/16 arp has GATE 71 and a short release (REL 47), 24 dB filters on both, chorus, RANDOM delay at CHANCE 71 %, SHIM PITCH UP with MOD 51, LAYER, 137 BPM. Host model: 1 key 63 %, 2 keys 79 %, 3 keys and more 95 % (DUEL 72 / 87 / 104 %), so every unit should play one key and show its limit at two or three; the overload guard (below) takes about 5 points off in LAYER and 9 in DUEL. It can be overwritten; ERASE brings it back.
- COMP, the master compressor (a page of the GLO button, right after MASTER). A compressor on the whole output, for gluing the mix and taming loud peaks. The page has four knobs: K1 THRESH (-40 to 0 dB, default -17), K2 RATIO (1:1, 1.5:1, 2:1, 3:1, 4:1, 6:1, 8:1, 12:1, INF), K3 ATTACK (0.1 to 100 ms in 40 steps a decade, default 10) and K4 RELEASE (20 ms to 2 s in 40 steps a decade, default 200 ms).
- Off by default, and then it costs nothing. RATIO 1:1 is the default and means the compressor is not run at all: the sound is bit for bit what it was (every factory multi renders the same). At 1:1 only the RATIO card is shown, because THRESH, ATTACK and RELEASE have nothing to act on; turn RATIO up and they appear.
- The makeup gain is automatic. It is worked out from THRESH and RATIO: a level of -8 dB comes out as loud as it went in, quieter signals are raised a little, louder ones are brought down. So switching it on does not make the music louder: a signal at the limiter's threshold is never louder out than in, and in the three demo pieces the average loudness stayed within 1.3 dB of the uncompressed render. The makeup is at most +12 dB.
- How it works. One compressor for both channels (the left and right are squeezed together, so the picture does not lean), a fixed soft knee of 6 dB, a peak detector with a hold of about 12 ms so a bass does not make it ripple, the gain updated every 0.18 ms. The times are the detector's time constants: ATTACK is the time to cover 63 % of a step up, RELEASE of a fall (the hold included); the test measures the times against what is printed. The dB of THRESH are those of the output with the MASTER knob at its default; MASTER itself is a volume after the compressor and does not change what is compressed.
- Where in the signal path: after the effects, SPACE, PERFORM, WIDTH and BASS MONO before MASTER, the limiter and the soft clip. USB audio gets it too.
- STEREO and LAYER only. In DUEL (part 1 left, part 2 right for an external mixer) a linked compressor would pump part 2 from part 1, so it does not run there and its cards are not shown. The values are kept for when you go back.
- No click. Switching between 1:1 and a ratio fades over 15 ms, and a changed THRESH or RATIO glides.
- It belongs to the unit, not to a multi. The settings are saved with the unit's other settings (device-wide, about 2 s after the last turn); a multi, a project or a patch does not hold them, and loading one does not change them. ERASE DATA resets it to 1:1. It cannot be learned by MIDI LEARN or morphed.
- Editor: a COMP card on the GLOBAL tab, in the same MASTER card as BASS MONO (the settings 34 to 37; it hides THRESH, ATTACK and RELEASE at 1:1, as the unit does). The editor cannot see the mode, so it keeps showing the card, with a note that the unit does not use it in DUEL.
- Cost: about 53 host instructions per sample while it runs (about 1.6 % of the model CPU, about 1.2 to 1.4 % on the device by the usual rule), nothing when RATIO is 1:1.
- Not built yet: an OTT-style mode (a second, lower threshold that also lifts quiet parts) can be added later; the gain computer is written so it can take it.
- KEY TRK on the multimode filter. The cutoff follows the note you play. KTRK goes from -100 % to +100 %, 0 by default (off). At +100 % the cutoff moves one octave for every octave of pitch, around MIDI note 60 (the same centre as the KTR on ANALOG's own filter); at -100 % it moves the other way. It is part of the sound: it is saved in patches, multis and projects, can be automated and learned by MIDI LEARN, and it rolls with the other filter values when you morph (it never switches the filter on by itself).
- 0 is exactly the sound as before (bit for bit): every factory sound and multi plays as in 0.2.20. A sound load sets KTRK to 0.
- With CUT at the open end, a KTRK above 0 closes the notes below C3 (their cutoff falls under the top); the notes above stay open.
- Cost: one multiply and an add per voice and block while KTRK is not 0, nothing at 0. The package is the same size.
- Stored: on id 27, the old QNT's (retired on 2026-10-12; nothing read it).
P_COUNTstays 127. A sound saved while QNT still existed and with a QNT above 0 reads as a few percent of KEY TRK. - MULTI FILTER 2/2. The multimode filter has two pages now: MULTI FILTER 1/2 is as before (CUT, RES, MODE, SLOPE) and 2/2 has four knobs: K1 KTRK, K2 ENV 2, K3 LFO 1 and K4 LFO 2: how much ENV 2, LFO 1 and LFO 2 move the cutoff. There is no AMP ENV card here (envelope 1 is the amp envelope; the filter takes no depth from it by default; AMP DEST keeps its own FLT card). A depth connects two modules, so it is reachable at both places and it is one stored value: these are the same values as the FLT cards on ENV 2 DEST, LFO 1 DEST and LFO 2 DEST, and those cards are drawn on every engine. On the engines where the routes drive the multimode filter (PHASE, LOFI, VOICE, WHEEL, PHYS, FM6, WAVE) MULTI FILTER 2/2 shows them as well. On ANALOG, TRIO and NOISE they drive the engine's own filter, so there they are on the DEST pages only and 2/2 shows KTRK alone. QUICK MULTI is unchanged (CUT, RES, MODE, REL).
- Editor: the ENGINE tab's MULTI FILTER card has KTRK, and the three amounts ENV 2, LFO 1 and LFO 2 on the engines above; the MOD tab keeps them too. A SIDECHAIN card is on the MIDI tab of the GLOBAL column (see Changed).
- New last FX page, SEND FX. It shows what the delay and the reverb are set to, and a CHORUS card. Only the selected part's badge is lit. K1 CHORUS (the label only), K2 DELAY the mode with the time under it (for example RAND, 1/8), K3 REVERB the type with the size under it (for example PLATE, 71 %), K4 has no card. No send levels are shown: those are on the FX page. The cards are always there: when the selected part sends nothing to that effect (its send is 0, or MODULES SENDS OFF) the value is dim and the small line says INACTIVE. The delay shows its mode in DUEL too. Turning K1, K2 or K3 either way jumps to the CHORUS, DELAY 1/2 or REVERB page of GLO; no value changes, and the rest of the same turn is ignored for a moment so it does not move the first card of the page you land on.
- RENAME in the SAVE dialog. When you hold SAVE and the dialog asks "OVERWRITE #NN <name>?", turn knob 2 (the hint line says K2 RENAME next to K1 OTHER SLOT): the NAME screen opens with the sound's name. OCT+ there returns to the dialog, which now reads WITH <new name>; OCT+ in the dialog saves the sound into the slot under that name; OCT- anywhere drops it. Not offered with TARGET BOTH (two sounds).
- Hold GLO: LEVEL 1, PAN 1, LEVEL 2, PAN 2. The pan of each part can be set from the panel now. The mutes moved to the keys: with GLO held, OCT- mutes or unmutes part 1 and OCT+ part 2 (no octave change from that press); the two cells say LIVE or MUTED and name the key.
- A MASTER page (GLO, after WIDTH): K1 BASS MONO, its one knob. BASS MONO is a setting of the unit now, ON at 200 Hz on a new unit (it was off, and it was saved with the project); a multi or a patch never changes it.
- A third colour for the global pages. TEMPO, CHORUS, DELAY, REVERB, SHIMMER, WIDTH, MASTER, COMP, MODULES, SIDECHAIN, MIDI and SCALE draw their values and gauges in a colour of their own (amber on VIOLET and COBALT, teal on ORANGE, violet on MINT, deep teal on PALE, orange on OCEAN, yellow on HI-CON), on the LAYER background, with both part badges lit as before. ALGORITHM does nothing on those pages (it used to switch the colour and nothing else). The editor's global column uses the same colour.
- EQ ON / OFF as the first card of EQ 1/2 (then LOW, MID, HIGH; EQ 2/2: LO HZ, MD HZ, Q, HI HZ). OFF hides the bands and runs no EQ code; switching off while a note sounds does not click. Every saved sound reads ON (its bands as they were).
- DUCK SRC OFF. A new sound's ducker starts at OFF and shows only SRC; PUMP, PART or MIDI bring their cards. The SIDECHAIN page lists each part's source.
- The MOD MATRIX stays packed. A slot whose SRC is set to OFF (on the unit or in the editor) lets the slots after it move up, in their order; a sound with gaps loads packed; the second matrix page is in the round only while slots 1..4 are all used. The sound does not change (the slots are summed in order).
- An engine change keeps the sound. Switching the engine (EDIT > ENGINE K1, or the editor's engine list) keeps the envelopes, filter, LFOs, matrix, FX, arp, mixer and the slot the sound came from; only the engine's own eight controls change (the ones the two engines share, such as CUT, RES, DTN, carry over; the rest start at their defaults), and switching back brings the engine's own eight back. INIT SOUND still resets everything to the engine's first sound.
- COMP ATTACK and RELEASE in fine steps: 40 a decade (0.1 to 100 ms, 20 ms to 2 s); the defaults 10 ms and 200 ms sound as before.
- SEND FX says what it is: under the cards, which effect is INACTIVE for the part (its send is 0) and TURN = JUMP TO SETTINGS.
- Editor: every bipolar control (PAN, the depths, KEY TRK, WIDTH, BALANCE-like ranges) draws its fill from the middle; the slider fill is the editor's own bar.
- Tests: the quick reset over every page and knob and under a live morph, PAN smoothing, EQ switch, packed matrix, engine change, every slider dragged in headless Chrome.
- Owner edits into the factory set (for the developers; the owner's guide: [docs/OWNER_REFINE.md](docs/OWNER_REFINE.md)).
felucca-base/tools/import_owner_edits.pyreads the Backup page's file and the PATCHES tab's patch file and writestools/owner_sounds.py(the saved patches that differ from their factory sound, in the form oftools/duell_sounds.py, each replacing the factory sound of its slot) andtools/owner_multis.pywith the saved multi records intotools/factory_multis/(kept byte for byte, markedowner). The build reads both (gen_duell_sounds.py with_owner,factory_multis.py apply_owner). The importer refuses with a reason what it cannot take (a slot holding another engine's sound, a name another sound has; an FM6 operator patch and SEQUENCER steps are left out, the values taken), merges with an earlier import, drops an entry that equals the recipe sound again (undo), and with--auditruns the sound audit and the multi check as a report; it never changes a value of his. The testtests/owner_import_test.py(./host_tests.sh ownerimport) saves every factory sound as the unit does (tests/owner_export_gen.c), imports the file and expects the factory data back unchanged; three turned knobs change exactly three sounds; a changed multi in a backup file is kept byte for byte. - Docs: "CPU on the unit" (docs/TESTING.md): how to read the CPU bar and the TEST screen, why the unit reads higher than the host model on scenes heavy in PHYS, SHIM or the RANDOM delay (a count of the device code: the chip has no 64-bit multiply; the effect code runs from the flash through the cache; an estimate, not a measurement), where 0.2.23's M16 cost went by stage, and the safe polyphony. Also in KNOWN_ISSUES.
- Editor round (the web editor). Plain words everywhere, a reason wherever a control is hidden, UNDO, BYPASS, INIT, the FM6 voice editor, multis and patterns as files, the patch category.
- Every control spelled out, with a tooltip. VOICES (POLY, MONO, LEGATO, UNISON), NOTE PRIORITY (LAST, LOWEST, HIGHEST), VOICE ALLOCATION (ROTATE, REUSE), GLIDE MODE, GLIDE, STEREO SPREAD, UNISON DETUNE, ENVELOPE SYNC, ATTACK / DECAY / SUSTAIN / RELEASE, PITCH / FILTER / SHAPE DEPTH, PATCH LEVEL (TRIM), the engine controls, the cards and tabs. One table to revise:
web/editor/labels.js. The unit keeps its short labels. - A hidden control says why in its place (for example "NOTE PRIORITY: only with MONO, LEGATO or UNISON", "ATTACK: the operators have their own envelopes").
- VOICE: what is not heard is hidden. NOTE PRIORITY needs MONO, LEGATO or UNISON; VOICE ALLOCATION needs POLY with GLIDE at 0; UNISON DETUNE needs UNISON; GLIDE MODE needs GLIDE above 0; STEREO SPREAD needs POLY or UNISON. The table, read from the firmware: docs/VOICE_CONTROLS.md.
- UNDO of the last edits (a button per part, Ctrl+Z / Cmd+Z for the newest): a drag is one step, a card's reset is one step; loads and stores are not undone.
- Defaults on every card: its controls back to their default values (one UNDO step).
- Init patch... on each part: the engine's basic sound, as the unit's SAVE > TOOLS > INIT SOUND (or the ENGINE page's 4th knob). The mixer level, pan, mute, arpeggiator and pattern stay.
- BYPASS on SATURATION, SENDS, INSERT, EQUALIZER, DUCKING (each part), CHORUS, DELAY, REVERB (both parts' sends) and the master stages, and DRY (all effects off) at the top of the GLOBAL column: it remembers the values and puts them back. Existing parameters only.
- The MASTER group: COMPRESSOR, BASS MONO and STEREO WIDTH each in a card of their own, with what it does, ON / OFF, and the line that they are not used in DUEL.
- FM6 voice editor (ENGINE tab of an FM6 part): the six operators (frequency ratio / fixed, coarse, fine, detune, output level, velocity and amp-modulation sensitivity, rate scaling, the envelope's four rates and levels with a picture, keyboard level scaling), the algorithm with a picture of how the operators connect, feedback, key sync, transpose, the pitch envelope and the LFO. An edit is heard at once; the part then plays its OWN voice (stored with the patch when you store it). VOICE SOURCE explained (factory voice F1..F11, OWN, voice bank B1..B32). Import of a DX7 .syx voice into the part, download of the voice as .syx.
- WAVE: the card WAVETABLE NOW PLAYING (a factory table, or USER 1..3 with its name or EMPTY), Import wavetable from WAV file..., and an EMPTY user table can no longer be picked in the list.
- PATTERNS tab: the 16 pattern slots: recall into a part, store a part's pattern, rename, clear, download and import as files ("duell-patterns").
- MULTIS: Download file (one or all stored multis, "duell-multis") and Import multi file into a slot. The words say where things go: Store / Recall = the unit's memory, Download / Import = a file on the computer.
- PATCHES: the CATEGORY of a stored patch can be changed (and chosen when storing); the list filters by category, engine and name; Import DX7 .syx bank... has its own button.
- FILTER MODE, a new matrix destination. A route can now move the multimode filter's MODE, from LP through BP to HP (DEST card FMODE, the line says MULTI FILTER MODE; the editor's list says FILTER MODE). It is in the list right after FRES. It works on every engine, also with the filter's CUT open (a MODE above LP runs the filter there). Stored as destination 46, after the others.
- The layout round (the owner's decisions on the layout proposal).
- MIXER is the first page of the GLO button again: K1 LEVEL 1, K2 PAN 1, K3 LEVEL 2, K4 PAN 2, both parts' cells and the level meters, the same as holding GLO. Each cell always reads MUTE and is lit in the part's colour while the part is muted (no LIVE / MUTED words); the mutes stay on OCT- / OCT+ with GLO held. HOME's MIXER page is gone (its SPACE knob was a copy of PERFORM's K2): HOME goes round MORPH, MORPH SET, MODE.
- STEREO MASTER is one page for BASS MONO (K1) and WIDTH (K2), where the pages WIDTH and MASTER were. COMPRESSOR (was COMP): K1 RATIO with OFF as its lowest value (turning it up switches the compressor on), K2 THRESH, K3 ATTACK, K4 RELEASE.
- EQ without its ON / OFF switch, each band's frequency before its gain: EQ 1/2 LOW FREQ, LOW GAIN, MID FREQ, MID GAIN; EQ 2/2 MID Q, HIGH FREQ, HIGH GAIN. A band at 0 dB costs nothing, as before.
- Pictures instead of the scope: the EQ curve, the compressor's curve with a bar of what it takes off right now, the STEREO MASTER picture (mono below BASS MONO, the width above), the filter's response on both MULTI FILTER pages and the VCF, the arp's pattern on ARP 1/3 and 2/3, and the envelope or LFO curve on the DEST pages. They are drawn only when a value changes.
- Names: a label too long for a card takes two lines (PATCH / LEVEL, BASS / MONO, LOW / FREQ ..., PART 1 / CH on SIDECHAIN and MIDI, WAVE / SHAPING and SHAPING / ENV on PHASE); TRIM is shown PATCH LEVEL everywhere; the arp's PROB is CHANCE, the shimmer's MOD is DRIFT, the delay's MDEPTH is MOD (CHANCE in RANDOM and OCT UP). UNISON DETUNE shows only in UNISON, SPREAD not in MONO or LEGATO.
- Editor: each part column starts with its MIXER block (LEVEL, PAN, one MUTE button lit when muted), then a PATCH block (the slot and name, ENGINE, Patches..., Init patch..., PATCH LEVEL, the slot's category when the editor knows it); the GLOBAL tab's mixer card is gone. The EQUALIZER card has one BYPASS (the gains to 0 dB, brought back on the second press), hides its values while bypassed and draws the curve; STEREO MASTER and COMPRESSOR follow the unit, each with its picture. A long label breaks into two lines and its value stays beside it; no word twice on a card (SATURATION: DRIVE; SENDS: CHORUS, DELAY, REVERB; DELAY: MODE, TIME, MIX; DUCKING: SOURCE, DEPTH, ATTACK, RELEASE).
- The part EQ costs about a third on the unit. Its filter is rewritten for the unit's processor (32-bit multiplies instead of 64-bit ones): about 32 instructions a sample a band instead of about 85. It sounds the same, within 1 LSB of an ideal filter. A quiet tail now ends in exact silence.
- Only the EQ bands you use run. A band at 0 dB costs nothing; with only LOW set, only LOW runs. A band turned to 0 rings out over 23 ms instead of stopping at once.
- SHIM's PITCH is UP or DOWN. BOTH is gone (owner, see Removed).
- The owner's edited multis M02 to M06 are the factory multis. M02 NIGHT ORGAN, M03 PAD SPLIT (its part 1 is #61 EVOLVING PAD; it was #19 PLUCK BASS), M04 DUB CHORD, M05 WHISPER TIDE and M06 TINE STRINGS (#54 STRING MACH + #83 TINE ROOM) are the records he saved on his unit, taken byte for byte from his backup; no value was changed. M06 was COLD CHAPEL in the 0.2.24 test build; the multi made for 0.2.23 that was called TINE STRINGS is called VELVET TINES now (a spare, not built).
- The owner's original COLD CHAPEL is a factory multi again, in M13 (#61 EVOLVING PAD + #56 SINGING BOWL, 71 BPM; the 0.2.22 record byte for byte). It took the slot of BASILDON, the multi least different from the others by the generator's similarity measure (BASILDON is spare data now and can come back); M01 to M06 are untouched. The descriptions of the owner's edited multis M02 to M06 are deleted in the docs and the generator's data (names, parts and tempos stay).
- Loading a multi sets its own mixer levels and its effects, and leaves the master alone. A multi load sets each part's LEVEL, PAN, MUTE and sends and the effects the multi stores (chorus, the delay with its MODE, TIME, FDBK, COLR, SPREAD, MRATE / MDEPTH or CHANCE, the reverb with TYPE, SIZE, DAMP, LOCUT and the SHIMMER PITCH and MOD), whatever the levels were before. It never touched the MIDI settings, the clock source or TUNE, and it still does not. BASS MONO is no longer part of a multi: it is a master effect, a setting of your unit, so a load leaves it as it is and a save does not store it (a multi saved with 0.2.19 or 0.2.20 still loads; its BASS MONO is ignored). MULTI LOAD in the MENU (KEEPS MODE / SETS MODE) is unchanged.
- The global effect pages are on the GLO button now. CHORUS, DELAY 1/2, DELAY 2/2, REVERB, SHIMMER (still only with the reverb TYPE SHIM) and BASS MONO moved from FX to GLO (COMP, new, is next to BASS MONO), because they are the instrument's, not a part's. Their header now lights both part badges, like the other GLO pages.
- GLO, tap after tap (or SELECT): TEMPO, CHORUS, DELAY 1/2, DELAY 2/2, REVERB, SHIMMER (with TYPE SHIM), WIDTH, MASTER, COMP, MODULES, SIDECHAIN, MIDI, MIDI LEARN. The first tap of GLO opens TEMPO. SIDECHAIN now sits with the MIDI pages, and MODULES moved before them.
- FX, tap after tap: FX, INSERT 1/2, INSERT 2/2, EQ 1/2, EQ 2/2, DUCK 1/2, DUCK 2/2, SEND FX.
- The editor's GLOBAL tab lists the pages in the unit's order (TEMPO first); the SEND FX page is not editable there (the tab has the cards themselves); the MASTER stages (COMPRESSOR, BASS MONO, STEREO WIDTH) each have a card in the MASTER group.
- Page order, signal order. The engine's own filter page (VCF on ANALOG, TRIO FILTER, NOISE FILT) comes before the multimode filter, which runs after it. EDIT's round is ENGINE, EDIT 1, EDIT 2, the engine's own filter, MULTI FILTER 1/2, MULTI FILTER 2/2, VOICE 1/2, VOICE 2/2 (FM6: its OP pages after MULTI FILTER 2/2). The editor's ENGINE tab follows.
- The CHORUS is a stereo chorus in STEREO and LAYER. Before, the chorus was one moving delay in the middle of the sound: it thickened it but gave no width. Now it has two taps, the right one a quarter of an LFO turn behind the left, so the left and the right of the chorus move apart. RATE and DEPTH on the CHORUS page do what they did; there is no new knob, the width is fixed.
- Mono and the speaker: the left channel of the chorus is exactly the old chorus, so the unit's built-in speaker (one channel) hears it as before, and the mono sum still sweeps. A quarter turn was chosen over half a turn because at half a turn the two taps mirror each other and the mono sum keeps almost no chorus (measured: the sweep of the mono sum is 30 to 50 dB at a quarter turn, 4 to 18 dB at half a turn, 53 to 66 dB for the old one-tap chorus).
- DUEL is unchanged: each part has its own side there, so the chorus stays one tap on the part's own side, and the other channel stays exactly silent.
- Nothing else changes: DEPTH 0, a chorus send of 0, the delay (PING-PONG, RANDOM, OCT UP and the delay modulation too), the reverbs, PERFORM, SPACE, SENDS OFF and STOP ALL are as before. A sound or multi that sends to the chorus in STEREO or LAYER sounds different (wider) and a little less loud in the middle.
- Cost: about 46 host instructions per sample more, in STEREO and LAYER whenever the chorus bus runs (about 0.8 % of the CPU by the usual 1.7 % per 100 rule); none in DUEL. While nothing reaches the chorus (its send is 0 or nothing plays) the plain delay bus leaves the chorus out of the block, bit for bit the same result (a test compares both over silence, notes starting and stopping and DEPTH and RATE changes), so those mixes cost what they cost in 0.2.20. The delay's modulation, RANDOM and OCT UP always run it.
- The delay's MODE works in DUEL. Until now DUEL (part 1 left, part 2 right) always ran the plain delay and the MODE card was not shown. Now the card is there and every mode works, mono, on each part's own side:
- DIGI: the plain delay, exactly as before.
- PING: the same sound as DIGI. A ping-pong needs two sides to bounce between and a part has only one, so in DUEL PING is the plain delay (the card says PING). In STEREO and LAYER it is the ping-pong as before.
- RAND and OCT+: the event delay, once for each part: on a random share of the beats the repeat is retriggered, played backwards or an octave up or down (RAND), or always an octave up (OCT+). The events stay in the middle of the part's side: no random pan, no width, so each part's delay stays in its own channel and the other channel stays silent. CHANCE is the share of beats, as in STEREO; MRATE is not shown in these two modes.
- SPREAD is not shown in DUEL in any mode (there is nothing to spread).
- A long delay time in DUEL. Each part's delay has half of the delay line (0.74 s). With a delay time over about 0.35 s some events do not fit in it, a reverse, an octave down and a late repeat; on those beats the plain delay plays. An octave up fits up to about 0.65 s.
- Nothing else changes. The stored mode used to be kept but ignored in DUEL; now it applies. The factory multis store DIGI, so they sound the same, and STEREO and LAYER are bit for bit as before. Changing the mode crossfades in about 12 ms, and SENDS OFF and STOP ALL clear both parts' delays.
- Cost: in DUEL, RAND and OCT+ take about 110 to 125 host instructions per sample more for each part's delay while events play (about 56 for both parts between events, CHANCE 0); DIGI and PING cost what they did. The package is 2.6 KB larger and uses 76 bytes more of the pool.
- The sidechain's MIDI setup is a setting of the unit, not of the sound. GLO > SIDECHAIN now shows only the MIDI setup, for both parts (both badges): K1 P1 CH, K2 P1 NOTE, K3 P2 CH, K4 P2 NOTE: the MIDI channel (default 10) and the note (ANY or a note, default C2 = 36) that start the part's duck. They are saved with the unit's settings like the parts' MIDI channels: no patch, multi or project holds them, and loading one does not change them. They can be edited whatever the DUCK source is (PUMP too). OCT- and a knob puts that card back to its default. The rest of the ducker is the sound's and stays on FX > DUCK 1/2 and 2/2: the source is PUMP, PART or MIDI now (it was PUMP, PART, CH1 to CH16, with a NOTE card); with MIDI the second card of DUCK 1/2 is empty.
- Stored formats moved: multi records are version 6, projects revision 4, the patch store's chunk version 2. Multis, projects and saved patches of the earlier formats are refused (before 1.0, as with every change of a stored meaning); the factory multis were rewritten.
- Editor: a SIDECHAIN card on the MIDI tab of the GLOBAL column (the settings 38 to 41); the DUCK card of the FX tab keeps SRC, RATE or THR, DEPTH, ATK, RLS and CURVE.
- DUCK 1/2 and the SIDECHAIN page link to each other. With SRC MIDI, DUCK 1/2 has a K4 card (SC MIDI, GLO, SETUP): turning it jumps to GLO > SIDECHAIN; nothing is edited on DUCK 1/2. The SIDECHAIN page shows THIS PATCH: PUMP (or PART, MIDI) for the selected part and says the setup is used only when a patch uses MIDI; the four settings stay editable whatever the SRC is.
- KEY TRK starts at +51 % (owner: 50 %) in a new or initialised sound and in the factory sounds. The step 32 of 63 (50 % falls between two steps). The factory BASS and PERC sounds and the kicks (35 sounds) are set to 0 on purpose, because with the filter's CUT open a KTRK above 0 closes the notes below C3. The other 93 factory sounds changed by it (the multimode filter now follows the keys in them; only the engines with the multimode filter hear it); their goldens were renewed and the sound audit stays at 0 FAIL. A saved patch stores KTRK against 0, so a stored value is never reinterpreted.
- MASTER TUNE in Hz (MENU > AUDIO > TUNE). The row shows the frequency of A4: 415.3 to 466.2 Hz in steps of 0.1 Hz (510 steps), 440.0 Hz at first. Up to 0.2.21 it was -50 to +50 cents. 440.0 Hz is exactly the sound of TUNE 0 before (every factory sound and multi renders the same). Turn it a step at a time, or fast: with KNOB ACCEL on, a fast turn moves several steps (up to 8 at a time), so the whole range takes about 64 quick clicks. It is still kept with the project and the autosave, as before. The pitch is within 0.21 cent of the exact frequency (a 0.1 Hz step at A4 is 0.39 cent).
- Editor: the TUNE setting (MENU setting 22 and the global TUNE) shows Hz with one decimal. The protocol needed one new kind (2: a number in tenths); the 510 steps travel as one number.
- Reverb LOW CUT goes up to 2 kHz, and starts at 299 Hz. The knob still has OFF and 127 steps, now from 20 Hz to 2 kHz (3.7 % a step; before, 20 to 450 Hz). Above 1000 Hz it shows kHz ("1.5 kHz"). The default is 299 Hz (the step closest to 300 Hz), before 88 Hz, on a new unit, after ERASE DATA, with the reset gesture (OCT- and the knob), and in every factory multi. The slope stays 6 dB an octave. So the reverb tails of every factory multi and sound have less bass than before; nothing else about them changed (with LOCUT OFF all of them render exactly as in 0.2.20). A multi or project you saved keeps its stored step, which now means another frequency (step 61 was 88 Hz, it is 179 Hz).
- LESLIE STORM's morph end B (its stored seed) is another one (30012): with the new low cut its old end B came out 0.02 dB over the audit's peak limit. Its sound is the same; only what the MORPH fader turns it into at B is different.
- Twelve factory sounds reworked so they no longer sound like a neighbour: #4 RUBBER BAND, #14 BULLFROG, #18 PEDAL BASS, #25 FUNFARE, #26 RAZORWIRE, #34 BANSHEE, #49 WOW FLUTTER, #68 MALLET WOOD, #95 DEEP KICK, #112 MOOR WIND, #118 TEMPLE BLOCK, #120 DUSTY DRONE. Names, types and engines stay; KEY TRK follows the rule of 0.2.22 (+51 %, bass, percussion and kicks 0).
- Factory multis: REESE SWAMP (still M01, the first start's), WHISPER TIDE, FINAL REEL, WIRED SNAIL, EERIE SIGNAL and DEAD BUFFER are kept as they were, in new slots (FINAL REEL is M07, MONO DUEL M08). The owner's ACID ETHER and GARGLE ACID are in M09 and M14, and his edited NIGHT ORGAN, PAD SPLIT, DUB CHORD, WHISPER TIDE and TINE STRINGS in M02 to M06 (see Added). NIGHT ORGAN is now an organ and pedal bass split. Your own saved multis are not touched.
- Developer builds have no TEST 1 to TEST 4 multis in M13 to M16 any more: those slots hold the factory multis as in the release.
- The similarity check lets the owner's multis through. A multi marked
ownerin the generator is never a failure of the check; a pair with one is still reported (today: REESE SWAMP and GARGLE ACID share SQUELCH in the same place). The owner's own edits of a multi or a patch can be imported into the generator's data (see Added). - SHIM's PITCH DOWN is cheaper. The pitch shifter's four grains are computed straight instead of in a loop with selects: the same samples, the same sums, bit for bit (
shimmer,mrenderandreverbtests unchanged). Host cost: PITCH DOWN 346 -> 308 host instructions a sample in STEREO and LAYER (about -1.2 % of the CPU). PITCH UP with MOD 0 is untouched (its loop was already the plain one). - Editor round (the web editor).
- After a multi or patch is recalled ON THE UNIT, the editor reads both parts (the unit announces only its selected part), and a light check every 2.5 s catches what the unit did not announce.
- At most about 50 writes a second per control, the last value always sent; the filter cutoffs move to a new value in steps of at most a few dial steps.
- MASTER TUNE is no longer in the GLOBAL column's head: it is a setting (SETTINGS tab), with a shortcut line at the top.
- More space between controls; a test fails when two neighbouring controls come closer than 4 px (test_layout.mjs, 1920 x 1080, 1280 x 720, 1000 x 800).
- The MULTIS tab's explanation is a normal block above the list (it was drawn over the rows).
- "Untested on hardware" is gone from the editor's texts.
- The web editor, reworked (owner).
- Nothing scrolls. The page fits a 1920 x 1080, 1440 x 900 and 1280 x 720 screen without a scroll bar; below 1260 x 600 inside the browser it is drawn smaller instead. Text one size smaller, more room between texts; a test fails the build when any tab of any engine would have to scroll (test_layout.mjs). Only the 128-patch list, the piano roll's grid and the OPERATORS tab scroll inside.
- Section titles are small tinted tabs on the card's top line; labels are plain, values bold. Two small cards share a line.
- The column head: MIXER (LEVEL, PAN, MUTE and a new SOLO: one click, this part sounds and the other is muted), then PATCH | #83 TINE ROOM with the CATEGORY at the right, ENGINE as its own field, PATCH LEVEL, Browse..., Init...
- No notes and no pictures. Every explanatory sentence and subtitle is gone (the facts are in the tooltips of the titles and buttons), and so are the EQ curve, the compressor and STEREO MASTER pictures, the FM6 algorithm and envelope pictures and the wavetable spectra. A control that does not apply is not drawn and takes no room; the card's title says why in its tooltip.
- No repeats. The engine's name is not repeated on its card, WAVETABLE shows once (the WAVETABLE NOW PLAYING card is gone; an empty USER table is marked EMPTY in the TABLE list), the cutoff depths are only on the ENGINE tab's CUTOFF MOD card (FILTER ENV, KEY TRACK, LFO 1, LFO 2), the pattern's LENGTH, DIVISION, SWING and GATE only on the PIANO ROLL (the STEPS card is gone), MASTER TUNE only in SETTINGS.
- Names: the card says the context, the control its short name (SENDS: CHORUS DELAY REVERB; CHORD: TYPE VOICING; REVERB: TYPE SIZE ... and PITCH DRIFT for SHIMMER inside the reverb card; VOICE: MODE PRIORITY GLIDE TYPE SPREAD; AMP ENVELOPE, FILTER ENVELOPE); tabs MOD, FX, ARP / SEQ on one line; FM6's voice editor is on its own OPERATORS tab (unchanged otherwise).
- MATRIX: one list of the eight slots, always all eight; the SOURCE and DESTINATION lists in groups with readable names (no codes).
- Words: Save to unit, Download file, Import file, Load from unit (no "Store here"). RENAME works for every patch and multi, a factory one too (it is saved to the unit under the new name after one question).
- Removed: the LINK switch, the GLOBAL column in the middle (it is always on the right), "What the editor cannot change yet" and the "Not editable here yet" line (see docs/KNOWN_ISSUES.md).
- Numbered pairs (owner). PHASE reads WAVE 1 / WAVE 2 and VOICE VOWL 1 / VOWL 2 (were WAVE / WAVE2 and VOWL / VOWL2); the editor's BYPASS buttons always read BYPASS (lit while bypassed), never OFF.
- The matrix offers only destinations that do something (owner: the hide rule applies to modulation too).
- Removed from the DEST list: the three EQ gains (EQLOW EQMID EQHI: EQ HIGH clicked badly) and the engine values that are a list of choices, where every change is a hard switch: ANALOG WAVE, PHASE WAVE 1 / WAVE 2 / LINE, LOFI CHIP / WAVE / ARP, TRIO WAVE / MODE, PHYS MODEL, NOISE MODE, FM6 ALG. WHEEL's REG and ROTR stay (the engine glides them; MODW to ROTR is the rotor switch).
- The DEST knob also passes what the part's current wave leaves without effect: SHAPE (and ENV 2 to SHAPE) on ANALOG outside PWM and SYNC, on LOFI outside PLS, on TRIO without a pulse oscillator; LOFI DUTY on TRI, SAW and NOIS; TRIO PW without a pulse, INT2 without oscillator 2, INT3 without oscillator 3, DTN with neither. The same for an unused engine value, WAVE's TABLE, FM6's SLOT, PAN in DUEL, the INSERT's values while it is OFF and the delay's MOD RATE in RANDOM and OCT UP. The editor's list hides the same.
- The SHAPE depth cards (AMP DEST, ENV 2 DEST, LFO 1 DEST, LFO 2 DEST) are hidden on a wave without a shape input, and the other cards move left.
- The multimode filter's resonance destination is named FILTER RES (FILTER / RES in two lines on the DEST card; the DEST line says FILTER RESONANCE) and is always shown normally: the cutoff never dims or hides it.
- New destinations: the AMP ENV's ATTACK, DECAY, SUSTAIN and RELEASE (AMP / ATTACK ... on the unit), read per block like the filter envelope's times, so the envelope stays smooth (measured under an 8 Hz LFO: at the level of the sound without the route). Not on FM6, whose operators have their own envelopes. REVERB SIZE is no longer offered (the spring reverb bends its pitch while SIZE moves); a stored route to it keeps playing.
- The full table per engine is in docs/MOD_INERT_TABLE.md. Each line of it was checked by rendering (tests/mod_inert_test.c).
- The MASTER volume no longer glitches when it is turned (owner, 2026-10-20, in the headphones). The volume used to change in steps, one step per block (0.73 ms) and per knob reading: small steps at the loud end, but up to 6 dB at the quiet end of the knob (the knob's law is a square, so one position of the pot is a large part of a small volume), and the quiet end also lost the last bits of the sound (the volume was applied to the 16-bit sound and cut back to 16 bits). Now the volume glides (about 12 ms), moves in finer steps at the quiet end, and keeps 7 more bits of the sound. Measured on a sine in the Mac copy: the unwanted sound beside the tone was 47 dB below it on a quick turn (now 74) and 27 to 40 dB below it at the quiet end (now 66 to 77). Cost about 18 host instructions a sample (0.5 % of the time budget), 31 while the knob moves.
- PHASE: the high whistle in the attack of a sound whose envelope opens DCW (#31 BRAZEN, owner 2026-10-20) is gone. PHASE builds its bent wave once a block, so while the envelope sweeps DCW (the amp envelope's ENV amount, and a little with every PHASE sound) the wave stepped at each block seam: a buzz at 1,378 Hz and its harmonics, 62 to 77 dB under full scale above 3 kHz, exactly absent with ENV 0 and less audible at BRAZEN's morph end B, whose own highs cover it. The step is now carried across the seam as a short glide: 10 to 15 dB less on middle notes. Aliasing of the bent wave is not the cause (84 dB under at C4 with DCW 116; 56 dB at C6) and stays: a bit of it is normal for phase distortion. Costs about 13 host instructions a sample (+6 %) for the dearest PHASE voice while DCW moves a lot, nothing while it stands.
- The EQ's HIGH knob did nothing at the default Q. The HIGH band only ran when MID's Q was turned away from its middle. Now it runs whenever its gain is set. 18 factory sounds store a HIGH gain (most of the basses at -4 dB) and now sound with it: #2 FOLD BASS, #4 RUBBER BAND, #7 FM BASS 2, #8 FRETLESS, #9 SLAP DOCTOR, #10 ELASTIC BASS, #11 FUZZ BASS, #12 ARP BASS, #13 CARTRIDGE, #14 BULLFROG, #15 BREADBIN, #16 SID BASS, #17 SYNC BASS, #18 PEDAL BASS, #19 PLUCK BASS, #20 GEARBOX, #23 KICK BASS, #95 DEEP KICK (-2 dB); so do the multis M02, M03, M08, M13 and M16.
- The EQ could keep a small DC offset on a LOW band at its lowest frequencies until the part went silent. Gone.
- WAVE: SUB and DTN no longer crackle when you turn them on a held note. SUB's level used to jump at every knob step, and DTN switched its second oscillator in or out at once when it left or reached 0. Both were clicks, clearest on a pure sine (an EMPTY user table plays one). SUB now glides to the knob (90 % in about 6 ms) and DTN fades its second oscillator in or out over 5.8 ms. A value that does not move sounds exactly as before, and so does the start of a note. Matrix routes on SUB or DTN (an LFO breathing the sub, an LFO sweeping DTN through 0 on #13 HOOVER) are smooth now too.
- Multimode filter: no click at the open end. CUT 82 (fully open) bypasses the filter, and crossing between 81 and 82 on a sounding note used to click (about 4 times the music's sharpest corner on #83 TINE ROOM, which sits at 82). Crossing the edge, by the knob, an envelope, an LFO or KEY TRK, is now cross-faded over 0.7 ms. Sounds whose cutoff never crosses the edge are unchanged.
- An EMPTY user wavetable (USR1..USR3 unset) plays a clean sine. That was already so and is now tested; the "That slot is empty" message comes from the editor, not from the unit.
- LAYER: each part uses its own TRN from the keys, and the SPLIT compares the key you play. Before, part 2 was given part 1's already transposed note, so part 2's TRN did nothing from the keys (with the arp on it did), and the split was compared with part 1's transposed note: a split shown as F3 with part 1 at TRN -12 sat at F4. Now the split is the key as played, whatever the TRN, and every part adds its own TRN. In the factory multis: M02 NIGHT ORGAN and M03 PAD SPLIT now say split F4 (they sound the same split as in the test build); in M03 the pad now sounds at the key (it played an octave lower before, with part 1's TRN -12); in M08 FINAL REEL the strings' TRN +12 now sounds an octave up from the keys, as it was made in 0.2.11. The arp-driven parts (M02's organ) are unchanged. No render of the sound audit or the multi goldens changes.
- The editor's Backup page read a multi of this firmware as damaged. Its content check still expected multi records of version 2 with 119 values, so a backup holding a saved multi (version 6, 127 values) was refused ("damaged multi") on reading and restoring. It now checks version 6 and 127 values, the form the unit writes and checks itself. Found while preparing the owner's edit path above (the multis come from the Backup file). Since the editor round an object the editor cannot check no longer stops the backup: it is kept in the file as it was read, with a warning naming it (for example "Object 13 (multis M01 and M02) ..."), and a restore skips it unless you tick the box.
- PAN crackled when turned from the editor (and would have from the new knob): the pan gain is followed smoothly now (a knob step lands within about 13 ms, the plain mix ramps within the block; the spread mix steps once a block). Every render of before is bit for bit the same while the pan does not move.
- SAT crackled when it was changed on a sounding part (heard on an FM part): the drive, its tone and its wet/dry blend stepped at the block boundary. The part's SAT is followed smoothly now (a quarter of what is left each block, at most one and a half steps a block; a knob step lands within about 10 ms, the whole range within about 140 ms; a silent part takes it at once). A SAT that does not move is bit for bit as before.
./host_tests.sh satmeasures the step at the block boundaries on ANALOG, PHASE and FM6. - SAT modulated from the matrix no longer clicks when the LFO restarts. With a matrix route LFO 2 (or LFO 1, an envelope) to SAT and the LFO on TRIG NOTE, a new note restarted the LFO and the SAT jumped at once (up to its whole depth) while earlier notes still sounded. The SAT the part runs at, the stored value plus the matrix, now goes through the same smoothing as the knob: a jump ramps over a few milliseconds (at most 1.5 steps a block). A SAT that does not move is bit for bit as before; an LFO of 1.1 Hz running on its own (not restarted by notes) at depth 98 is followed within 2 steps of 127. Test: tests/sat_test.c (RETRIG, SLOW).
- The HALL reverb's tail no longer stops at once, like a noise gate (heard on M07 FINAL REEL and on released pads). The HALL rounded its quiet lines down, so about 50 dB under the top its tail fell to silence within 0.3 s. It rounds to the nearest now: the tail fades at its own rate about 2 s longer, to about -80 dBFS at the output, and still ends in silence. Only HALL changes (the dry sound and the other reverbs are bit for bit as before); HALL is the power-on reverb and the reverb of M07 and M09 to M13. Test: tests/hall_tail_test.c; the findings are in docs/TAIL_CUT_FINDINGS.md.
- Matrix moves no longer click or zip.
- A sudden change of a matrix source (an S&H step, the edge of a square or saw LFO, an LFO restarted by a note, a MIDI controller step, the velocity of a new note) now glides over 3.6 to 7.3 ms, on every destination. Before, it jumped at once (0.7 ms) and clicked; on the filter's cutoff it was worst. An LFO or an envelope passes as it is, up to the top LFO rate (40 Hz) and down to a 4 ms attack.
- When a route moves PAN, PATCH LEVEL or a send (CHORUS, DELAY, REVERB), the change is spread over each block instead of stepping at its start. That step was a click on a jump and a fine buzz (about 1.4 kHz) under an LFO. A part without such a route mixes exactly as before. Not yet with SPREAD on (there the values still step once a block).
- SAT between 0 and 12, where it blends the dry and the driven sound, no longer ticks while it moves.
- Measured on a held sine (the largest kink, in thousandths of the peak, before and now): cutoff jump 377 to 26, PAN 613 to 3, PATCH LEVEL 575 to 17, DELAY send 385 to 2, CHORUS send 221 to 2, SAT into its blend 103 to 23. Test: tests/mx_step_test.c.
- Renders with such routes changed on purpose (see the fingerprints).
- Editor: the global settings follow the unit. WIDTH, BASS MONO, COMP, the SIDECHAIN setup, the MODULES switches and the other MENU settings changed on the unit now show in the editor (before, only the parts and the global dump followed; the editor's changes reached the unit, not the other way). The editor's 2.5 s poll reads the settings of the panel (ids 28..42) every time, four of the other MENU rows a turn, and the global dump (tempo, sends and the rest) every fourth time. A setting you are writing, or any control


