some daisy seed effect pedal firmware
run nix-shell to get dependencies. see shell.nix for a list of dependencies if
you are less of a nix weenie than i am
be sure to check out all the submodules:
$ git submodule update --init --recursive
to build firmware blobs for all effects:
$ make
to run tests:
$ make test
compile_commands.json is automatically merged from both ARM and host builds into the project root for clangd/language server support.
for quick iteration without flashing firmware, the host CLI lets you run effects on mp3 files from your computer.
build the host CLI:
$ make console
run input through the default effect (granular) and play through your computer:
$ ./build-test/src/console/jazz-console input.mp3
save processed output to a new mp3:
$ ./build-test/src/console/jazz-console input.mp3 --output processed.mp3
if playback fails on your machine, disable playback and render offline:
$ ./build-test/src/console/jazz-console input.mp3 --no-play --output processed.mp3
list available effects:
$ ./build-test/src/console/jazz-console --list-effects
select one effect:
$ ./build-test/src/console/jazz-console input.mp3 --effect clip
try the fridge terminal preset:
$ ./build-test/src/console/jazz-console input.mp3 --preset presets/host/fridge_demo.toml --output fridge_demo.mp3
inspect the fridge preset’s LFO motion without rendering audio:
$ ./build-test/src/console/jazz-console --preset presets/host/fridge_demo.toml --fridge-lfo-chart
render that LFO motion as a matplotlib image:
$ python scripts/plot_fridge_lfo.py --preset presets/host/fridge_demo.toml --output fridge_lfo.png
chain multiple effects in order:
$ ./build-test/src/console/jazz-console input.mp3 --effect clip,lowpass,granular
you can tune parameters from the command line:
$ ./build-test/src/console/jazz-console input.mp3 --effect clip,la_sort --clip-threshold 0.2 --la-sort-weight-center 0.65
supported parameter flags:
--clip-threshold,--clip-gain--anticlip-threshold,--anticlip-gain--lowpass-alpha,--highpass-alpha--cursed-lowpass-alpha,--cursed-highpass-alpha--la-sort-weight-center,--la-sort-weight-sharpness
the fridge effect is configured through preset keys with the prefixes
fridge_head_N_ and fridge_lfo_N_; see presets/host/fridge_demo.toml.
load a preset file:
$ ./build-test/src/console/jazz-console input.mp3 --preset presets/host/clip_lasort.toml --output processed.mp3
example preset included in repo:
presets/host/clip_lasort.toml
CLI flags override preset values, so you can start from a preset and tweak:
$ ./build-test/src/console/jazz-console input.mp3 --preset presets/host/clip_lasort.toml --clip-threshold 0.1
JSON preset example:
$ cat > /tmp/example_preset.json <<'EOF'
{
"effect_chain": ["clip", "la_sort", "highpass"],
"clip_threshold": 0.3,
"clip_gain": 10.0,
"la_sort_weight_center": 0.62,
"la_sort_weight_sharpness": 4.0,
"highpass_alpha": 0.2
}
EOF
$ ./build-test/src/console/jazz-console input.mp3 --preset /tmp/example_preset.json --output processed.mp3
the CLI depends on ffmpeg and ffplay being available in your shell.
to flash a particular effect to a daisy seed via STLink:
$ make flash DIR=delay
or manually:
$ st-flash write build/src/delay/delay.bin 0x08000000
$ st-flash reset
see console for how to set up the console. reading from it should be something
like screen /dev/ttyACM0 115200.
- delay: literally just a perfectly clean delay.
- reverse: a simple reverse delay.
- granular: weird semi-generative granular delay.
- rachel: heavily modulated multi-delay
- low_pass_filter: simple one-pole lowpass filter.
- high_pass_filter: simple one-pole highpass filter.
- cursed_low_pass_filter: cursed lowpass filter using exponentiation and multiplication.
- cursed_high_pass_filter: cursed highpass filter using exponentiation and multiplication.
- la_sort: sorting-based effect with weighted tap from sorted buffer.