PicoDSP is a Minimoog-inspired virtual analog emulator running on the Raspberry Pi Pico 2 (RP2350). It leverages the power of the infinitedsp-core library to deliver a rich, low-latency audio experience directly from a microcontroller.
This project serves as a flagship implementation of infinitedsp-core in an embedded, no_std environment using the Embassy async framework.
- Virtual Analog Engine: A Minimoog-inspired architecture with 3 antialiased Oscillators + Noise, Mixer, ZDF Ladder Filter, and Envelopes.
- Effects Chain: Built-in Delay (Stereo), Reverb (Mono), and Stereo Widener.
- USB Audio Class 1.0: Acts as a USB Microphone, streaming synthesized audio directly to your PC/Mac/Linux machine at 48kHz, 16-bit stereo. No DAC required for recording!
- USB MIDI: Full MIDI control over parameters (Cutoff, Resonance, Envelopes) and Note input.
- Dual Core Processing:
- Core 0: Handles USB communication (Audio/MIDI/CDC) and system tasks.
- Core 1: Dedicated DSP processing loop for maximum stability and low latency.
- Preset Management: Save and load presets to the Pico's internal Flash memory via MIDI SysEx.
- Raspberry Pi Pico 2 (RP2350)
- Micro-USB cable
Note: No external DAC (Digital-to-Analog Converter) is strictly required as the audio is streamed via USB. However, there are plans to extend the code to support I2S DACs and DIN MIDI in the future.
- Rust (stable)
thumbv8m.main-none-eabihftarget:rustup target add thumbv8m.main-none-eabihf
- picotool
cargo build --release- Hold the BOOTSEL button on your Pico 2 while plugging it in.
- Run:
(This uses
cargo run --release
picotoolconfigured in.cargo/config.tomlto load the ELF directly)
Or, if you prefer UF2:
picotool uf2 convert -t elf target/thumbv8m.main-none-eabihf/release/picodsp picodsp.uf2 --family rp2350-arm-s
# Then drag picodsp.uf2 to the RPI-RP2 drive- Connect the PicoDSP to your computer via USB.
- It will appear as:
- Audio Device: "PicoDSP (infinitedsp ...)" (Input device)
- MIDI Device: "PicoDSP MIDI"
- Open your DAW or standalone synth host.
- Select "PicoDSP" as your Audio Input to hear the synth.
- Route MIDI to "PicoDSP MIDI" to play notes.
| CC # | Parameter |
|---|---|
| 1 | Mod Wheel |
| 5 | Portamento Time |
| 64 | Sustain Pedal |
| 71 | Filter Resonance |
| 74 | Filter Cutoff |
| 120 | All Sound Off |
| 123 | All Notes Off |
The project is structured as follows:
src/common: Shared constants and data structures.src/control: MIDI handling and parameter logic.src/data: Preset definitions and Flash storage management.src/dsp: DSP graph construction (Oscillators, Filters, Effects).src/tasks: The main tasks for Core 0 (System/USB) and Core 1 (Audio).src/usb: USB descriptors and device implementation.
This project is licensed under the MIT License - see the LICENSE file for details.