• Welcome to ASR. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

Introducing DSPi | A powerful, user friendly and open source DSP for less than a cup of coffee

Weeb Labs

Addicted to Fun and Learning
Joined
Jun 24, 2020
Messages
909
Likes
2,801
Location
Ireland
For the longest time, I have been in search of the “perfect” inexpensive audio DSP device. Something with user friendly control software that could accept a USB input, apply PEQ, delays and other essential processing and then produce a digital output.

Over the holidays, I was (un)fortunate enough to contract the flu, which provided me with an unexpected three week period without work. Having received a Raspberry Pi Pico for Christmas from my wife, I decided this would be the perfect opportunity for a little passion project. The goal was to develop the perfect inexpensive audio DSP using that €5 Pico board. And so, here we are.


1770266641250.png



DSPi is a firmware that transforms a Raspberry Pi Pico or Pico 2 (RP2040 or RP2350) into a very competent, extensible and inexpensive little digital audio processor. It acts as a USB sound card with an onboard DSP engine, allowing you to make use of essential tools like room correction, active crossovers, parametric EQ, time alignment and more.

Here are some of the firmware’s present capabilities:
  • Standard USB audio device with plug-and-play compatibility under Windows, macOS and Linux.
  • 44.1KHz and 48KHz sample rate support.
  • 32-bit float audio pipeline with 64-bit internal for the RP2350 (32-bit fixed point for the RP2040)
  • 5 logical audio channels - 2 Master Inputs, 2 Main Outputs and 1 Subwoofer Output.
  • Parametric EQ with up to 50 slots available (10 per channel).
  • Per-channel gain, mute and delay controls.
  • S/PDIF output to enable the use of any fancy DAC.
  • Clean analog mono subwoofer output that enables direct active subwoofer connection without the need for a second DAC.
  • Loudness compensated volume control with multiple settings that follows the host’s digital volume control and is based upon the Fletcher-Munson equal loudness contours.
  • Permanent saving of all settings to onboard flash storage.
Every single function present within this firmware is fully documented and accessible to anybody wishing to support it in their software.

Which brings me to the second important point. As fancy as the firmware might be (not to toot my own horn), it is worth nothing if one has to be a software developer in order to make use of it. There needs to exist user friendly software that “just works”.

To that end, I have also written a set of very modern, functional and straightforward applications to that talk to the DSPi firmware. The first of these is called DSPi Console.

Let’s take a look at the macOS version first. It follows all established macOS UI conventions, while remaining reasonably information dense.

Screenshot 2026-02-05 at 303.27.37.png

What you see above is the default page that loads when one first launches the application. It is called the Dashboard View and is designed to provide all of the basic information that a user is likely to need, at a glance. The sidebar displays a list of all available channels, as well as a global preamp control and bypass toggle for the Master channel PEQ filters to facilitate rapid A/B comparisons.

Screenshot 2026-02-05 at 03.48.08.png



The System Status section displays CPU utilisation for both of the RP2040/2350’s cores, along with realtime peak meters for all audio channels.


1770265737951.png



The Filter Response graph displays the frequency response of every active PEQ filter on every channel. In the event that two or more channels contain the same filter configuration (such as when using headphone AutoEQ profiles - we’ll get to that) those channels are displayed with a gradient representing their respective legend colors, rather than simply stacking them.

By clicking the pill legends beneath this view, channels can be shown or hidden. By default, all channels are shown.


1770268760383.png



Below is the PEQ dashboard. This displays the content of every PEQ filter slot on every channel, along with their corresponding delay settings.


1770265919519.png



Selecting a channel from the sidebar displays the relevant PEQ slots, gain and delay controls for that channel. It also becomes the only channel active on the graph. Clicking said channel again returns to the dashboard view, with all channels enabled once more.


Screenshot 2026-02-05 at 03.50.08.png
Screenshot 2026-02-05 at 03.55.43.png
.
Screenshot 2026-02-05 at 03.56.06.png
.
Screenshot 2026-02-05 at 03.55.57.png



Tucked away in the menu bar, we have load/save functionality for filters and settings (REW format supported) and diagnostics but one menu item in particular may have caught your eye.

Screenshot 2026-01-20 at 17.25.18.png

DSPi Console includes full integration with the AutoEQ headphone database. There is a browser with search functionality, as well as support for favourites. Simply choose your headphone, measurement source and the corresponding filters are immediately applied to the Master channels. The headphone database can be updated either automatically via the internet or from a user-provided JSON file.

1770266191651.png


We also have granular control over the loudness compensated volume control. It can be toggled on or off, the listening level can be set and the intensity of the effect can be increased or attenuated to taste. This function is driven by the host's volume control for the USB audio device.



1770266291640.png



The Windows version of DSPi Console was designed to match the macOS version as closely as possible. It is written in C# and makes use of WinUI3. All channel filter settings, delays, gains, metering, AutoEQ functionality and other functions are also present within the Windows version. Loudness compensated volume control will be implemented shortly.

