• 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

Thank you! There is a small bug in the USB descriptors that appears on some machines but not others.

You need to use Zadig to install the libusb-win32 driver on “Weeb Labs DSPi (Interface 2)”.
Thanks for the reply.
I did use Zadig (claude told me to ;) but that worked for interface 0 but not for interface 2.
So:
- if i change interface0 to ubsport with zadig, the control software does find the rpi2040 an dfunctions but no audio of course

- if i change interface2 to ubsport with zadig, the control software does not find the rpi2040
 
Is this a Pico or Pico 2? Could you please post a screenshot of a SPDIF 1 filter page and one of your matrix mixer configuration?
Pico.
 

Attachments

  • Screenshot 2026-03-04 094105.png
    Screenshot 2026-03-04 094105.png
    98 KB · Views: 70
  • Screenshot 2026-03-04 094150.png
    Screenshot 2026-03-04 094150.png
    79.8 KB · Views: 72
  • Screenshot 2026-03-04 094207.png
    Screenshot 2026-03-04 094207.png
    21.1 KB · Views: 70
Whether you use a splitter to send spdif to both sides, or provide a buffered output for daisychaining them (source->pico_left->pico_right) is an implementation choice.
How would I implement the buffered daisy chain output? Wouldn't that defeat the bit-perfect sync requirement between sides? @TurtlePaul 's advice kind of confirms my fears - I really need both channels in perfect sync.
 
One other nice to have would be:

Now, you have a fixed number of biquads for each input and output channel. It would be nice to just have a fixed pool of biquads, and you can choose where you put them, as long as you keep below the max, stability and performance can still be maintained. So if you want 2 biquads in the input, and 20 on an output channel, that would be possible.
 
How would I implement the buffered daisy chain output? Wouldn't that defeat the bit-perfect sync requirement between sides? @TurtlePaul 's advice kind of confirms my fears - I really need both channels in perfect sync.
You would effectively be making your own splitter between the toslink or coax connector and the pico input pin. With toslink receivers being active you probably don't need any buffering - the output of the receiver would directly drive both the pico input and transmitter input. With coax you would need to connect the coax input to a buffer, and the buffer output to the pico input and to a coax output. There are various schematics online using video buffers or 74 series logic buffers. If this seems too complicated then just buy a splitter and use that.
 
You would effectively be making your own splitter between the toslink or coax connector and the pico input pin. With toslink receivers being active you probably don't need any buffering - the output of the receiver would directly drive both the pico input and transmitter input. With coax you would need to connect the coax input to a buffer, and the buffer output to the pico input and to a coax output. There are various schematics online using video buffers or 74 series logic buffers. If this seems too complicated then just buy a splitter and use that.
Thanks! I'll have a look. But - are you 100% sure this will result in a zero latency solution?
 
I want to update you that I made an update to enable MCLK on my I2S fork of this amazing project. While I don't have a DAC which needs that extra pin, it has been successfully tested by @Sonic-Wall (thanks a lot).
The new version is in my repository, which uses GPIO 13 for MCLK. Repository is here and binary is here.
@Weeb Labs, I've been asked if this could be merged on your rep. So far, the code is merged with your refactor: 1.1.1.
Highlevel changes in my code are:
- enabling I2S (including MCLK) instead of SPIDF 1
- enabling 96/24 through the pipeline
- using discrete clock multiplication
 
The enhancement of @giubeppe now fully supports an I2S 4-pin interface. You can now connect not only simple DAC boards, but also more complex digital interface boards (DDCs) that require an external clock signal (MCLK).
In my system, it sounds slightly better (smoother with a wider soundstage) than the simple SPDIF output board and supports 3 parallel outputs simultaneously (SPDIF, Toslink, and AES digital outputs :-)
 
One other nice to have would be:

Now, you have a fixed number of biquads for each input and output channel. It would be nice to just have a fixed pool of biquads, and you can choose where you put them, as long as you keep below the max, stability and performance can still be maintained. So if you want 2 biquads in the input, and 20 on an output channel, that would be possible.
This is definitely something that I intend to implement eventually. Once the next release is complete and SPDIF input is stable, I will be working on that among other things. I am still testing the new hybrid filter architecture at the moment and really want that to be as robust as possible before making new additions.

I want to update you that I made an update to enable MCLK on my I2S fork of this amazing project. While I don't have a DAC which needs that extra pin, it has been successfully tested by @Sonic-Wall (thanks a lot).
The new version is in my repository, which uses GPIO 13 for MCLK. Repository is here and binary is here.
@Weeb Labs, I've been asked if this could be merged on your rep. So far, the code is merged with your refactor: 1.1.1.
Highlevel changes in my code are:
- enabling I2S (including MCLK) instead of SPIDF 1
- enabling 96/24 through the pipeline
- using discrete clock multiplication
Thank you very much for your work! I will be looking at your code in detail this weekend and eventually upstreaming components of it into future commits. The long term plan is not only to have assignable output pins but also assignable input (SPDIF, USB, I2S) and output (SPDIF, I2S) types.

The enhancement of @giubeppe now fully supports an I2S 4-pin interface. You can now connect not only simple DAC boards, but also more complex digital interface boards (DDCs) that require an external clock signal (MCLK).
In my system, it sounds slightly better (smoother with a wider soundstage) than the simple SPDIF output board and supports 3 parallel outputs simultaneously (SPDIF, Toslink, and AES digital outputs :-)
If anything, the I2S clocks will be a little bit noisier than the SPDIF recovered clocks due to the deterministic fractional jitter; especially if the I2S DAC doesn't have a PLL. Otherwise, both outputs are bit identical. Most likely just a bit of placebo here but I'm glad it's working well for you.
 
