Nice work. Promoted to home page.
Thank you.Nice work. Promoted to home page.
Thank you! Additional output channels are certainly possible but it is always a matter of resource allocation. Before adding any further output channels, I will be focusing on optimizing the existing implementation.Great work! Would it be possible to and an additional sub channel for a 2.2 set-up?
I was wondering about that. Since you have a quite complex oversampling mechanism for the subwoofer output now, I would estimate that changing this to another SPDIF output would be a good tradeoff. Or is most of the oversampling done in hardware and therefore does not tax the CPU very much?Thank you! Additional output channels are certainly possible but it is always a matter of resource allocation
PIO handles the actual encoding but all of the 256x oversampling, noise shaping and dither is handled in software on the CPU. Core 1 sits around 67% at 288MHz for the RP2350 and the subwoofer output is the only process running on it.I was wondering about that. Since you have a quite complex oversampling mechanism for the subwoofer output now, I would estimate that changing this to another SPDIF output would be a good tradeoff. Or is most of the oversampling done in hardware and therefore does not tax the CPU very much?
hah! Amazing work.. this looks like huge fun to tinker with - Many thanks from the community for the efforts. I use Pico2's for all sorts and this is a very nice addition to the functionality for tinkering.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.
View attachment 509243
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:
Every single function present within this firmware is fully documented and accessible to anybody wishing to support it in their software.
- 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.
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.
View attachment 509229
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.
View attachment 509230
The System Status section displays CPU utilisation for both of the RP2040/2350’s cores, along with realtime peak meters for all audio channels.
View attachment 509231
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.
View attachment 509245
Below is the PEQ dashboard. This displays the content of every PEQ filter slot on every channel, along with their corresponding delay settings.
View attachment 509233
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.
View attachment 509238View attachment 509234. View attachment 509235. View attachment 509236
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.
View attachment 509237
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.
View attachment 509239
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.
View attachment 509240
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.
View attachment 509241
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.
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!![]()
Nice little project and might be sufficient for many scenarios and has a very good Cost-benefit ratioIt 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.
It has TTL level SPDIF on a gpio. With a few components you can convert this to the correct level for SPDIF output or TOSLINK.But I don't follow how one would connect a DAC?
So one has to be a hardware developer in order to make use of itIt has TTL level SPDIF on a gpio. With a few components you can convert this to the correct level for SPDIF output or TOSLINK.
View attachment 509433
This one is only with passive components. R8/R7 might need tweaking depending on GPIO voltage.
3.3V just like the WM8804 that schematic is for, so no change needed.This one is only with passive components. R8/R7 might need tweaking depending on GPIO voltage.
Well yeah, the thing looks like this:So one has to be a hardware developer in order to make use of it![]()
There may be some boards that offer good performance for a few bucks. But I2S would be better to hook up an external board. This however needs more IOs, and probably more advanced clocking. All this is probably possible, but needs time and effort. And this is even more complex for an electronics noob.And SPDIF is the only way right now yeah? So getting a DAC that matches the price of this DSP will be hard if not impossible? Or do someone know of any good alternatives?![]()