Finally, we have the CLI variant of these applications called DSPi Terminal. This is a compact, terminal-based port of the functionality found within the GUI applications (including AutoEQ) and it is written in Python. Every step of command syntax is autocompleted, so it can be operated easily without requiring the user to know a single command.


1770266388029.png


The firmware itself and DSPi Console (Windows/macOS) are currently available via GitHub and I encourage any interested readers in possession of a Raspberry Pi Pico or Pico 2 to give them a try! Code contributions are always greatly appreciated; I'm just a lone weeb with a robot intern. :P

Anybody interested in helping to fund the continued development of the project is welcome to contribute via the Ko-Fi link found in my signature and on my GitHub profile sidebar.

Links:
- Firmware (Refactor branch; choose latest release)
- DSPi Console (macOS)
- DSPi Console (Windows)
- DSPi Terminal (Soon)

Thank you for reading and I hope somebody out there finds this as exciting as I do! :)
 

Attachments

  • 1770265867688.png
    1770265867688.png
    130.8 KB · Views: 444
Last edited:
This is absolutely fantastic, a great answer to a question I had about 5 years ago, namely "Why can a $20 pair of headphones have 10-20 bands of PEQ under the hood, but I can't buy a simple box to do the same for less than $200?"

This might even be enough to get me to move away from EQAPO, I could also stop using Soundsource on my Mac work computer. I guess the only thing I'd miss would be crossfeed, so maybe I could be so bold as to put a feature request in the first comment... sorry :D


That said, probably still worth a go just for the discrete sub out...

11/10 contribution here!
 
This is absolutely fantastic, a great answer to a question I had about 5 years ago, namely "Why can a $20 pair of headphones have 10-20 bands of PEQ under the hood, but I can't buy a simple box to do the same for less than $200?"

This might even be enough to get me to move away from EQAPO, I could also stop using Soundsource on my Mac work computer. I guess the only thing I'd miss would be crossfeed, so maybe I could be so bold as to put a feature request in the first comment... sorry :D


That said, probably still worth a go just for the discrete sub out...

11/10 contribution here!
Thank you! Crossfeed is entirely feasible and a great idea, so I've just logged it on the repo as a feature request. Expect that to pop up very soon. :D
 
It looks like brilliant work but could you please explain for dummies how to connect this to your audio chain?

I have used a big PI for streaming music with moode or volumio but with an integrated DAC. I also use a PI with Kodi, attached to my TV.
In all those cases the PI is part of the signal chain.
The PicoPI only has a USB in?

Thanks!
 
It looks like brilliant work but could you please explain for dummies how to connect this to your audio chain?

I have used a big PI for streaming music with moode or volumio but with an integrated DAC. I also use a PI with Kodi, attached to my TV.
In all those cases the PI is part of the signal chain.
The PicoPI only has a USB in?

Thanks!
SPDIF on pin15?
 
SPDIF, I2S and Bluetooth input are on the roadmap but for now, input is exclusively via USB Audio.

We've reached that magical sleepless 8 AM hour again, so I must get some rest. I will try to answer any pending questions before work, later in the morning. :)
 
Very nice work, eager to try it out!
Will be other Pico 2 based boards be supported by the firmware, like the Waveshare RP2350-Plus, so you can have USB-C instead of Micro-USB?
 
Very nice work, eager to try it out!
Will be other Pico 2 based boards be supported by the firmware, like the Waveshare RP2350-Plus, so you can have USB-C instead of Micro-USB?
Thank you! Yes, any RP2040/2350 board is supported. Some of the very compact ones might not expose GPIO 20, so that would just require a small adjustment to the SPDIF pin number.
 
I should have a spare Pico somewhere, but probably need to wait for the CLI - assuming the Windows one won't work in Wine due to needing device access. I assume the Pico will directly drive a 3.3V toslink transmitter. Do you know whether it will directly drive coax (via a couple of resistors and a cap) or need a buffer in between?
 
I should have a spare Pico somewhere, but probably need to wait for the CLI - assuming the Windows one won't work in Wine due to needing device access. I assume the Pico will directly drive a 3.3V toslink transmitter. Do you know whether it will directly drive coax (via a couple of resistors and a cap) or need a buffer in between?
Yes. The Pico will drive either a TOSLINK TX or passively filtered coaxial output. There are some simple diagrams on the repository.
 
This is very impressive! I have a Pico so I’ll definitely try this.
Quick question, once you implement SPDIF input, would it be possible for you to also implement decoding of the LG Sound Sync information in the SPDIF control bits?

I made a post about this so that a Pico can be used as a cheap DAC for LG TVs while being able to control the volume with the TV remote.
 
Congrats, great project.
As you probably have a few gpios free, some suggestions, and sorry if they are there and I've missed them:
- Provision for a ir remote and a display for volume. Why? People using the sub out will need to use it as preamp
- what happens to spdif out when there is no signal? Don't know what is the right thing to do but I've had devices that react bad to the led on without a valid signal, and the pico doesn't have on/off button.
 
Back
Top Bottom