I got my Cliff toslink transmitter. I wired it according to Cliff's pinout. It works. I'm guessing the no-name transmitter I bought was either defective or I blew it up connecting it by trial and error. The Toshiba one I ordered as insurance arrives in today's mail. l've tried the Cliff with a Raspberry Pi and a Window$ box as a sound card. I'm happy with what comes out of the speakers. Now for DSP fun.
 
Thanks! I'll have a look. But - are you 100% sure this will result in a zero latency solution?
No latency that matters in the context of left and right speakers - the positioning of your head will cause bigger variation. Propagation delay of a logic buffer is typically measured in nanoseconds, and will be in the datasheet for whatever logic chip you use.
 
Very cool project. Thanks for all the hard work, @Weeb Labs. I currently use Peace APO but for various reasons, I sometimes have route my audio for certain things (streaming) where Peace gets bypassed. This looks like a great way to have always-on EQ feeding the optical input on my SMSL SU-1 DAC as well as frustrate my wife by adding more bullshit to my desk.

Although I own a soldering iron and multimeter, I know nothing really about electronics and I'm very bad at soldering. But I read through the thread and put this Amazon "idiot parts list" together. In fact, my idiocy is at a level where I am looking for confirmation on the list as a solder-light/free project with room for future add-ons (small screen, etc) in an easy-open, drillable enclosure.

If someone could give me a thumbs up on this, you'd be helping out a real dummy.
All for about $63 including tax/shipping. If someone has better cheaper options or an alternate case, I'm all ears but I'd like to avoid paying shipping at 4 different stores.
 
Last edited:
Is there a chance for using wireless functionality of RP2350 in this project? Sending instructions? Or receiving / transmitting audio?
 
Very cool project. Thanks for all the hard work, @Weeb Labs. I currently use Peace APO but for various reasons, I sometimes have route my audio for certain things (streaming) where Peace gets bypassed. This looks like a great way to have always-on EQ feeding the optical input on my SMSL SU-1 DAC as well as frustrate my wife by adding more bullshit to my desk.

Although I own a soldering iron and multimeter, I know nothing really about electronics and I'm very bad at soldering. But I read through the thread and put this Amazon "idiot parts list" together. In fact, my idiocy is at a level where I am looking for confirmation on the list as a solder-light/free project with room for future add-ons (small screen, etc) in an easy-open, drillable enclosure.

If someone could give me a thumbs up on this, you'd be helping out a real dummy.
All for about $63 including tax/shipping. If someone has better cheaper options or an alternate case, I'm all ears but I'd like to avoid paying shipping at 4 different stores.
Your link for the Pico 2 W is actually for the case. I bought this Pico 2 W.
I bought the same breakout board and SPIDF card you spec'd. Together they work with the DSPi firmware and console.
My case is 7x4x3 but the one you picked will likely accommodate the above. The included mounting plate helps. You'll want to remove the metal face plate from the SPIDF board so you can use the mounting holes on the card. I attached everything with cable ties. They need to be pretty narrow.

No soldering required for this hardware config, the 3 wires from the SPIDF card plugs into the breakout board:

  • SPIDF: GP6
  • GND
  • +5V: VBUS or VSYS
 
Last edited:
Your link for the Pico 2 W is actually for the case. I bought this Pico 2 W.
I bought the same breakout board and SPIDF card you spec'd. Together they work with the DSPi firmware and console.
My case is 7x4x3 but the one you picked will likely accommodate the above. The included mounting plate helps. You'll want to remove the metal face plate from the SPIDF board so you can use the mounting holes on the card. I attached everything with cable ties. They need to be pretty narrow.

No soldering required for this hardware config, the cable from the SPIDF card plugs into the breakout board.
Crap. I just fixed it. Yeah that Pico listing works too. Maybe I'll switch to that. Thanks for the sanity check.
 
SPDIF input is coming along quite nicely. I have managed to implement a very simplistic ASRC that utilizes less than 2% of Core 0. This enables the SPDIF outputs to be driven at the fixed PIO clock and produces a feedback output which can be passed to the USB feedback endpoint. In other words, we now have the ability to mix SPDIF and USB inputs. :)
 
SPDIF input is coming along quite nicely. I have managed to implement a very simplistic ASRC that utilizes less than 2% of Core 0. This enables the SPDIF outputs to be driven at the fixed PIO clock and produces a feedback output which can be passed to the USB feedback endpoint. In other words, we now have the ability to mix SPDIF and USB inputs. :)
Wow. Where do you get the math or algorithms for that? When they first came out, I read a whitepaper and it seemed like black magic to me. Never thought you could implement them on a CPU that has is probably less powerful than a 486-33.

I also remember there were differences between the first ASRCs, some just clearing CD and others having to artefacts down to -160 dB. Can you test yours for this?
 
Never thought you could implement them on a CPU that has is probably less powerful than a 486-33
Eh.. the pico 2 CPU is between 10x and 50x faster than an old Intel 486, depending on workload ;) Particularly, it can do floating point math, which the 486 can’t do in hardware unless you have the DX variant. And even then, it’s no contest.
 
Last edited:
Back
Top Bottom