• 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

Testing continues :) . I brought the remote control receiver today and decided to test the IR remote. It works, too. But there's a small problem. My remote uses the NEC protocol. It has control commands and a repeat command with a long press. The DSPi identifies the commands as NEC, recognizes them, and executes them. But it doesn't understand the repeat code. This is inconvenient. I've managed to find a way around this and set it to +-5 dB per press. This allows for fairly quick adjustments with short button presses. However, it would be nice to somehow implement the repeat code.

Remote+-.png

Update: The RC5 remote also doesn't support repeat commands. The Samsung remote changes the volume with a long press, but too slowly. So, there's something wrong with the repeat command.

Update 2: The remote control buttons do not have a mode "Wrap around at the end" on function "Input source" equivalent to the physical buttons.
 
Last edited:
Ah, if the S/PDIF is coming directly from a PC motherboard, I'd be curious about the PC's S/PDIF output configuration.
Since mine works with the same firmware, perhaps try setting the motherboard's optical output explicitly to 2-channel PCM (e.g. 24-bit/48 kHz) and disabling any Windows audio enhancements/spatial processing.
I'll have to dig deeper, I remember Windows outputting 24/48 with everything else disabled (by default). In Linux it's even simpler, there's really not much to configure.
But why wouldn't it work? The docs say:

When any S/PDIF input is the active source, received audio feeds through the identical DSP pipeline (preamp, loudness, master EQ, leveller, crossfeed, matrix mixer, per-output EQ, delay) as USB audio.
 
I'll have to dig deeper, I remember Windows outputting 24/48 with everything else disabled (by default). In Linux it's even simpler, there's really not much to configure.
But why wouldn't it work? The docs say:
It should work yes. I'm also using SPDIF input (two of them actually) on my DSPi Pico and the loudness compensation is working fine.
 
I'll have to dig deeper, I remember Windows outputting 24/48 with everything else disabled (by default). In Linux it's even simpler, there's really not much to configure.
But why wouldn't it work? The docs say:
Try this. Enable loudness compensation on USB, set it to value where it is clearly audible, and save the settings so loudness is on after reboot. Then unplug the DSPi USB data cable, keep optical S/PDIF connected, power the DSPi from an external USB supply, then test PC S/PDIF with the volume encoder.
 
Try this. Enable loudness compensation on USB, set it to value where it is clearly audible, and save the settings so loudness is on after reboot. Then unplug the DSPi USB data cable, keep optical S/PDIF connected, power the DSPi from an external USB supply, then test PC S/PDIF with the volume encoder.
No difference.
I checked the settings for the SPDIF output on linux and it matches the expected format:

R 39 2048 48000 26,3us 10,2us 0,00 0,00 0 S32LE 2 48000 alsa_output.pci-0000_0a_00.4.iec958-stereoR 79 3600 48000 8,6us 12,6us 0,00 0,00 0 F32LE 2 48000 + Firefox
 
There's a weird bug with the 20x4 LCD display where if the volume bar is enabled, the display boots to "DSPi" and shows nothing else. When I go to Console, the first page (User Volume) is "Empty". This only happens when the bar is enabled.
 
Hey all!

First of all thanks @Weeb Labs for this amazing project. I'm currently experimenting with different I/O configurations and I stumbled upon a weird issue. I hope someone will help me debug this.

The Problem
I'm getting tiny audio dropouts on left or right channel (not at the same time) when DSPi is configured as SPDIF in and SPDIF out.

Setup

I'm using my audio interface (RME UCX II) to feed AES/EBU signal through this breakout board into DSPi running on RP2350 Tiny. SPDIF Input set to default input pin GPIO5.
On the output side I'm using default SPDIF output pin GPIO6 and connecting it to the same breakout board. AES/EBU output feeds my Genelec speakers.

RME -> AES/EBU In -> DSPi GPIO5 -> [*] -> DSPi GPIO6 -> AES/EBU Out -> Genelec 8340

I'm running the latest stable release of DSPi firmware - v1.1.5, sample rate set to 48kHz

Testing done
- First I've tested SPDIF transmitter on DSPi side and I'm dropout free audio
- Set DSPi input to USB
- Set DSPi output to SPDIF
- All the connections as per input

