• 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

DSPi Firmware v1.1.2b-hotfix is now available, with all of the bugfixes and stability refinements of the last few days. It should be extremely robust under both Windows and macOS.

DSPi Console v1.1.2b for macOS has also been released and introduces several major new functions.

View attachment 518820

Here is the list of changes:
  • Support for multiple devices, selectable from a list. Right-click to reconnect.
View attachment 518821 View attachment 518822

  • Parameters can now be copied and pasted between channels. Previous "right-click to rename" shortcut is now alt-click.
View attachment 518812

  • Quick access icons for Matrix Mixer, Crossfeed, Loudness Compensation, Stats for Nerbs and Settings. Left-click toggles Crossfeed and Loudness Compensation on or off. Right-click opens their respective configuration windows. Buttons for active functions are illuminated.
View attachment 518813. View attachment 518819

  • Filter response graph is now vertically resizeable in place by up to 100px to better show off your beautiful data. Scrolling over the vertical axis scale zooms the graph on that axis.
View attachment 518814

  • Filter response graph can now be popped out into a new window, leaving more space in the main application window for other elements.
View attachment 518815

  • Filter response graph can be configured to follow channel selection or be independent when popped out
View attachment 518816

  • Channel curves not belonging to the current Channel Editor page are displayed as dashed lines. This is configurable.
View attachment 518818

  • Scrolling over Channel Editor page values increments and decrements them
Expect a corresponding release for DSPi Console for Windows over the coming days. Once that is out of the way, our next stop is I2S output and user assignable GPIO controls! :)
Das Buffer underrun problem seem to be fully fixed! Well done! But I observed twice a full disconnect of the device. The output stops and also your app is disconnected. After replugging the pico all is fine again...
 
I'm used to CamillaDSP where PEQ settings are applied by the software. With DSPi where in the signal chain should the PEQ go?
 
I'm used to CamillaDSP where PEQ settings are applied by the software. With DSPi where in the signal chain should the PEQ go?
The device sits between your PC (or other host with USB audio support) and your DAC.

Das Buffer underrun problem seem to be fully fixed! Well done! But I observed twice a full disconnect of the device. The output stops and also your app is disconnected. After replugging the pico all is fine again...
None of the changes should introduce any crash paths but DMA pressure is very slightly higher. It may be that my very conservative voltage setting is not fully universal. Please try this release and let me know if you experience any further issues. Do you have a Pico or Pico 2?

Did those two crashes occur while changing parameters/saving or during steady-state playback?
 
Last edited:
The device sits between your PC (or other host with USB audio support) and your DAC.


None of the changes should introduce any crash paths but DMA pressure is very slightly higher. It may be that my very conservative voltage setting is not fully universal. Please try this release and let me know if you experience any further issues. Do you have a Pico or Pico 2?

Did those two crashes occur while changing parameters/saving or during steady-state playback?
No the crashes happend just during playback. I use different sources like teams meetings, roon etc. Let me check if the problems are solved with the very latest version ;)
 
The device sits between your PC (or other host with USB audio support) and your DAC.


None of the changes should introduce any crash paths but DMA pressure is very slightly higher. It may be that my very conservative voltage setting is not fully universal. Please try this release and let me know if you experience any further issues. Do you have a Pico or Pico 2?

Did those two crashes occur while changing parameters/saving or during steady-state playback?
I was asking about where in the DSPi signal chain the PEQ data go. There are 3 possible places to apply them.
 
I was asking about where in the DSPi signal chain the PEQ data go. There are 3 possible places to apply them.
Room correction and headphone profiles should be applied to the input channels. Anechoic, driver correction or crossovers should be applied to the output channels.
 
Hi, great project!

I'm using a pico 2w and two SPDIF boards, each with one coaxial and one optical output. Everything is wired on an expansion board.

I had to use Windows 11 for the DSPi console.

The console initially didn't detect the pico via USB. According to the tool recommended for these cases, a driver was loaded, and everything looked fine in Device Manager.

But only after downgrading the USB driver did the console find the pico. After that, everything worked perfectly.

Unfortunately, the console doesn't start on my old Hackintosh with macOS 14. My Xcode is also too old, so compiling it myself isn't an option.

Or would it perhaps be possible to lower the minimum macOS version requirement a bit?

Otherwise, I should mention that the DSPi works for me with Linux, Windows, and macOS. A setup with an iPad and a Lightning to USB adapter as the source also worked well.

Thanks
 
Hi, great project!

I'm using a pico 2w and two SPDIF boards, each with one coaxial and one optical output. Everything is wired on an expansion board.

I had to use Windows 11 for the DSPi console.

The console initially didn't detect the pico via USB. According to the tool recommended for these cases, a driver was loaded, and everything looked fine in Device Manager.

But only after downgrading the USB driver did the console find the pico. After that, everything worked perfectly.

Unfortunately, the console doesn't start on my old Hackintosh with macOS 14. My Xcode is also too old, so compiling it myself isn't an option.

Or would it perhaps be possible to lower the minimum macOS version requirement a bit?

Otherwise, I should mention that the DSPi works for me with Linux, Windows, and macOS. A setup with an iPad and a Lightning to USB adapter as the source also worked well.

Thanks
Hello. Thank you! I'm glad to hear that everything is working. :)

The driver issue is a longstanding bug that remains on my radar. Switching to libusb-win32 is the most likely long term solution.

I have updated the project to support macOS 14 and later, which is the earliest revision with API support for the codebase. Here is a hotfix with that change in place. This should work well on your hackintosh.
 
Now that the clock is 307.2 mhz, would it be possible to toggle 153.6 mhz (1/2 speed) with default voltage for those who want low power or are unstable?
 
