• 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

While it’s quiet, I thought I’d share my second standalone system build. I don’t need all the outputs, but I’ve future-proofed it since PCM5102 DACs are so cheap. DACs are on header sockets and can be removed if they fail.

Main system: WiiM Pro → TOSLINK DSPi DAC → Power amplifier and Sub

Setup
DAC 1: stereo right
DAC 2: stereo left
DAC 3: summed LFE/sub
DAC 4: spare (possibly future centre channel)

Running the latest firmware with my custom code for rotary encoder control and an RF remote with LED status feedback (e.g. double blink for loudness on). Remote has three functions: volume, loudness toggle, and source select — with very serious range from any room in my house.
Power side: 10,000 µF capacitor and Schottky diode on the 5 V DAC rail, completely eliminating power-down and USB disconnect pops.
 

Attachments

  • 20260528_201434.jpg
    20260528_201434.jpg
    294 KB · Views: 277
  • 20260528_201450.jpg
    20260528_201450.jpg
    328.6 KB · Views: 281
  • 20260528_201527.jpg
    20260528_201527.jpg
    300.2 KB · Views: 269
  • 20260528_201552.jpg
    20260528_201552.jpg
    435.5 KB · Views: 270
  • 20260528_201612.jpg
    20260528_201612.jpg
    410 KB · Views: 254
  • 20260528_201632.jpg
    20260528_201632.jpg
    331.9 KB · Views: 265
Last edited:
While it’s quiet, I thought I’d share my second standalone system build. I don’t need all the outputs, but I’ve future-proofed it since PCM5102 DACs are so cheap.

Main system: WiiM Pro → TOSLINK DSPi DAC

Setup
DAC 1: stereo right
DAC 2: stereo left
DAC 3: summed LFE/sub
DAC 4: spare (possibly future centre channel)

Running the latest firmware with my custom code for rotary encoder control and an RF remote with LED status feedback (e.g. double blink for loudness on). Remote has four functions: volume, loudness toggle, power, and source select — with very serious range from anyroom in my house.
Power side: 10,000 µF capacitor and Schottky diode on the 5 V DAC rail, completely eliminating power-down and USB disconnect pops.
That's really nice! Where did you get the box done?
 
On to the next doc issue... from what I can tell the ports are not being set until a power-cycle. I've been testing a 6-channel system where the ports were not-default and when it didn't work right I tried changing the port assignments (and saving) - which in retrospect didn't do anything at all and rather confused me. Again, this is no big deal as long as it's documented.
 
Hi @Weeb Labs

I'm within a day of posting a pull request for DSPi-Console-Windows that I'd really like you to consider. I know it's kind of a tough sell for open source since the change seems substantial, so I wanted to send a heads-up (pre-sell) via forum. It would sure save me a lot of effort keeping repos in synch and I think adds great value for the overall project.

What I've done is take DspDevice.cs and split it into two classes. The controlling code stays in DspDevice while the usb-specific code goes into a new class DspiUsb and the DspDevice "has-a" DspiUsb instance by default.

Then there's a new DspiRemote class that can be instantiated instead with a command-line argument (there's a common interface class IDspiTransfer for Usb/Remote). The remote class talks to my DSPiCliServer application in DSPiCliRemote so you can run the Windows Console GUI remote at Windows, Mac and Linux DSPi installs.

See here: Youtube Link (I'd have posted the video click but it's huge on-screen). It works reliably for me but may need more error checking.

Mark

postscript... to understand my use case. Here's my ideal system->

1780153441426.png

This is a DSPi with a controlling Raspberry Pi Zero W2 to handle the WiFi and web site. The Zero W2 has two great features. The Vsys goes unlimited to the output USB port and it has a USB hub. So the Pi Zero W2 can connect to and power the Pico. I don't need a 'real computer' stuck onto the stereo but every now and then may want to tweak the settings while it's actually running.
 