- Then I've tested SPDIF receiver on DSPi side
- Set DSPi input to SPDIF
- Set DSPi output to SPDIF
- Enable bulk output, add toslink connector on Pin 4
- feed ADAT back to RME, play back on headphones
- in this case I'm getting glitch free audio as well which means that the receiver works well too

- Lastly I've tested both SPDIF rx and tx at the same time using RME only to rule out the speakers are the problem
- set DSPi input as SPDIF
- set DSPi output as SPDIF
- digital input from RME
- digital output back to RME (aes/ebu)
- play back aes/ebu return signal on the headphones
- I'm getting much fewer glitches but they happen occasionally. RME has amazing clock recovery while genelecs use off-the-shelf akm digital receiver IC so that could explain it.


Any pointers on where to start looking? Stats in the DSPi console don't give me much. I'm comforable building the code if that's what it takes to figure this out.

IMG_1640 Large.jpeg
 
Any pointers on where to start looking? Stats in the DSPi console don't give me much. I'm comforable building the code if that's what it takes to figure this out.

View attachment 557517

Just to check - when you do spdif in/out at the same time on the RME are you changing the RME clock source to be "SPDIF" (this means that the RME locks its internal clock to the SPDIF input rather than free-run or some other input). This has caught me out a few times with a simultaneous spdif I/O with an RME Babyface Pro interface.
 
Hey all!

First of all thanks @Weeb Labs for this amazing project. I'm currently experimenting with different I/O configurations and I stumbled upon a weird issue. I hope someone will help me debug this.

The Problem
I'm getting tiny audio dropouts on left or right channel (not at the same time) when DSPi is configured as SPDIF in and SPDIF out.

Setup

I'm using my audio interface (RME UCX II) to feed AES/EBU signal through this breakout board into DSPi running on RP2350 Tiny. SPDIF Input set to default input pin GPIO5.
On the output side I'm using default SPDIF output pin GPIO6 and connecting it to the same breakout board. AES/EBU output feeds my Genelec speakers.

RME -> AES/EBU In -> DSPi GPIO5 -> [*] -> DSPi GPIO6 -> AES/EBU Out -> Genelec 8340

I'm running the latest stable release of DSPi firmware - v1.1.5, sample rate set to 48kHz

Testing done
- First I've tested SPDIF transmitter on DSPi side and I'm dropout free audio
- Set DSPi input to USB
- Set DSPi output to SPDIF
- All the connections as per input

- Then I've tested SPDIF receiver on DSPi side
- Set DSPi input to SPDIF
- Set DSPi output to SPDIF
- Enable bulk output, add toslink connector on Pin 4
- feed ADAT back to RME, play back on headphones
- in this case I'm getting glitch free audio as well which means that the receiver works well too

- Lastly I've tested both SPDIF rx and tx at the same time using RME only to rule out the speakers are the problem
- set DSPi input as SPDIF
- set DSPi output as SPDIF
- digital input from RME
- digital output back to RME (aes/ebu)
- play back aes/ebu return signal on the headphones
- I'm getting much fewer glitches but they happen occasionally. RME has amazing clock recovery while genelecs use off-the-shelf akm digital receiver IC so that could explain it.


Any pointers on where to start looking? Stats in the DSPi console don't give me much. I'm comforable building the code if that's what it takes to figure this out.

View attachment 557517
Hello and thank you for the report! There are some known issues with the SPDIF RX in certain configurations (especially LG TV sources) and it sounds like you might have run into one of those here. The SPDIF RX will soon be overhauled with completely new rate estimation and immensely finer output clocking granularity, which should resolve all of these issues. That overhaul is currently being tested and will appear in an upcoming beta. :)

In other news, I have just finished the initial implementation of a handy new function called DSPi Link. This is a network protocol that will be supported within DSPi Console, Kingsnake's front panel and the upcoming Android and iOS applications. It allows DSPi devices to be shared and configured from anywhere on a local network, whether from a supported application or a web browser.

1788973359317.png
1788973346403.png


The protocol is extensively documented and easily implemented, for the interested in supporting it within their own software.
 
Last edited:
It allows DSPi devices to be shared and configured from anywhere on a local network
Please enumerate what you mean by "share" here.

AoIP transport of audio signals in & out? If so, how many channels at what resolutions?
 
