Phantasmagoria v2 - Native C++ Spectral Delay Engine

FuzzyLotus

Member
[RELEASE] Phantasmagoria v2: Native C++ Spectral Delay Engine

Project Overview

Phantasmagoria is a lush, atmospheric spectral delay engine designed for shoegaze, doom, and ambient soundscapes. It is a 6-knob, 4-toggle "no menus" pedal built for the Electrosmith Daisy Seed on the PedalPCB Terrarium platform. The engine combines reverse delay, pitch shifting, and an infinite freeze engine with a massive echo-chamber reverb.

This release marks a major milestone in the development of the project. While the original version was built using PlugData/Pure Data, the move to native C++ represents a total architectural shift. To keep technical discussions clear and organized, this thread will serve as the hub for the new C++ engine, while the original thread remains the home for legacy builds.

Media Demo
Watch the Phantasmagoria v2 in action on YouTube, this video for what it does in short format:

This one for a short clip of types of sounds that can come out of it:


Development Evolution: New in v2
By moving to a native C++ architecture, the engine has received several significant upgrades—most notably, the complete eradication of the Pure Data noise floor:

  • The 1kHz Whine Fix (Dead-Quiet Signal Path): One of the most frustrating limitations of the Pure Data/PlugData environment was its lack of support for lower block sizes, which inherently introduced a notorious 1kHz whine into the audio. Moving to C++ allowed us to drop the block size all the way down to 1. The result? That high-frequency artifact is completely gone, leaving a pristine, noise-free signal.
  • Massive Performance Boost: The DSP is now significantly more efficient overall, allowing for cleaner processing and near-zero latency.
  • Improved Shimmer (SW4): The shimmer engine has been retuned to feed directly into the reverb tail for a more "angelic" wash.
  • Enhanced Pitch Shifting: Grain-based processing for the Fifth Down and Octave Down modes is smoother and more responsive than the previous implementation.
  • New Web Flasher Support: Users can now flash the pedal directly from a browser in seconds with no coding or toolchains required.

Control Interface (v2)
  • Knob 1: Delay Time (20ms - 1800ms)
  • Knob 2: Feedback (0 - 95%)
  • Knob 3: Reverb Mix
  • Knob 4: Tape Warble Depth
  • Knob 5: LFO Speed
  • Knob 6: Dry/Wet Mix
  • SW1: Reverse Delay on/off
  • SW2: Fifth Down pitch shift on/off
  • SW3: Octave Down pitch shift on/off
  • SW4: Shimmer (Octave Up) on/off
  • FS1: Bypass
  • FS2: Freeze: tap to toggle, hold to accumulate

Installation & Flashing Instructions
The full source code, updated documentation, and ready-to-flash .bin file are now available on GitHub:

To flash your pedal:
  1. Put your Daisy Seed into BOOT mode.
  2. Navigate to flash.daisy.audio in a compatible browser.
  3. Upload the phantasmagoria.bin file.

Note for Windows Users: If you encounter connection issues, refer to the README on GitHub for the Zadig/driver fix to ensure your PC recognizes the Daisy Seed in DFU mode.

Technical Specifications
The C++ rebuild focuses on maximizing the Daisy Seed hardware potential by eliminating the overhead of the original implementation:
  • Latency & Noise Optimization (Block Size 1): By running the engine at a Block Size of 1 (bypassing PD's fixed 64/48 block size limits), the engine provides near-instantaneous audio response and entirely eliminates the 1kHz hardware whine that plagued previous builds.
  • Architecture: Native C++ port utilizing the libDaisy and DaisySP libraries.
  • Pitch Shifting: Refined grain-based processing with smoother transitions and fewer artifacts.
  • Memory Management: Optimized buffer management for the 2-second delay and triple-buffer freeze engine.
  • Audio Fidelity: High-fidelity 48kHz sample rate with a drastically improved signal-to-noise ratio.

Legacy Archive (Pure Data / PlugData)
The original version remains available for DIYers who prefer working in visual environments or wish to study the original logic:
AI Disclaimer
I have used AI to help me write up the code and documentation, but the ideas and 80+hours of work I've put into fine-tuning things bug fixing, unplugging the pedal, turning the amp on, waiting for the lamps to get hot, were all very real and a challenge I've set for myself. As a complete code noob (except some BASIC JavaScript coding) this is the only way I could accomplish my goal. I hope you forgive me for turning to the dark side :(

Other than that,

Happy building and doom-ing!
 
Last edited:
If I forgot a shout-out in the readme file, please know it was not intentional and your help was vital to the success of this project! Let me know if you are one of these precious unnamed contributors and I'll add your name and project to the list!
 
Just wanted to say that I loaded this up and it's staying on the board. This is great, thank you for all the hard work you put into this. I'm very into the drone/freeze effect I can do with chords in between my bands songs to hold the tension.
 
Heck yeah! Thank you for your comment! It's also definitely one of my favorite pedals now, the range you can get from it is amazing!

You are going to be pleased to know I've recently returned to the code to tweak a few things. I've realized that knob 4 could be made a bit more useful by pushing the sweet spot to 10o clock instead of 9 and stretching the useful range to 2. Did a few code optimization as well for better response and dynamics, mostly.
Testing it and going to release the new patch this Sunday.

Freeze is exactly why I have finally dove into coding this, as I always wanted to get a bit more from my old sustainer :) I'm glad you are also quite the fan!

Cheers!
 
Heck yeah! Thank you for your comment! It's also definitely one of my favorite pedals now, the range you can get from it is amazing!

You are going to be pleased to know I've recently returned to the code to tweak a few things. I've realized that knob 4 could be made a bit more useful by pushing the sweet spot to 10o clock instead of 9 and stretching the useful range to 2. Did a few code optimization as well for better response and dynamics, mostly.
Testing it and going to release the new patch this Sunday.

Freeze is exactly why I have finally dove into coding this, as I always wanted to get a bit more from my old sustainer :) I'm glad you are also quite the fan!

