Skip to content

Add effect chain support - #104

Merged
xconverge merged 4 commits into
bkshepherd:mainfrom
optilude:effect-chain
Sep 8, 2026
Merged

xconverge merged 4 commits into
bkshepherd:mainfrom
optilude:effect-chain

Conversation

@optilude

@optilude optilude commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

This PR adds the ability to create an EffectChain that links two or more effects into a single slot. You can configure how the knobs are mapped and what happens with the second foot switch.

There are some limitations - documented in the README. The main one is that a number of effects can only be loaded once, so if you have, say, a ReverbModule in the global list, you can't also have it in an EffectChain.

A nice way to use this is to have a delay + reverb or tremolo + reverb on a single slot, where you can have useful mappings of all six knobs.

One other improvement: The make program-dfu target now waits for a DFU-capable device if none is connected. This means you can run that command and then reboot the pedal, rather than have to time the former in the 2-3s window when the boot loader accepts the request.

Includes:
- First pass at effects chain system (effect_chain.cpp/h)
- Fix display issue
- Make DFU reflashing easier
- Add examples to Makefile and loaded_effects.h
- Fix WAVE parameter name conflict in harmonic tremolo
- Update guitar_pedal.cpp integration

Co-Authored-By: Claude Code <noreply@anthropic.com>
} // namespace soundmath

#define WAVE
#define STFT_WAVE_H

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just to explain this change - it should have no effect, but the #define WAVE was causing a conflict with the WAVE parameter sentinel for TremoloModule.


# Override libDaisy's `program-dfu` to wait for a DFU-capable device instead
# of failing immediately if one isn't already enumerated. Without -w, you
# have to win a race against the bootloader's DFU window (reset the pedal,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have been performing this race for toooooo long without this 😆

@xconverge

Copy link
Copy Markdown
Collaborator

This is sweet!

@xconverge

Copy link
Copy Markdown
Collaborator

Did you see the SHIFT mode I played with to map more than 6 knobs?

In the delay module, if you press and hold the alternate foot switch for 1 second, it switches the knobs over to a 2nd set of parameters and puts a UI element on the screen

That could potentially be useful as well with a feature like this effect chain

https://github.com/bkshepherd/DaisySeedProjects/blob/main/Software/GuitarPedal/Effect-Modules/delay_module.cpp#L518

https://github.com/bkshepherd/DaisySeedProjects/blob/main/Software/GuitarPedal/Effect-Modules/delay_module.cpp#L543

@optilude

optilude commented Sep 6, 2026

Copy link
Copy Markdown
Contributor Author

Did you see the SHIFT mode I played with to map more than 6 knobs?

Yes - good idea. Let me play with it a bit.

@optilude

optilude commented Sep 6, 2026

Copy link
Copy Markdown
Contributor Author

I've added parameter bank shift now. I also realised that whilst there are many effect you can only instantiate once, you can actually reuse instances across different chains (but they share parameters so if you turn a knob in one that affects the other). There was an edge case bug about this, which is fixed, and I've updated the docs.

…effect doesn't lose saved settings (see comment)
@xconverge
xconverge merged commit ccae0f2 into bkshepherd:main Sep 8, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants