PZD-Daisy-Pod-Groovebox, image 1 from its README
1/11
Firmware

PZD-Daisy-Pod-Groovebox

Peaking96/100

Multitimbral groovebox firmware for the Electrosmith Daisy Pod: 4-layer looper, DX7 FM synth (Dexed), granular, string ensemble, and a drum/sound sampler that imports OP-1 packs, all playing at once,

PZD-Daisy-Pod-Groovebox is custom firmware for the Electro-Smith Daisy Pod, by @Peteranthony1st. Open source under MIT, latest release v3.6.0 (November 2026), 7 stars on GitHub.

forElectro-Smith Daisy Pod·by@Peteranthony1st

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

Downloads
0
Stars
7
Forks
0
Commits
113
Last commit
Download v3.6.0

sdcard-template.zip· 11 MB· +2 files

MIT· Peteranthony1st/PZD-Daisy-Pod-Groovebox·downloads come from the creator’s GitHub releases

110
Commits
27
Releases
110 commits and 27 releases in the last year
Activity · last 12 months
27 releases
  1. v3.6.0v3.6.0 - Dexed A/B, sustain pedal, Global:MIDI, GR-1-style GrainsLatest3 files

    🧪 In active testing. Releases will come thick and fast for a while. Suggestions, bug reports and ideas for changes are very welcome — please open an issue.

    PZD Daisy Pod Groovebox in its printed case

    New case: the PZD Daisy Pod Groovebox case is now on Cults3D.

    What's new

    Dexed A/B: two Dexed engines

    • DXD-B is a second, full Dexed engine with its own patch. Turn it on from Global:DXD-B. Clicking into either Global page chooses which engine the Dexed pages edit.
    • The two engines share one bus: filter, fold, gain, limiter, level, pan and sends.
    • Mix page: DXD-A, DXD-B and BUS level bars with pan sliders, plus a live OUT meter. B1 picks which bar K1 and K2 set.
    • MIDI page: B1 Lock keeps both engines on one channel (on by default). Turn Lock off to give each engine its own channel.
    • Split page: play DXD-A and DXD-B in Layer or Split. K1 sets the split point and K2 shifts each engine's octave from -2 to +2. Changing the split while you hold a key never leaves a note stuck.
    • Voices: up to 16 for one engine, and up to 24 across both.
    • Snapshots save both engines and how the pair is set up. Older snapshots load as a single Dexed.

    Sustain pedal

    • A pedal sending CC 64 now holds notes on Grains, DXD-A, DXD-B, Ensemble and SMPVO. Each engine follows the pedal on its own MIDI channel.
    • Pedal up lets go of every held note except keys you're still pressing. Playing a held note again restarts it.

    New Global:MIDI page

    • Every engine's MIDI channel is in one list. K1 picks the engine and K2 sets its channel.
    • B1 Sus-Pedal:Norm / B2 Sus-Pedal:Rev fixes a pedal that works backwards. The setting is saved to the card straight away.
    • A SUS box in the title shows what the pedal is doing.

    Grains: GR-1-style rework

    • Engine: one grain cloud per voice, with 4-voice polyphony and Mono/Poly.
    • Controls, now using GR-1 names:
      • Position and Spray.
      • Scan, from -2x through Hold to +2x, with Loop, One shot and Ping pong.
      • Loop Start and End.
      • Grain Size and Density.
      • Pitch with Keymap.
    • Pages: Grain, Position, Scan, Rhythm, Loop and Pitch, and Mix now has Gain like the other engines.
    • Presets: older presets and snapshots convert automatically. The Starter sounds are set up to scan and play chords.

    Dexed under the hood

    • Faster operator code: about 1% less CPU, with the same sound.
    • Smoother voice steals: notes cut off during big chords now fade out instead of being cut short.
    • Fold at 0% is skipped completely: loud chords no longer crackle when Fold is off.
    • Pan in %: the Mix pages now show pan in % like every other page.

    Looks and navigation

    • Splash: a PZD GROOVEBOX splash shows at power-on, with a pixel-drawn logo. Press a button or the encoder to skip it.
    • Graphics: every engine's Global page, plus Looper and Export, has its own graphic and the same layout.
    • All Notes Off: triple-click the encoder to stop every note on every engine, for a stuck note.

    Sampler imports

    • OP-1 Field stereo drum kits now slice in the right places.
    • SMPVO sound-pack import: the progress bar moves gradually.

    SD card changes

    sdcard-template.zip has the reworked Grains Starter sounds, and Ethereal Piano is renamed Airy Piano. To get them, copy GRAINS/PRESETS/ from the zip onto your card. Your own saves aren't affected.

    Flashing this release

    This firmware boots through a small separate bootloader and runs from the Pod's external QSPI flash. If your Pod has run this bootloader before (anything from v1.6.0 onward), skip to step 2.

    1. One-time bootloader setup (only if you've never flashed this project's bootloader): put the Pod into DFU mode (hold BOOT, tap RESET, release BOOT), then flash dsy_bootloader_v6_4-intdfu-2000ms.bin (attached below) with Electrosmith's web programmer. No toolchain needed.
    2. Flash the firmware (every time, including right after step 1): copy main.bin (attached below) onto the root of a FAT32 SD card, insert it into the Pod, and power-cycle with a steady power supply. The bootloader finds the .bin and flashes it automatically.
    3. New card? Unzip sdcard-template.zip onto its root.

    Building it yourself instead? See Building and flashing in the README.

    🤖 Generated with Claude Code

  2. v3.5.3v3.5.3 - Dexed 16 voices with a Voices control, click-free voice steals3 files

    🧪 In active testing. Releases will come thick and fast for a while. Suggestions, bug reports and ideas for changes are very welcome — please open an issue.

    What's new

    Dexed: more voices, and you choose how many

    • Dexed now has 16 voices (up from 10). It starts at 12, which keeps Dexed around 20% CPU.
    • Voices is on K2 of the Dexed MIDI page. Set it anywhere from 1 to 16:
      • Turn it down when other engines need the CPU, or for a mono bass or lead.
      • Turn it up to 16 for big chords and pads. 16 held notes is about 27% CPU.
    • Turning it down while you hold notes releases the extra notes, which fade out on their own release.
    • Voices is saved in Dexed User presets and in snapshots. Factory patches, .syx imports and older saves leave it unchanged. Snapshots saved before this release load at 16.

    No more clicks when a note takes over a voice

    • When a new note needs a voice that's still sounding, the old sound now fades out over about 5 ms instead of cutting off.
    • This removes the small click you could hear on voice steals, most obviously at Voices = 1 when playing legato. It also fixes the click when re-striking a key that's still ringing.

    SD card changes

    None. sdcard-template.zip is the same as in v3.5.2.

    Flashing this release

    This firmware boots through a small separate bootloader and runs from the Pod's external QSPI flash. If your Pod has run this bootloader before (anything from v1.6.0 onward), skip to step 2.

    1. One-time bootloader setup (only if you've never flashed this project's bootloader): put the Pod into DFU mode (hold BOOT, tap RESET, release BOOT), then flash dsy_bootloader_v6_4-intdfu-2000ms.bin (attached below) with Electrosmith's web programmer. No toolchain needed.
    2. Flash the firmware (every time, including right after step 1): copy main.bin (attached below) onto the root of a FAT32 SD card, insert it into the Pod, and power-cycle with a steady power supply. The bootloader finds the .bin and flashes it automatically.
    3. New card? Unzip sdcard-template.zip onto its root.

    Building it yourself instead? See Building and flashing in the README.

    🤖 Generated with Claude Code

  3. v3.5.2v3.5.2 - Snapshots, MIDI channels in presets, full DX7 voice editing3 files

    🧪 In active testing. Releases will come thick and fast for a while. Suggestions, bug reports and ideas for changes are very welcome — please open an issue.

    What's new

    Global:Snap — snapshots of every synth at once

    • One snapshot saves Grains, Dexed, Ensemble and the Sampler together:
      • Each engine's sound, Mix settings, MIDI channel and mod wheel target.
      • Which engines are on, and whether the Sampler is SMPVO or SMPDR.
      • The Grains audio itself, so an unsaved capture comes back too. The Sampler's Sound or Kit is referenced by name, as in its User presets.
    • To save: press B1, use K1 to pick Overwrite or Save New, then hold B2 to confirm.
    • To load: B2 opens the list, K2 scrolls, and a tap on B2 loads.
    • The grid shows each engine's on/off dot, sound and MIDI channel. That's what's live now, or, while browsing, what the highlighted snapshot holds.
    • Where they're kept: snapshots are saved in SNAPSHOTS/ on the card. You can duplicate or delete them in Global:SdMgmt → GLOBAL → Snapshots.

    MIDI channels now live in presets

    • Each engine's User presets save its MIDI channel and mod wheel target. One preset can bring back "Dexed on channel 1", another "SMPDR kit on channel 10".
    • Grains User presets now also save Level, Pan, Gain and Delay send.
    • Older presets and factory sounds leave the current channel unchanged.
    • Performances no longer store MIDI channels. Startup defaults (hold B2 on Global:Tempo) still do.
    • Global:File is renamed Global:Perf.

    Dexed Advanced: full DX7 voice editing

    • 16 pages, using the DX7's own names:
      • ALGORITHM, OSC FREQUENCY, OSC DETUNE, OUTPUT LEVEL
      • EG RATE, EG LEVEL
      • KEYBOARD LEVEL SCALING CURVE and BREAK POINT, KEYBOARD LEVEL SCALING DEPTH, KEYBOARD RATE SCALING
      • SENSITIVITY (KEY VELOCITY, A MOD SENS)
      • PITCH EG RATE, PITCH EG LEVEL
      • LFO, LFO DEPTH, P MOD SENS / OSC KEY SYNC, KEY TRANSPOSE
    • Button 1 picks OP1–OP6 on the operator pages.
    • OP ON/OFF is on the OUTPUT LEVEL page. It's saved in User presets and snapshots, and older saves load with all six operators on.
    • Envelope graph like the DX7's: L1–L4 are numbered squares and R1–R4 are numbered slopes, with a dotted key-OFF line. Button 2 shows 1/2* 3/4 to mark which pair you're editing.
    • Level scaling graph: shows the curve, with BREAK POINT marked by note name.
    • ALGORITHM is now set in Advanced. The Dexed Algo page just shows the diagram, which is now drawn like the DX7's:
      • OP1 is on the left.
      • All carriers sit on one row above OUT.
      • Operators that are switched off show as dotted boxes.
      • Feedback across several operators is drawn as an FB line.
    • New on the Dexed User page loads INIT VOICE, like a DX7, and keeps your Mix and MIDI settings.

    Dexed sound fixes

    • TRANSPOSE, OSC KEY SYNC, LFO KEY SYNC and LFO DELAY now affect the sound. Earlier firmware stored them but ignored them.
    • Algorithms 4 and 6 now feed back through 2–3 operators, like a real DX7. They no longer sound the same as 3 and 5. This can change how some factory patches that use them sound.

    SD card changes

    sdcard-template.zip adds an empty SNAPSHOTS/ folder. You don't need it, because the first snapshot save creates it.

    Flashing this release

    This firmware boots through a small separate bootloader and runs from the Pod's external QSPI flash. If your Pod has run this bootloader before (anything from v1.6.0 onward), skip to step 2.

    1. One-time bootloader setup (only if you've never flashed this project's bootloader): put the Pod into DFU mode (hold BOOT, tap RESET, release BOOT), then flash dsy_bootloader_v6_4-intdfu-2000ms.bin (attached below) with Electrosmith's web programmer. No toolchain needed.
    2. Flash the firmware (every time, including right after step 1): copy main.bin (attached below) onto the root of a FAT32 SD card, insert it into the Pod, and power-cycle with a steady power supply. The bootloader finds the .bin and flashes it automatically.
    3. New card? Unzip sdcard-template.zip onto its root.

    Building it yourself instead? See Building and flashing in the README.

    🤖 Generated with Claude Code

  4. v3.5.1v3.5.1 - Unified Mix pages with Gain, final-mix scopes, Delay Sync buttons3 files

    🧪 In active testing. Releases will come thick and fast for a while. Suggestions, bug reports and ideas for changes are very welcome — please open an issue.

    What's new

    Mix pages now share one layout, with Gain on every engine

    • Dexed, Ensemble, SMPVO and SMPDR Mix pages now look the same. Each has:
      • Level and Pan.
      • Gain, from 0 to +12 dB. Press a button to switch the knobs between Level/Pan and Gain.
      • A scope of that engine's output.
      • A meter bar at the right edge that shows clipping.
    • Gain is applied before each engine's limiter. That lets you push quiet patches up, or drive them into soft saturation. The limiters still protect the output.
    • Grains has its own version of the page: a smaller scope beside the Grain, Scan and Out mix bars.
    • What gets saved:
      • Gain is saved in Dexed presets and in SMPVO/SMPDR user presets.
      • Older preset files still load, and they start at 0 dB.
      • Grains Gain is not saved, the same as Grains Level and Pan.

    Global:Bypass: the status line now uses the small font, and the page gets the same scope and meter as the other Mix pages.

    Global FX pages show the final mix: Filter, Reverb, RevTone, RevDiff, Dly-Rev, Delay and DlyTone now show a scope of the master output. Filter's mode line uses the small font to make room.

    Global:Delay Sync:

    • Button 1 turns Sync off; Button 2 turns it on.
    • The top line always shows the state: Sync: Off, or Sync: On with the BPM.

    SD card changes

    None. sdcard-template.zip is the same as in v3.5.0.

    Flashing this release

    This firmware boots through a small separate bootloader and runs from the Pod's external QSPI flash. If your Pod has run this bootloader before (anything from v1.6.0 onward), skip to step 2.

    1. One-time bootloader setup (only if you've never flashed this project's bootloader): put the Pod into DFU mode (hold BOOT, tap RESET, release BOOT), then flash dsy_bootloader_v6_4-intdfu-2000ms.bin (attached below) with Electrosmith's web programmer. No toolchain needed.
    2. Flash the firmware (every time, including right after step 1): copy main.bin (attached below) onto the root of a FAT32 SD card, insert it into the Pod, and power-cycle with a steady power supply. The bootloader finds the .bin and flashes it automatically.
    3. New card? Unzip sdcard-template.zip onto its root.

    Building it yourself instead? See Building and flashing in the README.

    🤖 Generated with Claude Code

  5. v3.5.0v3.5.0 - Much more CPU headroom, one-level-back encoder, Kits/Breaks browsing3 files

    🧪 In active testing. Releases will come thick and fast for a while. Suggestions, bug reports and ideas for changes are very welcome — please open an issue.

    What's new

    Much more CPU headroom: no more crackle with everything playing Previously, running every engine plus four looping layers with effects pushed the CPU past 100%, which caused crackles, dropouts and a frozen display. That same test now peaks in the mid-80s %.

    • Faster processor clock: the Pod now runs at 480 MHz instead of 400 MHz.
    • Idle engines cost almost nothing: an engine that's switched on but not playing now skips its processing entirely. Release, chorus and filter tails still finish naturally.
    • Looper layers: filters and effects are much cheaper. Filter and effect settings are now worked out once per audio block instead of every sample.
    • AutoWah, Tremolo and Phaser: about 3–4× cheaper, and they sound the same. The Phaser now also sounds the same on every power-on; before, it could vary slightly from boot to boot.
    • Grains: faster grain rendering, and no more CPU spikes on note changes.
    • Leaner engine limiters in Dexed, Ensemble, Grains and the Sampler.

    See where the CPU goes: on Global:Mixer, press Button 1 for a per-part breakdown (Grains, Dexed, Ensemble, Sampler, Looper, Delay, Reverb and the rest), each shown as average/peak %.

    Encoder click goes one level back

    • Inside an engine or the Mixer screen: click returns to its Global page.
    • On a layer's pages or any other Global page: click returns to Home.
    • Hold: still goes to Home.
    • Dexed's Advanced page: click still enters the operator editor, and clicks back out.
    • Pausing the loops: use Button 1 on Home. The old "click to pause all loops" is gone.

    SMPDR Preset page: starts with Kits / Breaks, then that type's banks, matching SMPVO's Sounds / Captured / Multi. This also fixes kits sometimes loading wrongly after using SMPVO.

    Grains mix: Grain and Scan start at 60% and 80%, and the starter presets are updated to match.

    SD card changes

    No folder changes. The Grains starter presets in sdcard-template.zip (GRAINS/PRESETS/) now use the new 60/80 mix. To get it on an existing card, copy that folder across. Your own saved presets keep their own mix.

    Flashing this release

    This firmware boots through a small separate bootloader and runs from the Pod's external QSPI flash. If your Pod has run this bootloader before (anything from v1.6.0 onward), skip to step 2.

    1. One-time bootloader setup (only if you've never flashed this project's bootloader): put the Pod into DFU mode (hold BOOT, tap RESET, release BOOT), then flash dsy_bootloader_v6_4-intdfu-2000ms.bin (attached below) with Electrosmith's web programmer. No toolchain needed.
    2. Flash the firmware (every time, including right after step 1): copy main.bin (attached below) onto the root of a FAT32 SD card, insert it into the Pod, and power-cycle with a steady power supply. The bootloader finds the .bin and flashes it automatically.
    3. New card? Unzip sdcard-template.zip onto its root.

    Building it yourself instead? See Building and flashing in the README.

    🤖 Generated with Claude Code

  6. v3.4.2v3.4.2 - Multi-samples, drag-and-drop kits, import folders, reverb crackle fix3 files

    🧪 In active testing. Releases will come thick and fast for a while. Suggestions, bug reports and ideas for changes are very welcome — please open an issue.

    What's new

    Multi-samples (new MULTISMP banks)

    • A folder of WAVs, one per sampled note with the note in each name (Cello C3.wav, Cello_C3.wav, or Salamander-style A0v10.wav), plays as one instrument: every key uses its nearest recording. Up to 24 notes and about 33 s of audio.
    • SMPVO's Preset page now starts with Sounds / Captured / Multi, then a folder, then an item.
    • The SD card template includes a ready-made Upright Piano (13 notes, CC0, from FreePats).

    Build kits, breaks and sounds on your computer, no import needed

    • Sounds: copy .wav files into any SAMPLES/SOUNDSn folder.
    • Kits and breaks: make a folder in SAMPLES/KITSn or SAMPLES/BREAKSn and copy WAVs into it. They load in name order, one per key from C2, up to 24 pads.
    • WAVs of any sample rate (8–192 kHz) now load, including EP-133 exports and 24-bit DAW exports.
    • A kit can now hold about 33 s of audio, up from 20.8 s. If one doesn't fit, the status line says how many pads were left out.

    Sampler imports

    • Drum packs go in DRUM PACK IMPORT/KITS/ or /BREAKS/, and the folder decides what each becomes. Nothing is guessed any more.
    • The Import page lets you choose where imports go: a new bank (the default), or an existing bank with room for all of them.
    • Kits now import poly; breaks import with Choke on.
    • Fixed: re-importing a file that was already in Done/ brought it in again on every press. It's now kept as name (2).
    • Repeated "padding" pads in OP-1 drum packs are skipped.

    SD card management: the SMPIMP box manages imported sounds, multi-samples, kits and breaks: Voice → Sounds/Multi, Drum → Kits/Breaks.

    Fixes

    • Reverb: removed a faint crackle under held notes and chords.
    • Dexed: imported voices with an out-of-range release level (e.g. EP.SawBel) no longer ring forever.
    • Dexed: imported .syx banks get their own folders, and user saves show up again.
    • The Daisy Seed's red LED turns off 10 s after boot.

    SD card changes

    • New folders: DRUM PACK IMPORT/KITS/ and DRUM PACK IMPORT/BREAKS/, plus SAMPLES/MULTISMP1/. The firmware creates the import folders when you open the SMPDR Import page. BREAK PACK IMPORT/ is no longer used, so move anything waiting in it into DRUM PACK IMPORT/BREAKS/.
    • Old multi-samples (.snd) convert automatically into MULTISMP1/ the first time you open SMPVO's Preset page. Your SMPVO User presets are updated to match.
    • For the Upright Piano and the new READMEs, copy SAMPLES/MULTISMP1/ from sdcard-template.zip onto your card.

    Flashing this release

    This firmware boots through a small separate bootloader and runs from the Pod's external QSPI flash. If your Pod has run this bootloader before (anything from v1.6.0 onward), skip to step 2.

    1. One-time bootloader setup (only if you've never flashed this project's bootloader): put the Pod into DFU mode (hold BOOT, tap RESET, release BOOT), then flash dsy_bootloader_v6_4-intdfu-2000ms.bin (attached below) with Electrosmith's web programmer. No toolchain needed.
    2. Flash the firmware (every time, including right after step 1): copy main.bin (attached below) onto the root of a FAT32 SD card, insert it into the Pod, and power-cycle with a steady power supply. The bootloader finds the .bin and flashes it automatically.
    3. New card? Unzip sdcard-template.zip onto its root.

    Building it yourself instead? See Building and flashing in the README.

    🤖 Generated with Claude Code

  7. v3.4.1v3.4.1 - Knobs no longer change sounds when switching pages3 files

    What's fixed

    Sounds no longer change when you scroll through pages. Arriving on a page could make a knob take over a setting just because it happened to sit near that setting's value — without being touched. On Dexed this was dramatic: load a preset, scroll on, and the Algorithm page could switch the patch to a neighbouring algorithm so it sounded nothing like itself. Now a knob does nothing on a page until you actually turn it, then picks up the setting as before. This applies to every page and engine.

    No SD card changes since v3.1.0.

    Flashing this release

    This firmware boots through a small separate bootloader and runs from the Pod's external QSPI flash. If your Pod has run this bootloader before (anything from v1.6.0 onward), skip to step 2.

    1. One-time bootloader setup (only if you've never flashed this project's bootloader): put the Pod into DFU mode (hold BOOT, tap RESET, release BOOT), then flash dsy_bootloader_v6_4-intdfu-2000ms.bin (attached below) with Electrosmith's web programmer. No toolchain needed.
    2. Flash the firmware (every time, including right after step 1): copy main.bin (attached below) onto the root of a FAT32 SD card, insert it into the Pod, and power-cycle with a steady power supply. The bootloader finds the .bin and flashes it automatically.
    3. New card? Unzip sdcard-template.zip onto its root.

    Building it yourself instead? See Building and flashing in the README.

    🤖 Generated with Claude Code

  8. v3.4.0v3.4.0 - Gain staging, master limiter, dB meters, Master/Bypass Vol3 files

    What's new

    Louder, cleaner gain staging

    • Recordings now come back at the level you heard them. Every channel used a pan law that dropped centred sounds by 6 dB — and a synth recorded into a loop layer paid it twice. All channels now use an equal-power pan law (−3 dB in the centre), so centred sounds are 3 dB louder and recordings match much more closely.
    • Master soft limiter. Loud peaks are now rounded off smoothly at the output instead of clipping, so you can run the mix hotter. The Master meter's clip light now means "the limiter is working hard".
    • Meters in dB. The Mixer's peak meters read from −48 dB to 0 dBFS like a studio meter, so a healthy level sits near the top instead of half way.

    Existing performances will play back about 3 dB louder — turn Master Vol down a touch if needed; the limiter keeps it clean either way.

    Global:Mixer

    • K1 Master Vol, K2 Bypass Vol — pull a live mic down right there without touching the mix, so it doesn't feed back when Master is up. Bypass now starts at 60% at power-on.
    • The CPU readout (average / peak) moves to the bottom row.
    • The overview bars are spaced a little wider.

    Home's K1 is now labelled Master Vol.

    No SD card changes since v3.1.0.

    Flashing this release

    This firmware boots through a small separate bootloader and runs from the Pod's external QSPI flash. If your Pod has run this bootloader before (anything from v1.6.0 onward), skip to step 2.

    1. One-time bootloader setup (only if you've never flashed this project's bootloader): put the Pod into DFU mode (hold BOOT, tap RESET, release BOOT), then flash dsy_bootloader_v6_4-intdfu-2000ms.bin (attached below) with Electrosmith's web programmer. No toolchain needed.
    2. Flash the firmware (every time, including right after step 1): copy main.bin (attached below) onto the root of a FAT32 SD card, insert it into the Pod, and power-cycle with a steady power supply. The bootloader finds the .bin and flashes it automatically.
    3. New card? Unzip sdcard-template.zip onto its root.

    Building it yourself instead? See Building and flashing in the README.

    🤖 Generated with Claude Code

  9. v3.3.0v3.3.0 - Ensemble Gain and 16 presets, new filter, lower CPU3 files

    What's new

    Ensemble: Gain and 16 re-voiced presets

    • Gain — on Ensemble's Mix page, press B2: 0 to +12 dB into the limiter. Ensemble's loudness follows how many drawbars are up, so thin registrations used to be quiet; Gain brings them up front, and pushed hard it saturates gently. Saved in Ensemble presets (older saves load at 0 dB and sound as before).
    • 16 factory presets, each now shaped with its own envelope, filter, chorus, Gain and reverb: Warm Pad, Bright Ensemble, Organ, Thin Strings, Sub Swell, Chorus Lead, Mellow Choir, Bright Pluck, plus new Solina Strings, Glass Bells, Poly Stab, Dark Drone, Reed Organ, Shimmer Pad, Brass Swell and Sub Bass.

    A new filter everywhere — cleaner and ~10% less CPU Every filter (all engines, the loop layers and the master filter) now uses a modern trapezoidal state-variable filter. It stays clean at high resonance and loud input, cutoff is more accurate, and it does half the work of the old one: a full-load test went from 73% / 85% to 65% / 76% CPU (average / peak). Resonance knobs keep the same feel; full resonance is now very high but stable rather than self-oscillating.

    Built-in presets no longer need an SD card Ensemble's Preset page and Dexed's Roms/Dexed groups work with no card inserted. Your own saves (User pages, Dexed Imports) still live on the card.

    No SD card changes since v3.1.0.

    Flashing this release

    This firmware boots through a small separate bootloader and runs from the Pod's external QSPI flash. If your Pod has run this bootloader before (anything from v1.6.0 onward), skip to step 2.

    1. One-time bootloader setup (only if you've never flashed this project's bootloader): put the Pod into DFU mode (hold BOOT, tap RESET, release BOOT), then flash dsy_bootloader_v6_4-intdfu-2000ms.bin (attached below) with Electrosmith's web programmer. No toolchain needed.
    2. Flash the firmware (every time, including right after step 1): copy main.bin (attached below) onto the root of a FAT32 SD card, insert it into the Pod, and power-cycle with a steady power supply. The bootloader finds the .bin and flashes it automatically.
    3. New card? Unzip sdcard-template.zip onto its root.

    Building it yourself instead? See Building and flashing in the README.

    🤖 Generated with Claude Code

  10. v3.2.0v3.2.0 - Stereo delay with Ping-Pong, Sync, Tone and Dly-Rev3 files

    What's new

    A proper stereo delay, with its own pages. The Global reverb and delay controls are now split by job:

    PageK1K2B1B2
    ReverbSize———
    RevTone / RevDiffunchanged
    Dly-RevDelay → Reverb: puts the echoes into the reverb———
    DelayTime (20 ms – 3 s, or a note value when synced)FeedbackSync on/off—
    DlyTonePing-PongTone——
    BypassReverb / Delay sendShared Size / TimeReverbDelay
    • Ping-Pong — at 0% the echoes follow each sound's own pan. At 100% every echo bounces L, R, L, R, even on centred sounds.
    • Tempo sync — the Time knob steps through 1/16, 1/8T, 1/8, 1/4T, 1/8D, 1/4, 1/4D and 1/2 at the current BPM, and follows tempo changes. The delay can now be up to 3 seconds.
    • Tone — each repeat gets a little darker than the one before.
    • Dly-Rev — echoes used to be dry even with reverb on. This sends them into the reverb, so they sit in the same space as the sound.
    • Bypass page — the live input now has its own Reverb and Delay sends, laid out like every engine's FX page.
    • Saved — all delay settings are now stored in performances and in the startup defaults (Global:Tempo, hold B2). Before, the delay's Time and Feedback weren't saved at all.
    • WAV export uses exactly the same delay as the Pod.

    Also in this release

    • ~4% less CPU at full load — the engines' working data now lives in the processor's fastest memory.
    • Safer save lists — if the card has a read error, lists of your saves now say so instead of quietly leaving files out, and Save New can no longer overwrite a save it failed to see.

    No SD card changes since v3.1.0.

    Flashing this release

    This firmware boots through a small separate bootloader and runs from the Pod's external QSPI flash. If your Pod has run this bootloader before (anything from v1.6.0 onward), skip to step 2.

    1. One-time bootloader setup (only if you've never flashed this project's bootloader): put the Pod into DFU mode (hold BOOT, tap RESET, release BOOT), then flash dsy_bootloader_v6_4-intdfu-2000ms.bin (attached below) with Electrosmith's web programmer. No toolchain needed.
    2. Flash the firmware (every time, including right after step 1): copy main.bin (attached below) onto the root of a FAT32 SD card, insert it into the Pod, and power-cycle with a steady power supply. The bootloader finds the .bin and flashes it automatically.
    3. New card? Unzip sdcard-template.zip onto its root.

    Building it yourself instead? See Building and flashing in the README.

    🤖 Generated with Claude Code

  11. v3.1.0v3.1.0 - One browse convention across every engine3 files

    What's new

    One way to browse and save, everywhere. Every engine — Dexed, Grains, Ensemble and the Sampler (SMPVO/SMPDR) — now has the same pair of pages, and Global:Perf and Global:SdMgmt use the same controls:

    • Preset (load only) — the sounds that come with the engine, plus your saved captures for Grains and SMPVO. B2 opens the folder list. In any folder list, K1 scrolls, B2 opens and B1 goes back. Inside a folder, K2 scrolls and a B2 tap loads the sound and keeps you in the folder, so you can audition one sound after another. K1 stays put, so Back lands on the same folder.
    • User — your own saves. B1 = Save (K1 picks Overwrite or Save New, hold B2 to confirm). B2 = Load from a list that starts with New, where K2 scrolls and a tap loads.
    • Unsaved-changes marker — a small * after the page title when the sound has changed since you last loaded or saved it.

    Per engine:

    • Dexed — Preset browses Roms / Dexed / Imports, then folders, then presets. A new Import page holds SysEx import: K2 scrolls the .syx files in DEXED IMPORT/ and holding B2 imports one. Each import becomes its own folder under Imports.
    • Grains — Preset has a Starter folder (the 9 starter sounds, now listed by name) and Captured 1, 2, … folders. Hold B2 on the Trim page to save the trimmed capture into the next free Captured slot (32 per folder, with new folders made automatically). Edited sounds you save go on the User page.
    • Ensemble — Preset lists the 8 factory sounds, and your saves are on the new User page.
    • Global:File is now Global:Perf, with the same Save/Load controls as a User page.
    • Global:SdMgmt — same browse controls. In a file list, hold B1 to Duplicate and hold B2 for 1.5 s to Delete. The CAPT box now opens to a choice of Sampler or Grains captures, so Grains captures can be duplicated and deleted on the device too.
    • Page titles are shortened to DXD: and GRAN: to leave room for the marker.

    Count-in light — when you hold B1 to record (or overdub), LED1 now flashes blue in time with the count-in click, then LED2 turns red the moment recording starts.

    See DESIGN.md ("Shared browse convention") for the full write-up.

    SD card changes

    Only one folder changed: the Grains starter sounds moved. In v3.0.0 they were GRAINS/PRES001.DAT–PRES009.DAT. Now they're in GRAINS/PRESETS/, with readable names (Bell Shimmer.DAT, Guitar Loop.DAT, …). Every file format is unchanged, so all your saves, kits, captures and performances load as before. GRAINS/CAPTURED1/, CAPTURED2/, … are created automatically the first time you save a Grains capture.

    Upgrading from v3.0.0 (on a computer):

    1. Copy the GRAINS/PRESETS/ folder from sdcard-template.zip into your card's GRAINS/ folder.
    2. Delete PRES001.DAT–PRES009.DAT from your card's GRAINS/ folder, unless you overwrote any of them with your own sounds. If you did, keep those. They'll show up on the User page.

    If you skip this, nothing breaks: the old starter files simply show up on the User page as GRAINS1–GRAINS9, and the Starter folder is empty.

    Upgrading from v2.x: follow the folder-renaming steps in the v3.0.0 release notes first, then the steps above.

    Flashing this release

    This firmware boots through a small separate bootloader and runs from the Pod's external QSPI flash. If your Pod has run this bootloader before (anything from v1.6.0 onward), skip to step 2.

    1. One-time bootloader setup (only if you've never flashed this project's bootloader): put the Pod into DFU mode (hold BOOT, tap RESET, release BOOT), then flash dsy_bootloader_v6_4-intdfu-2000ms.bin (attached below) with Electrosmith's web programmer. No toolchain needed.
    2. Flash the firmware (every time, including right after step 1): copy main.bin (attached below) onto the root of a FAT32 SD card, insert it into the Pod, and power-cycle. The bootloader finds the .bin and flashes it automatically.
    3. Set up the card — for a new card, unzip sdcard-template.zip onto its root. If you're upgrading, follow SD card changes above.

    Building it yourself instead? See Building and flashing in the README.

    🤖 Generated with Claude Code

  12. v3.0.0v3.0.0 - Ensemble, Sampler with OP-1 import, 16-grain Grains3 files

    What's new

    Two new engines, and the groovebox is now fully multitimbral — every engine can play at the same time, each on its own MIDI channel and with its own voices (polyphony isn't shared between engines).

    • Ensemble — an 8-voice divide-down string machine / ensemble organ in the ARP Solina lineage: 7 real drawbars, built-in chorus, pitch bend and mod wheel, with factory presets.
    • Sampler — one sample-playback engine with two faces (enabling one disables the other):
      • Sample Sound (SMPVO) — a chromatic sampler with its own Capture / Trim / Tune workflow.
      • Sample Drum (SMPDR) — a one-shot drum sampler for Kits and Breaks, up to 24 pads each, with live Break Divide re-slicing.
    • OP-1 pack import — drop OP-1 drum or instrument .aif/.aiff packs on the card and import them on the device. Splice points and pitch are read from the pack itself. One press imports every file in the folder. Drum packs are filed as Kits, or as Breaks when their typical slice is a second or longer; anything in BREAK PACK IMPORT/ is always a Break.
    • A sample library that grows with your card — Sounds, Captures, Kits and Breaks live in numbered folders of 32 (SOUNDS1, KITS1, …), with new ones created automatically. Each Kit/Break has its own folder. Browse folder → item on the device; duplicate/delete from Global:SdMgmt.
    • Grains: 16 grains, ~40% less CPU — the Grain layer now runs up to 16 overlapping grains (Scan stays at 10), and the engine costs less at 16 than it used to at 10.
    • SD card reliability fix — large reads/writes at certain file positions could be silently shifted by a few bytes (in libDaisy's SD driver), which could drop or corrupt data. Fixed.
    • Clearer SD card — every folder now has a readable name (see Upgrading below), and preset numbers on screen carry their engine code (PERF3, GRAINS7, ENSM12, …).

    See DESIGN.md for the full technical write-up.

    Upgrading from v2.x — rename your card's folders

    The SD card folders have new names, and the firmware won't find your existing saves until you rename them (on a computer, before or after flashing):

    Old (v2.x)New (v3.0.0)
    PERF/PERFORMANCES/
    DEXP/DEXED/
    GRNP/GRAINS/
    WAV/EXPORTS/
    IMPORT/GRAINS IMPORT/
    DXIMPORT/DEXED IMPORT/

    custom/ keeps its name. Then, from sdcard-template.zip, copy only the new folders onto the card's root: SAMPLES/, DRUM PACK IMPORT/, BREAK PACK IMPORT/ and SOUND PACK IMPORT/. Don't copy the zip's GRAINS/ folder over yours — its 9 starter presets would overwrite your own PRES001–PRES009.

    Flashing this release

    This firmware boots via a small separate bootloader and runs from the Pod's external QSPI flash. If your Pod has run this bootloader before (anything from v1.6.0 onward), skip to step 2.

    1. One-time bootloader setup (only if you've never flashed this project's bootloader): put the Pod into DFU mode (hold BOOT, tap RESET, release BOOT), then flash dsy_bootloader_v6_4-intdfu-2000ms.bin (attached below) with Electrosmith's web programmer — no toolchain needed.
    2. Flash the firmware (every time, including right after step 1): copy main.bin (attached below) onto the root of a FAT32 SD card, insert it into the Pod, and power-cycle. The bootloader finds the .bin and flashes it automatically. (Alternative: DFU mode, then drop main.bin onto the web programmer — its DFU window is only ~2 seconds, so the SD card method is more forgiving.)
    3. Set up the card — new card: unzip sdcard-template.zip onto its root. It creates every folder the import features need and includes 9 starter Grains presets. Upgrading from v2.x: follow Upgrading above instead.

    Building it yourself instead? See Building and flashing in the README.

    🤖 Generated with Claude Code

  13. v2.6.0v2.6.0 - Dexed wavefolder + Layer Drive output trim2 files

    What's new

    Dexed gets a new DX-FOLD page: a true wavefolder. Unlike a clip-style distortion (which just flattens peaks), folding reflects an overshooting signal back into the waveform, generating genuinely new harmonic content the harder it's driven — a classic pairing with FM synthesis. This replaces an earlier hard/soft-clip "Distortion" feature that was fully built and hardware-tested but ultimately reverted: Soft and Hard kept sounding indistinguishable even after two separate fix attempts, so it was shelved rather than pushed further. The wavefolder is Dexed-only on purpose — folding recorded/granular audio tends to read as broken digital artifacts rather than character. Knob 1 is Fold Amount (0% is an exact, click-free unity bypass); Knob 2 is output trim. Sits right after DX-FX in the page order. Heads up: minor chords and dense polyphony fold noticeably rougher than a single note or a major chord — that's real intermodulation distortion from folding several summed frequencies at once, not a bug.

    Layer Drive's previously-unused second knob is now an output trim (bipolar, 50% = unchanged, same taper as other Output Level-style knobs) — compensates for the fact that Overdrive is a genuine gain stage, not just a saturation effect.

    See DESIGN.md for the full technical write-up on both.

    Flashing this release

    This firmware boots via a small separate bootloader and runs from the Pod's external QSPI flash chip instead of internal flash. If your Pod has run this bootloader before (anything from v1.6.0 onward), just flash the firmware itself — skip to step 2.

    1. One-time bootloader setup (only if you've never flashed this project's bootloader before): put the Pod into DFU mode (hold the BOOT button, tap RESET, release BOOT), then flash dsy_bootloader_v6_4-intdfu-2000ms.bin (attached to this release, below) via Electrosmith's web programmer — no toolchain needed. From then on, the Pod boots straight into whatever app is on QSPI — no button-holding, just a slightly longer boot.
    2. Flash the firmware itself (every time, including that very first time right after step 1) — easiest way: copy main.bin (attached to this release, below) onto the root of a FAT32 SD card, insert it into the Pod, and power-cycle. The bootloader notices the .bin file and flashes it automatically — no DFU window to catch, works every time. Alternative: DFU mode again (same as step 1), then drop main.bin onto the web programmer — the bootloader's own DFU window is brief (~2 seconds), so the SD card method is generally more forgiving.

    If it's a fresh SD card, also copy the contents of sdcard-template/ onto the same root — it sets up the folders Grains/Dexed importing needs and pre-loads 9 starter Grains presets.

    🤖 Generated with Claude Code

  14. v2.5.0v2.5.0 - Reverb CPU cost cut ~60% (memory tier swap)2 files

    What's new

    Huge CPU improvement — the reverb is now ~60% cheaper to run. The shared reverb's internal buffers had always lived in external memory (SDRAM) simply because there wasn't room anywhere else. Freed up room by moving some rarely-used, non-time-critical buffers (used only during WAV export/import) the other way, then moved the reverb's own buffers into the faster internal memory (SRAM) instead. Measured on real hardware: reverb's own CPU cost dropped from ~29-30% down to ~11-12%. The heaviest realistic combination tested (4 recorded layers, reverb, Dexed, and Grains all playing at once) now peaks around 70% CPU instead of pinning near 100%. Confirmed clean by ear — same reverb algorithm, same sound, just much cheaper to run.

    See DESIGN.md for the full technical write-up, including why an earlier attempt at this exact idea measured no improvement (it moved the wrong, much smaller piece of data).

    Flashing this release

    This firmware boots via a small separate bootloader and runs from the Pod's external QSPI flash chip instead of internal flash. If your Pod has run this bootloader before (anything from v1.6.0 onward), just flash the firmware itself — skip to step 2.

    1. One-time bootloader setup (only if you've never flashed this project's bootloader before): put the Pod into DFU mode (hold the BOOT button, tap RESET, release BOOT), then flash dsy_bootloader_v6_4-intdfu-2000ms.bin (attached to this release, below) via Electrosmith's web programmer — no toolchain needed. From then on, the Pod boots straight into whatever app is on QSPI — no button-holding, just a slightly longer boot.
    2. Flash the firmware itself (every time, including that very first time right after step 1) — easiest way: copy main.bin (attached to this release, below) onto the root of a FAT32 SD card, insert it into the Pod, and power-cycle. The bootloader notices the .bin file and flashes it automatically — no DFU window to catch, works every time. Alternative: DFU mode again (same as step 1), then drop main.bin onto the web programmer — the bootloader's own DFU window is brief (~2 seconds), so the SD card method is generally more forgiving.

    If it's a fresh SD card, also copy the contents of sdcard-template/ onto the same root — it sets up the folders Grains/Dexed importing needs and pre-loads 9 starter Grains presets.

    🤖 Generated with Claude Code

  15. v2.4.0v2.4.0 - 8x faster save/load, Dexed CPU + bug fixes, compiler optimizations2 files

    What's new

    Performance/Grains preset loading is up to 8x faster — a 20MB Performance load dropped from ~15s to ~1.8s. The old code streamed audio to/from the SD card in small chunks on the assumption that was needed for responsiveness; it turned out to just be unnecessary per-call overhead (~10.5ms per call, measured), since these functions read/write straight into the existing buffer with nothing to chunk for. Removing the chunk loop recovered nearly all of it.

    Fixed a real Grains preset load bug that speedup surfaced — TriggerLoadGranularPreset() was the one load/save function missing the audio-suspend guard every other one already has, which could fail with AUD0:1 once reads became one long transfer. Fixed with the same guard.

    Dexed is more CPU-efficient when played sparsely — it used to compute all 10 voice slots' full FM synthesis every block even when most were silent. It now skips voices that are confirmed idle, a free CPU saving proportional to how many notes you're actually holding. (A dense chord still uses most/all 10 voices for real, so this doesn't raise the ceiling for heavy chords — playing a full chord together with Grains can still reach 100% CPU.)

    Dexed's Preset page opens much faster, and quieter — browsing/saving presets used to do ~370 individual SD card lookups every time, which was both slow and audibly noisy. Replaced with one real directory scan.

    More CPU headroom across the board — added -ffast-math and link-time optimization to the build. Measured on hardware and confirmed clean by ear afterward; the biggest win was in the heaviest combined scenario (4 layers + reverb + fast Dexed playing), which dropped from 85-90% peak CPU to 72% peak.

    See DESIGN.md for the full technical write-up.

    Flashing this release

    This firmware boots via a small separate bootloader and runs from the Pod's external QSPI flash chip instead of internal flash (see DESIGN.md for why). If your Pod has run this bootloader before (anything from v1.6.0 onward), just flash the firmware itself — skip to step 2.

    1. One-time bootloader setup (only if you've never flashed this project's bootloader before): put the Pod into DFU mode (hold the BOOT button, tap RESET, release BOOT), then flash dsy_bootloader_v6_4-intdfu-2000ms.bin (attached to this release, below) via Electrosmith's web programmer — no toolchain needed. From then on, the Pod boots straight into whatever app is on QSPI — no button-holding, just a slightly longer boot.
    2. Flash the firmware itself (every time, including that very first time right after step 1) — easiest way: copy main.bin (attached to this release, below) onto the root of a FAT32 SD card, insert it into the Pod, and power-cycle. The bootloader notices the .bin file and flashes it automatically — no DFU window to catch, works every time. Alternative: DFU mode again (same as step 1), then drop main.bin onto the web programmer — the bootloader's own DFU window is brief (~2 seconds), so the SD card method is generally more forgiving.

    If it's a fresh SD card, also copy the contents of sdcard-template/ onto the same root — it sets up the folders Grains/Dexed importing needs and pre-loads 9 starter Grains presets.

    🤖 Generated with Claude Code

  16. v2.3.0v2.3.0 - CPU meter, reverb/delay bypass, Dexed chord-grit fix1 file

    What's new

    Live CPU meter — Global:Mixer's footer now shows a smoothed average and a peak reading for the audio engine's own time budget. The peak quietly rolls over every ~10 seconds, so changing a setting shows its own fresh peak again quickly instead of staying pinned to an old worst-case. Note: this measures the audio callback specifically, not the whole system (display/MIDI/UI overhead isn't included).

    Reverb and delay now fully switch off at 0% — both shared busses previously ran their full fixed cost unconditionally, even with nothing feeding them (confirmed with the new CPU meter: ~36%/41% avg/peak with every engine disabled and both knobs at 0%). Turning Reverb Size or Delay Time all the way down now skips the actual algorithm entirely — that same test dropped to ~10%/12%. Delay's own startup default moved from 30% to 0% to match. Known trade-off: dropping Delay Time to 0 while a long Feedback tail is ringing freezes that tail rather than fading it out.

    Fixed Dexed sounding gritty — traced to two issues. First, every voice was sharing one raw integer accumulator with no safety clamp, meaning a single voice's own FM math could occasionally produce a value that silently wrapped before ever reaching the output stage — confirmed by comparing against a reference Dexed implementation, which clamps each voice individually before summing. Fixed the same way here, which cleared up grit on single notes immediately. Chords still needed more headroom margin, widened in two more steps to match how the reference implementation handles this (a single generous fixed margin, not dynamic per-chord scaling).

    Grains and Dexed's Mixer level meters are more accurate now — both engines' own soft limiter mathematically bounds their output, so checking the finished signal for level/clipping could never show much even when genuinely driving them hard. Both now read their own internal pre-limiter signal instead, so the Peak bar and clip indicator on Screen::Mixer actually move and light up when they should.

    See DESIGN.md for the full technical write-up, including the structural comparison against a reference Dexed implementation.

    🤖 Generated with Claude Code

  17. v2.2.1v2.2.1 - Fix intermittent save failures1 file

    What's fixed

    Intermittent save failures ("Fail:close9") — Performance saves, Grains preset saves, and Dexed preset saves could all intermittently fail with a FatFs FR_INVALID_OBJECT error at the very end of the write. Root cause: unlike Load and Export, none of the three save triggers suspended the audio engine during their blocking SD write — the live audio ISR kept running at full cost the whole time, racing the SD card's own DMA transfer and occasionally corrupting the file handle right at the final close. All three now suspend audio for the duration, matching Load/Export.

    Also in this release

    • Dexed advanced (per-operator) editor gains two new pages — Velocity Sensitivity and Keyboard Rate Scaling — plus a shared Algorithm diagram page reused from the main Dexed screen.
    • Grains: fixed a choke bug where changing note during a release tail could cut grains short instead of letting the tail finish; added a Trim preview-play button; Reverb Send is now included in saved Grains presets (matching Dexed), bumping the Grains preset format version.

    Getting it onto your Pod

    See README.md's "Building and flashing" section. Short version: copy main.bin (attached below) onto the root of a FAT32 SD card, insert it into the Pod, and power-cycle -- the bootloader flashes it automatically.

    See DESIGN.md for the full technical writeup, including the new "Audio suspended during save" section covering the root cause above.

    🤖 Generated with Claude Code

  18. v2.2.0v2.2.0 - Undo last overdub + per-engine MIDI channel1 file

    What's new

    Undo last overdub — a short tap of Button 2 on Layer:Status instantly restores a layer to right before its most recent overdub. One shared slot across all 4 layers (undoes the single most recent overdub, not a full per-layer history) — starting a new layer's overdub silently invalidates whatever was previously pending, matching the "undo the most recent action" shape every other control in this firmware already has. Captured lazily, one sample at a time inside the overdub write loop itself, after a bulk pre-copy (even heavily chunked across the count-in) caused a real, measured, audible glitch on hardware every time overdub was armed or held.

    Overdub gets its own count-in — long-pressing to overdub now waits for a tempo-locked count-in, same as a fresh Recording, instead of starting the instant the button is pressed. It also auto-stops after exactly one full pass (a short press still ends it early if you want).

    Per-engine MIDI channel filtering — Dexed and Grains each get their own new MIDI page (Omni or channels 1-16), instead of both always responding to the same incoming stream regardless of channel.

    Dynamic Bars ceiling, raised BPM floor — Bars' own maximum is now floor(BPM/12.5) (capped at 16) instead of a flat 16, and the BPM floor moved 40→50. Together these bound the new Undo backup buffer's SDRAM size and fix a pre-existing bug: a 40 BPM/16-bar loop used to silently truncate recording under 6 bars in, with no indication anything had gone wrong.

    Backward-compatible save format — adding the two new MIDI channel fields bumped the on-disk format from version 12 to 13; existing v11 and v12 performances/prefs still load cleanly, with both channels defaulting to Omni.

    ITCM-placed character effects — Drive/Bitcrush/Chorus/Tremolo/Phaser/AutoWah/Flanger and the shared Svf filter now run from fast ITCM RAM, matching this project's existing convention for its own hot-path code.

    Known limitations

    • Undo is a single global slot, not per-layer history — a true per-layer version would cost roughly 4x the SDRAM this feature currently uses.
    • No per-engine MIDI routing beyond channel filtering (no note-range splits, etc.).

    Getting it onto your Pod

    See README.md's "Building and flashing" section. Short version: copy main.bin (attached below) onto the root of a FAT32 SD card, insert it into the Pod, and power-cycle -- the bootloader flashes it automatically. If your Pod has never run the separate bootloader before, see the one-time setup step in that same section first. A ready-made sdcard-template/ folder set (in the repo) is also available to copy onto a fresh card.

    See DESIGN.md for the full technical writeup.

    🤖 Generated with Claude Code

  19. v2.1.0v2.1.0 - Dattorro plate reverb1 file

    What's new

    New shared reverb engine — the shared reverb bus is replaced entirely, swapping daisysp::ReverbSc for a from-scratch float port of Jon Dattorro's 1997 figure-8 plate reverb topology (ported from el-visio/dattorro-verb, MIT License). Verified natively against the original double implementation (matched to ~1.5e-7 relative error) before ever touching hardware. Lighter per-sample (no interpolation/modulation math ReverbSc's random-walk pitch modulation needs) and lighter in memory (~166KB vs ~386KB).

    7 real reverb parameters, not 1 — Global:GLB-FX's existing Size knob now drives the engine's real Decay parameter directly, unchanged in meaning. Two new Global pages expose the other 6:

    • Global:RevTone — PreDelay + PreFilter (Button1), DecayDiffusion + Damping (Button2)
    • Global:RevDiff — Input Diffusion 1 + 2

    Backward-compatible save format — adding those 6 new parameters bumped the on-disk performance/prefs format from version 11 to 12, but for the first time in this project's history, that bump doesn't break old saves: existing v11 performances and startup prefs still load cleanly, with the 6 new fields defaulted to the library's own tuned values.

    Live oscilloscope on more Dexed pages — Feedback, Brightness, EnvSpeed, Filter, Mix, and FX now show a live scope of Dexed's own output, same idiom Grains' Filter page already used.

    Known limitations

    • Reverb parameter changes aren't smoothed — turning DecayDiffusion (or others) while the tank has real energy in it can click, matching the original library's own unsmoothed design.
    • Decay's stability near 100% is unverified — unlike ReverbSc's documented "infinite at 1.0," the Dattorro library has no equivalent documented ceiling.

    See DESIGN.md for the full technical writeup.

    🤖 Generated with Claude Code

  20. v2.0.01 file

    PZD-4LOOP-DEXED-GRAINS v2.0.0

    The big one: this project's original 4-track looper now runs two full independent MIDI-played instruments alongside it, plus a new transport mode for the looper itself. Major version bump because of that scope, and because save file formats changed (see Compatibility below).

    New: Dexed

    A real 6-operator, 10-voice DX7 clone built around Google's own msfa emulation core (Apache-2.0) -- the genuine 32 algorithms and envelope model, not an approximation.

    • 3129 factory presets across 54 folders (the 4 real Yamaha ROM cartridges plus ~50 curated sound-type categories), browsable via a Roms/Dexed/Imports/User group chooser.
    • Real DX7 SysEx import -- drop a .syx file (single voice or a 32-voice bulk dump) onto the SD card and import it, each bank getting its own named folder.
    • Algorithm diagram, Brightness/Envelope Speed macros, a full per-operator advanced editor, and automatic per-voice-count headroom compensation so hot patches don't distort when played as chords (smoothly ramped, so the compensation itself doesn't click on NoteOn/NoteOff).

    New: Grains

    A monophonic granular instrument with independent Grain (fixed anchor) and Scan (sweeping anchor) layers -- Fill/Gap/Direction fully independent per layer, Jitter (fixes a real periodic-click artifact), an adjustable Scan Range with Bounce/Wrap, rhythmic pattern gating with tempo sync, and WAV import widened to every common real-world sample rate (8-192kHz) and bit depth (16/24/32-bit PCM, 32-bit float).

    New: Global:Speed Freeze

    A 3rd transport mode (Normal/Scrub/Freeze) -- Freeze genuinely holds playback on a small Hann-windowed looping window instead of the looper advancing, so you can scrub through a frozen "drone."

    Also included

    Screen::Mixer, SD card management (Duplicate/Delete for Performances and Grains Presets), the shared Files/New load chooser convention, and a shared delay bus alongside the existing shared reverb bus.

    Compatibility

    Save file format versions were bumped for Performances and Grains Presets (Dexed Presets are unaffected). Saves from firmware older than this release will be cleanly rejected on load, not corrupted -- re-save anything you want to keep under this version.

    Getting it onto your Pod

    See README.md's "Building and flashing" section. Short version: copy main.bin (attached below) onto the root of a FAT32 SD card, insert it into the Pod, and power-cycle -- the bootloader flashes it automatically. If your Pod has never run the separate bootloader before, see the one-time setup step in that same section first. A ready-made sdcard-template/ folder set (in the repo) is also available to copy onto a fresh card.

    Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com