Last edited:
maybe someone here interested?

 
Would clone board work such as the the TEENSTAR 2350 or noname black RP2350A boards? These boards have type C which i would prefer over the dreaded micro b. On the other hand dunno if DLR2180 works as is.

I used one of these and had some random weirdness with the DSPI like volume increases intermittent distortion. Bench tested fine but a long listening session (6 hours) I was getting issues. Replaced with official board and all is good. Just get a micro to usb C socket. They are very cheap. https://ebay.us/m/GstN1j
 
Hi @Weeb Labs

I'm within a day of posting a pull request for DSPi-Console-Windows that I'd really like you to consider. I know it's kind of a tough sell for open source since the change seems substantial, so I wanted to send a heads-up (pre-sell) via forum. It would sure save me a lot of effort keeping repos in synch and I think adds great value for the overall project.

What I've done is take DspDevice.cs and split it into two classes. The controlling code stays in DspDevice while the usb-specific code goes into a new class DspiUsb and the DspDevice "has-a" DspiUsb instance by default.

Then there's a new DspiRemote class that can be instantiated instead with a command-line argument (there's a common interface class IDspiTransfer for Usb/Remote). The remote class talks to my DSPiCliServer application in DSPiCliRemote so you can run the Windows Console GUI remote at Windows, Mac and Linux DSPi installs.

See here: Youtube Link (I'd have posted the video click but it's huge on-screen). It works reliably for me but may need more error checking.

Mark

postscript... to understand my use case. Here's my ideal system->

View attachment 535905
This is a DSPi with a controlling Raspberry Pi Zero W2 to handle the WiFi and web site. The Zero W2 has two great features. The Vsys goes unlimited to the output USB port and it has a USB hub. So the Pi Zero W2 can connect to and power the Pico. I don't need a 'real computer' stuck onto the stereo but every now and then may want to tweak the settings while it's actually running.
Thank you for the pull request! I will be looking into this shortly. :)

In the meantime, I have just released the final DSPi Firmware v1.1.4 build. The last couple of betas have primarily been spent squashing bugs rather than implementing meaty new features but we do still have some handy new functionality.

Here is the list of changes:
  • RP2040/2350: Input and output configuration (types, GPIO, I2S clocks) now has two selectable modes; independent and per-preset. This gives users the option of retaining their hardware configuration across preset loads in a very similar fashion to that of the master volume implementation.
  • RP2040/2350: Firmware QA test suite added to the repository. The suite is written in Python and tests all command-based functionality. A device state snapshot is recorded prior to testing and reapplied afterward.
  • RP2040/2350: Fixed an External Mute Control bug which caused it to become "stuck" in the muted state under certain circumstances.
  • RP2040/2350: Fixed a bug which sometimes caused crashes when applying bulk parameters or during factory resets.
  • RP2040/2350: Fixed a bug which caused listening volume to be overwritten when switching presets in independent master volume mode.
  • RP2040: Fixed a heap memory overflow crash when both output slots are configured as I2S.

This release will require Console updates to both Windows and macOS, which will be appearing very soon. The v1.1.4 branch will soon be merged to main, once I am convinced that it is fully stable.

As always, please do report any bugs that you encounter in this release; that's how we squash them! You can do that either here, on GitHub or via the Discord server (many helpful people there).

The next major release (v1.1.5) will introduce a comprehensive set of crossover filters and onboard test tones, which should open up many exciting new possibilities.

Here is the current near-future roadmap:
  • Crossover filters
  • Onboard test tones
  • I2S input
  • I2C and UART interfaces
  • External GPIO control framework
 
Last edited:
Thank you for the pull request! I will be looking into this shortly. :)
I look forward to this. I've just posted a build of the console with the pull so you can play with it. remote console build and the server is at server release build. The simplest test is windows->windows since DSPiCliServer on windows takes no real installation. Next simplest is MacOS where you just need to chmod +x the DSPiCliServer executable(s) and allow it to run in System and Security.