Loudness compensation and Psychoacoustic Bass don't work on the SPDIF input. They can be enabled but have no effect.
For those having the same issue, I think I got what's happening: when using USB, DSPi knows the absolute volume of the host, but SPDIF does not carry volume information (it only scales the PCM samples before sending them.
For the effects to be noticeable, the host has to send the SPDIF signal at 100% level, and then the effects work by tracking the User Volume.
 
Hello and thank you for the report! There are some known issues with the SPDIF RX in certain configurations (especially LG TV sources) and it sounds like you might have run into one of those here. The SPDIF RX will soon be overhauled with completely new rate estimation and immensely finer output clocking granularity, which should resolve all of these issues. That overhaul is currently being tested and will appear in an upcoming beta. :)
Ah, good to know. Let me know if you need any help with testing!
 
In other news, I have just finished the initial implementation of a handy new function called DSPi Link. This is a network protocol that will be supported within DSPi Console, Kingsnake's front panel and the upcoming Android and iOS applications. It allows DSPi devices to be shared and configured from anywhere on a local network, whether from a supported application or a web browser.

Great news :)! As far as I understand, it's just the controls, NOT the audio transport.
 
Not sure if it's a bug or something that cannot be fixed. But when I accidentally pulled the USB chord from my laptop that was connected to the dspi while playing Spotify my active speaker popped quite loud :)
Laptop -> dspi -> pcm5102 -> amp
 
I managed to build my DSPi with 3 inputs: USB, Toslink, I2S. I have a push button to cycle through the inputs.
I have 2 outputs: Toslink and COAX.

What works: the outputs work great. USB input works great.

What mostly works: Toslink input and LG Soundsync but I get audio dropouts from my LG TV. I noticed there will be a new version for this which is great.

What I cannot get to work: my I2S input configured as a slave doesn't manage to get audio from my I2S source. In the I2S system settings, there is an inactive label next to the Slave setting.

0hM2FXH.png


Edit: I also tried switching the DSPi to master mode and configuring my source as a slave but still no audio.
I'm using DSPi-RP2350-v1.1.6-beta2.uf2.
The I2S source is an ESP32 running squeezelite-esp32 with dac_config set to model=I2S,bck=33,ws=25,do=32,mode=slave

Edit2: When setting the DSPi back in slave mode (ESP32 back to master mode) I measured with a multimeter:
1.6 VDC on the LRCK GPIO no matter if music is playing or not on the ESP32.
1.6 VDC on the BCK pin if music is playing and 0 VDC if music is on pause.
 
Last edited:
Hi, I have two problems here. I installed the DSPi Console v1.1.6-beta2, but the console is showing a different version (see image).

Screenshot 2026-09-11 001748.jpg


I’m using the rotary encoder switch to toggle between inputs, but it only works once in one direction.
I can’t go back from the last input; it should switch back from the last input to the first input.
One more small request: Can the I2C address range also include this address 0x78? I have a few displays here with this address.

Best regards from Berlin
 
Hi, I have two problems here. I installed the DSPi Console v1.1.6-beta2, but the console is showing a different version (see image).

View attachment 557855

I’m using the rotary encoder switch to toggle between inputs, but it only works once in one direction.
I can’t go back from the last input; it should switch back from the last input to the first input.
One more small request: Can the I2C address range also include this address 0x78? I have a few displays here with this address.

Best regards from Berlin
Hello and thank you for the report! The encoder and wrap-around issues have been patched and will be folded into this weekend's beta alongside many other culumative fixes and enhancements. :)
 
Hi.

I'm interested in the 3-way setup for my speakers I recently built (have a passive crossover that I'm not quite satisfied with).
I would like to control everything via my normal home receiver, I can play spotify via it, i have it hooked up to my TV so i stream things etc. Currently I own a Yamaha rx-v679, which doesn't have a pre-amp line out of any kind from what I can tell.

I'm thinking I would then have to:
1. Buy a new Amp which has a digital pre-out?
2. Buy 2x RP2350 (and program crossover accordingly)
3. Buy three cheaper stereo amplifiers to power the drivers

This is how I'm thinking about wiring everything.
Code:
TV -> Receiver -> DSPi -> Amps -> 3-way drivers
            |           
            -> Center/subwoofer/back speakers

Does this sound correct?

I'm curious how the volume control would work since each amp would have it's own knob for volume.
 
Back
Top Bottom