Cheers!
That's awesome, once it's released I'll be sure to download it and throw it in there. I've got one more terrarium I'd like to use for a dedicated reverb, or even something like riemanns grave by discomfort designs. I'd really like to start coding my own stuff, but I feel like I need to study more and put more thought into what I'd like to make.
 
That's awesome, once it's released I'll be sure to download it and throw it in there. I've got one more terrarium I'd like to use for a dedicated reverb, or even something like riemanns grave by discomfort designs. I'd really like to start coding my own stuff, but I feel like I need to study more and put more thought into what I'd like to make.
It's such a cool project to learn to code, I've learned so much from this project! If you have the time, go for it! It's super rewarding! I've loved it so much I just ordered a few more boards to have a dedicated development pedal !

Otherwise you'll have to hope someone on here, maybe me, releases more stuff later! ;)
 
It's such a cool project to learn to code, I've learned so much from this project! If you have the time, go for it! It's super rewarding! I've loved it so much I just ordered a few more boards to have a dedicated development pedal !

Otherwise you'll have to hope someone on here, maybe me, releases more stuff later! ;)
Oh wow, a dedicated pedal?! That'd be a great idea. Was thinking about snagging a few more terrariums when they were back in stock.

I do like tinkering, and I have been thinking about creating a couple things. I haven't done any coding in a long time. I guess I'll have a look around in YouTube. You have any good places to start? I know the wiki has a lot of info, also is there a preferred method to coding these days? I see a lot of people using c++ and pure data.
 
Thank you Jeff for your message! I'm glad you enjoy it! 2nd footswitch is magical, and with my next version that I'll be dropping shortly, it'll be even more magical :)
Oh wow, a dedicated pedal?! That'd be a great idea. Was thinking about snagging a few more terrariums when they were back in stock.

I do like tinkering, and I have been thinking about creating a couple things. I haven't done any coding in a long time. I guess I'll have a look around in YouTube. You have any good places to start? I know the wiki has a lot of info, also is there a preferred method to coding these days? I see a lot of people using c++ and pure data.
Yesss I’ve been thinking about building a pedal that can kinda learn from my playing and jam along with me. Not totally sure yet how I’m gonna approach that, but it’s definitely next on the list.

Right now I’m just wrapping up another build for a friend, it’s more of a chorus + reverb engine. It’s basically there, just ironing out a few small kinks and putting together a demo video, so that should be out pretty soon.

For the coding side, I started out in PlugData to sketch things out and understand the flow, then gradually moved everything over to C++ once I knew what I actually wanted. Most of the heavy lifting was done with Claude Opus and ChatGPT, and then I tweaked and refined everything from there.

My plan for the next pedal is pretty similar, just a bit more intentional from the start. I’ll map out all the controls first, knobs, toggles, footswitches, and what I want each one to do, then build a rough version to test the idea, and once it feels right I’ll move into C++ and build it properly, one piece at a time until it really behaves the way I want.

I kinda landed on this workflow naturally while building my last pedal, and it ended up working really well, so figured I’d share.

I started in PlugData because it’s just way faster to get ideas going. You can throw together a patch, move stuff around, test routing, see what works.

But pretty quickly I hit a wall where things sounded okay but not great. Dynamics weren’t quite there, things felt a bit soft, and I didn’t fully trust what was happening under the hood.

That’s where C++ came in.

C++ is just way better for getting proper dynamics and feel, making sure nothing weird is happening in the background, and controlling everything exactly how you want. The downside is it’s slower to work in and harder to debug.

So the combo just made sense. PlugData to figure out ideas, C++ to actually build the real thing.

What I ended up doing was mapping everything out first before touching code. What each knob does, what each toggle does, how the footswitch behaves. Just defining the pedal so I’m not guessing later.