* There seems to be one timing issue and I was concerned the fix for that might be substantial so... if no channels show up in the remote display simply switch presets and return to have them display or sometimes just running it a second time and being patient.
 
Last edited:
I’ve spent the better part of several days reading through more than 1,600 forum posts, and I have to say this is an absolutely fantastic project! Your impressive development pace, boundless enthusiasm and profound technical knowledge are truly remarkable. It’s been ages since I’ve come across such an engaging piece of development work—it’s outstanding!

I’ve just placed an order for the RP2350 and hope to get around to testing it out sometime this month.
I’ve got a few small questions alongside some minor suggestions:

1.Minimum-phase IIR filters inherently cause phase rotation when implemented for speaker crossovers, yet Rephase’s phase-linearization feature perfectly remedies this drawback and makes IIR-based crossovers entirely viable. Do you have plans to roll out a comparable feature on DSPi? This would be a very significant functional improvement.

2.I understand DSPi already features SPDIF/optical input, SPDIF/optical output and PDM output. Would it be possible to include complete, standardized peripheral schematics in the official documentation? Full schematic references would greatly benefit novice users. For example, I am not sure what method would be simple and elegant if I want to build my own SPDIF and optical input.

3.Are there any plans to add multi-language support to the DSPi Console? If not, is there a straightforward, practical implementation roadmap available? Enthusiastic community users would likely be willing to contribute toward localizing the software.

Thank you very much for your continuous hard work on this excellent project. Wish you smooth progress in all future development, and I’m looking forward to exploring RP2350 after receiving my unit!
 

Attachments

  • rePhase01.jpg
    rePhase01.jpg
    312.3 KB · Views: 67
  • rePhase02.jpg
    rePhase02.jpg
    287.3 KB · Views: 67
I’ve spent the better part of several days reading through more than 1,600 forum posts, and I have to say this is an absolutely fantastic project! Your impressive development pace, boundless enthusiasm and profound technical knowledge are truly remarkable. It’s been ages since I’ve come across such an engaging piece of development work—it’s outstanding!

I’ve just placed an order for the RP2350 and hope to get around to testing it out sometime this month.
I’ve got a few small questions alongside some minor suggestions:

1.Minimum-phase IIR filters inherently cause phase rotation when implemented for speaker crossovers, yet Rephase’s phase-linearization feature perfectly remedies this drawback and makes IIR-based crossovers entirely viable. Do you have plans to roll out a comparable feature on DSPi? This would be a very significant functional improvement.

2.I understand DSPi already features SPDIF/optical input, SPDIF/optical output and PDM output. Would it be possible to include complete, standardized peripheral schematics in the official documentation? Full schematic references would greatly benefit novice users. For example, I am not sure what method would be simple and elegant if I want to build my own SPDIF and optical input.

3.Are there any plans to add multi-language support to the DSPi Console? If not, is there a straightforward, practical implementation roadmap available? Enthusiastic community users would likely be willing to contribute toward localizing the software.

Thank you very much for your continuous hard work on this excellent project. Wish you smooth progress in all future development, and I’m looking forward to exploring RP2350 after receiving my unit!
Hello and thank you for the kind words! :)

Regarding the IIR filters and RePhase, there are a few considerations here. An IIR filter by its nature can't really be linearized but cascaded all-pass filters (DSPi supports these) can be used to approximate a target phase curve. RePhase doesn't do this, though. It generates FIR filters for a convolution engine, which is extremely expensive to implement on this hardware.

Separate from the technical challenges here are the practical considerations. Crossovers in most active monitors like the JBL 305P and Genelec 8030C are minimum phase and the data produced by controlled listening studies indicates that minimum phase and linear phase approaches are generally indistinguishable within this context. This is consistent with my own results, so I'm afraid that the circumstances don't make FIR support a particularly worthwhile endeavor for this project.