Room correction and headphone profiles should be applied to the input channels. Anechoic, driver correction or crossovers should be applied to the output channels.
Thanks, This is very helpful. I could use a bit of expansion, though. What is the difference between input and output that motivates this advice?
 
Now that the clock is 307.2 mhz, would it be possible to toggle 153.6 mhz (1/2 speed) with default voltage for those who want low power or are unstable?
Absolutely. Clocks and voltages will be user configurable. Strictly speaking an integer divider isn't mandatory and SPDIF receivers don't care too much about fractional ljitter, so one can really choose any clock that results in an integer I2S divider. The 307.2MHz is simply an ideal frequency that every board should be able to attain given the appropriate voltage.

Thanks, This is very helpful. I could use a bit of expansion, though. What is the difference between input and output that motivates this advice?
Here is a simplified flowchart illustrating DSPi's signal chain.

1773970446067.png


There are no rules as to where in this chain a given filter must be placed but depending upon our objectives, one location might be preferable to another. The Master EQ corresponds to the input channel EQ that I mentioned earlier. Filters assigned to these slots will affect every element of the signal chain that proceeds them.

Here are some example scenarios:

  • 2.1 Stereo with subwoofer crossover: In this situation, the simplest configuration is to handle the subwoofer and main speaker crossovers in the output channel PEQ slots and room correction in the input (Master EQ) channel slots. Here, the speaker/subwoofer integration is handled at the output and when filters are assigned to the input channel slots, we can treat it as though we are simply correcting a full range system. There's no need to worry about the crossover complexities when implementing room correction.

  • Multiple output devices (speakers, headphones): Perhaps we intend to connect two pairs of headphones and two pairs of speakers to the system. This might entail separate PEQ profiles for each pair of headphones and separate room corrections for each pair of speakers. The most effective way to handle this situation would be to assign the relevant headphone PEQ profiles and room corrections directly to the relevant output channel slots. The input slots are applied to all output channels, which isn't very helpful here.

  • Single pair of headphones: If we're just applying a single PEQ profile to a single pair of headphones, then it doesn't really matter whether that profile is applied to the input slots or the output slots.
I hope this sheds some light on things for you!

Thinking about this actually gives me some interesting ideas. I might do a little bit of restructuring such that loudness compensation and crossfeed can be applied to any channel/channel pair. In the second scenario, it would be convenient if crossfeed could be assigned to just the headphone outputs.

In other news, clipboard functionality has been implemented within DSPi Console for Windows. Once the shortcuts and multi-device support are ready, the new Windows release will be available.

1773987619223.png
 
Last edited:
  • Multiple output devices (speakers, headphones): Perhaps we intend to connect two pairs of headphones and two pairs of speakers to the system. This might entail separate PEQ profiles for each pair of headphones and separate room corrections for each pair of speakers. The most effective way to handle this situation would be to assign the relevant headphone PEQ profiles and room corrections directly to the relevant output channel slots. The input slots are applied to all output channels, which isn't very helpful here.
That is exactly what I need!
Using a Aurora FreeDSP via USB now, but it's a bit buggy and has limitations and will never be fully useable as indended due to lack of software development.
 
Testing on my ADAU1452 crossover, everything seems to work fine. Patiently waiting for SPDIF I/O to roll out a custom board with ADC and DAC.
 

Attachments

  • PXL_20260320_111017374.jpg
    PXL_20260320_111017374.jpg
    654.8 KB · Views: 161
Looking at the simplified flowchart illustrating DSPi's signal chain, I thought, "Hmm, maybe something potentially useful is missing..."

I'm thinking of the possibility of applying a DRC (Dynamic Range Compression) per channel. It's an option I have on the Flex 8. I don't use it personally, but I think it could be useful in certain situations (protecting a tweeter, for example). So, I don't know if, with everything else you still have to implement and/or if the Pico has the space and resources for that. Just out of curiosity, here's how it looks on the MiniDSP's console :
compressor.jpg


And here's what they say about it in the documentation: https://docs.minidsp.com/product-manuals/flex-eight/dsp-reference/compressor.html
 
Looking at the simplified flowchart illustrating DSPi's signal chain, I thought, "Hmm, maybe something potentially useful is missing..."

I'm thinking of the possibility of applying a DRC (Dynamic Range Compression) per channel. It's an option I have on the Flex 8. I don't use it personally, but I think it could be useful in certain situations. So, I don't know if, with everything else you still have to implement, the Pico has the space and resources for that. Just out of curiosity, here's how it looks on the MiniDSP's console :
View attachment 519111

And here's what they say about it in the documentation: https://docs.minidsp.com/product-manuals/flex-eight/dsp-reference/compressor.html
Thanks for that. DRC is planned, once I have refactored loudness compensation and crossfeed.

I also want to implement an automated compressor to replicate the handy "Magic Boost" function present within SoundSource. Often useful when watching media with inconsistent mastering.
 
Last edited:
Thanks for that. DRC is planed, once I have refactored loudness compensation and crossfeed.

I also want to implement an automated compressor to replicate the handy "Magic Boost" function present within SoundSource. Often useful when watching media with inconsistent mastering.

Wow, you're so resourceful! I didn't know you'd already planned this; it's amazing how much work you've taken on with this project! Seriously, hats off to you! We'll see where all this leads, but it's intense! ;)
 
Testing on my ADAU1452 crossover, everything seems to work fine. Patiently waiting for SPDIF I/O to roll out a custom board with ADC and DAC.
Sorry but can please link to your specific ADAU1452 crossover model?

Also can you explain ELI5 how this DSPi unit works together with it?
 
Back
Top Bottom