Then I build a rough version in PlugData. Just enough to understand the signal flow, try routing ideas, and see if the concept even works. I don’t try to make it sound perfect there.

Once I know it works, I move to C++ pretty early and start building it properly. One feature at a time.

Big rule for me was not moving on until the current feature is solid and bug free. Each part easily went through like 20 iterations before I was happy with it.

That’s also where all the important stuff happens. Getting the dynamics right, gain staging, smoothing everything out, making sure bypass is clean, and making sure the pedal actually responds well when you play.

If something feels off, I try to figure out what kind of problem it is. If it’s the structure, I rethink the idea. If it’s the sound or feel, I fix it in C++.

I basically stayed in that loop until everything felt right.

One thing I learned the hard way is that unplugging and replugging everything all the time gets old really fast. That’s actually why I’m building a dedicated version now with USB access to the Seed so I don’t have to pull it out every time I want to flash new code.

At the end of it, PlugData is amazing for exploring ideas quickly, but C++ is where the pedal actually becomes an instrument, for me at least!

So yeah, prototype fast, then rebuild it properly. That combo worked way better than trying to force everything into one environment.
 
Phantasmagoria v31 — Switch System Rework

Hey everyone,

Wanted to share a pretty big update to Phantasmagoria, the spectral delay firmware I've been building for the Terrarium. This one is less about adding new DSP and more about rethinking how the pedal actually feels to play.

Quick background if you haven't seen it before: Phantasmagoria is a delay/reverb/freeze effect running on the Daisy Seed in a Terrarium. Forward and reverse delay, multi-tap echo chamber reverb, tape warble, freeze with accumulate. All the source is on GitHub if you want to build it yourself or just poke around the code.




What changed in v31

The short version: I gutted the old switch system and rebuilt it.

The old switches were reverse, fifth down, octave down and shimmer. They worked, but in practice I almost never flipped them. They felt like extras bolted onto the side of the pedal rather than part of the instrument. Turning on the octave down didn't change how the pedal felt — it just added another layer on top. Same with shimmer. After a while I realized I was only ever using SW1 (reverse) and the footswitches.

So instead of switches that add things, I wanted switches that change things.




The New Switches

SW1 — REV
(unchanged)
Forward vs reverse delay. This was already the most useful switch and it stays exactly as it was.

SW2 — ROOM (new)
  • OFF: Standard delay into reverb — they do their own thing.
  • ON: The reverb chamber memory folds into the repeat structure. The room becomes part of the delay world instead of sitting next to it.
Sounds more like you're playing into a haunted space than into a delay pedal with a reverb tacked on after it.

SW3 — HALO (new)
  • OFF: Normal wet signal.
  • ON: A detached trailing aura appears behind the wet field. Think of it like a second shadow living behind the repeats.
It's clearly there but it sits behind everything else — atmospheric, not dominant. Gives the pedal a more haunted, ambient identity without adding volume or clutter.

SW4 — EVOL (new)
  • OFF: Freeze is a stable anchor. You capture something and it holds still.
  • ON: The frozen layer slowly breathes and moves internally.
Very subtle — no pitch wobble, no volume pumping. It just stops sounding like a static sample and starts sounding like a living texture. Useful when you want the freeze to be a pad rather than a snapshot.




The Design Idea

REV
— changes the time world
ROOM — changes the spatial world
HALO — changes the ambient aura
EVOL — changes the frozen world

Every switch reshapes something that already exists instead of stacking another voice on top. The pedal feels more like one instrument now instead of a delay with a bunch of optional extras.




Other Changes Worth Mentioning

  • Freeze survives bypass. Turning off the main effect with FS1 no longer kills an active freeze. You get dry + freeze when bypassed with freeze active, dry only when freeze is off. This was intentional — freeze is useful as its own thing even when you don't want the delay running.
  • Bypass transition is cleaner. The old routing had a brief signal dip when toggling the effect. Fixed that with a proper crossfade.
  • K5 (LFO speed) got a new control curve. The sweet spot used to arrive way too early on the knob and disappear quickly. Reshaped it so the most musical range sits more around the middle of the travel.
  • Old pitch engine is completely removed. The grain readers and pitch buffers are gone from the code. If anyone actually wants those features I can point you to the v30c release which still has them.
  • LED2 dims to 75% when accumulate is active so you can see the mode change.




Where To Get It

GitHub:
https://github.com/FuzzyLotus/Phantasmagoria

Grab the .bin from the releases page and flash it with the web programmer at flash.daisy.audio — no toolchain needed. Instructions are in the README.

If you're running an earlier version and want to keep the pitch shifting stuff, v30c is still available as a tagged release.




Would love to hear what anyone thinks if you try it out. Especially curious if ROOM and HALO read the way I intended on other people's rigs — I've only tested with my own amp setup so far.
 
Last edited:
Back
Top