There is a complete wiring guide in the main readme which specifies all of the default pin configurations but the document will soon receive an overhaul and a "Getting Started" section with helpful diagrams. To implement your own SPDIF input and output, the simplest approach is to use a pair of TOSLINK RX and TX modules. This will be explored in the new guide.

While I don't have specific multi-language plans, I would be delighted to receive localization PRs from the community!
 
Last edited:
Hi Troy!!!! Excuse my ignorance... but where can I make a donation to this project? I couldn't find the option on GitHub, and perhaps many of those who are constantly requesting new features are asking themselves the same question?
 
Hi Troy!!!! Excuse my ignorance... but where can I make a donation to this project? I couldn't find the option on GitHub, and perhaps many of those who are constantly requesting new features are asking themselves the same question?
Hello! There are links to Ko-fi and Patreon under the "Sponsor this project" section of the right sidebar on GitHub but I've embedded them here for convenience. :)

All of the work done on this project is in my spare time and development resources are almost entirely out-of-pocket, so donations are always immensely appreciated but never solicited.
 
An IIR filter by its nature can't really be linearized but cascaded all-pass filters (DSPi supports these) can be used to approximate a target phase curve.
Posted a question here (for anyone to respond) so as not to divert this thread too much

 
Would clone board work such as the the TEENSTAR 2350 or noname black RP2350A boards? These boards have type C which i would prefer over the dreaded micro b. On the other hand dunno if DLR2180 works as is.
I have mine running on the same TEENSTAR 2350 you are showing, no issues at all.
My system is the following: PC -> ADUM3160 circuit (I had some CPU noise issues coming from the PC) -> RP2350 (clone) -> I2S DAC -> Amplifier
Pretty basic in terms of inputs / outputs but it dont need more at the moment.
 
I have mine running on the same TEENSTAR 2350 you are showing, no issues at all.
My system is the following: PC -> ADUM3160 circuit (I had some CPU noise issues coming from the PC) -> RP2350 (clone) -> I2S DAC -> Amplifier
Pretty basic in terms of inputs / outputs but it dont need more at the moment.

Mabey I was unlucky but would avoid the cheap TENSTAR/red RP2350 clone board for a finished DSPi build.
had intermittent weird behaviour on mine, including odd control/input behaviour and unexpected volume - related events. The concern is that some of these boards may use older RP2350 A2 stepping, which is associated with GPIO input leakage issues. Raspberry Pi has acknowledged the RP2350 stepping issue and documented workarounds/support information, so for my DSPi build using encoder inputs, RF remote inputs, S/PDIF, DACs and mute control, I would rather use an officfal Raspberry Pi Pico 2 or a known-good RP2350 board than risk unstable GPIO inputs from a cheap clone.

Switching to an official board cleared the bugs.
 
I've noticed that when listening with headphones, the stereo image seems slightly shifted to the left. After some experimentation, I found that adding about 0.3 ms delay to the left channel makes the center image lock into place for me. I have a Fosi Audio ZH3.

My EQ is identical on both channels (AutoEQ profile for the Hifiman Sundara), so the effect doesn't seem to be caused by frequency response differences between left and right.

My assumption is that this is related to interaural time perception rather than the headphone itself. Since our brains use very small timing differences between ears for localization, even a fraction of a millisecond can affect where a centered signal is perceived. Delaying the left channel by ~0.3 ms appears to compensate for whatever is causing the image to lean left in my case.

I'm also using BS2B crossfeed occasionally, which made me wonder whether others have experienced a similar need for a small channel delay adjustment when fine-tuning headphone imaging.

Has anyone else measured or subjectively found a personal left/right delay offset that improves center imaging?

However, I may have found a bug or limitation in the implementation. Small delay values such as 0.3 ms do not always persist correctly. Sometimes the delay appears to reset or disappear, and values above 0.5 ms seem to be rounded to 1.0 ms. In some cases, the UI even shows the delay on both channels although it was only configured for the left channel. Has anyone else experienced this?
 
Back
Top Bottom