• 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

The github folders are over 2 month old, this thread started on Feb 5, so ... intersting:cool:
Well, the last changes are listed as having been made on February 9. GitHub seems to have generously rounded up the creation date.
:cool:
 
Just a quick update before bed. The RP2040 issue has been addressed and it will be rolled into Beta 3 later today. :)
 
I found this PCB idea doing a Google search
That's interesting, if a little hard to read the schematic. I'd love to know if they got as far as building a prototype, also I wonder if the existing binary is usable with a Xiao-RP2350?

This is my final effort for now, Toslink Ins and Outs with 2x I2S and the optional Sub out. Probably a couple of mistakes! Internal mains PSU, +12VDC (for Trigger only) and +5VDC, obviously mains is potentially hazardous, follow local regulations when wiring etc. etc. Not that I expect anyone build this, but....
 

Attachments

I have just released DSPi Firmware v1.1.3-beta3 and DSPi Console v1.1.3a for macOS.

This release fixes the I2S switching issue on RP2040 but it also introduces a new function that I've been eager to implement for quite some time; volume levelling!

The function behaves similarly to SoundSource's Magic Boost in that it seamlessly increases the volume of quieter input audio, keeping everything at a consistent level without compressing louder content or introducing any form of distortion. Very convenient when watching movies, television or YouTube content.

My implementation is somewhat more flexible than that of SoundSource but the working principle (upward compression) is identical and I have assigned a very comfortable set of defaults that most users likely won't find the need to adjust.

1775286531782.png


Naturally, a corresponding shortcut icon has been added to the DSPi Console sidebar, following exactly the same left-click and right-click behavior as the others.

1775285539808.png
 
It looks like a normal compressor/limiter in use for PA reinforcement but instead of having adjustable attack and release parameters it has three settings for attack and release, interesting, I would like to see it work with an oscilloscope
 
Last edited:
It looks like a normal compressor/limiter in use for PA reinforcement but instead of having adjustable attack and release parameters it has three settings for attack and release, interesting, I would like to see it work with an oscilloscope
It operates in the opposite direction to that of a standard compressor. Rather than attenuating content above the threshold and applying makeup gain against a limiter, it amplifies content below the threshold and leaves content above it untouched.

In this case, the limiter is present only to ensure that content just below the threshold is never amplified above 0dB and doesn’t interact with audio that was originally above that level.

Amount controls both the ratio and the intensity multiplier of the module’s output. Max Gain is the maximum amount of amplification that the module will perform under any circumstances. Gate Threshold defines the quietest content that will be amplified, effectively giving the user the ability to reject some of the noise floor if desired. Gate operates against a second internal upward compression threshold which sits at -20dBFS.


I2S switching now works as expected, but committing changed parameters (pin assignment, PEQs...) to board is still not possible on RP2040. Error dialog appears with "Failed to save parameters"
Thanks for that. I will look into this. :)


Hello, a 'PCM5102A I2S DAC Decoder Audio Module' works very well here.

Is it already possible to use two of these I2S modules?
Yes. You can use up to four of these modules.
 
Last edited:
I added a second module and configured everything for a 2.2 setup. I split the BCK and LRCK pins and connected the DIN pins to two separate GPIOs.
As soon as I set the second output to I2S in the console, I get severe interference on the first I2S output. The interference occurs even when only one module is connected.
Both modules work fine when connected separately and with only one I2S output active.
 
I added a second module and configured everything for a 2.2 setup. I split the BCK and LRCK pins and connected the DIN pins to two separate GPIOs.
As soon as I set the second output to I2S in the console, I get severe interference on the first I2S output. The interference occurs even when only one module is connected.
Both modules work fine when connected separately and with only one I2S output active.
Thank you very much for the bug report. This is being caused by an oversight on my part. Each I2S state machine is attempting to drive the same clock pins when enabled. I need to implement some master/slave promotion logic for the I2S outputs.

I should be able to complete this in a few hours and push a new beta for testing.
 
Last edited:
I added a second module and configured everything for a 2.2 setup. I split the BCK and LRCK pins and connected the DIN pins to two separate GPIOs.
As soon as I set the second output to I2S in the console, I get severe interference on the first I2S output. The interference occurs even when only one module is connected.
Both modules work fine when connected separately and with only one I2S output active.
I have attached an experimental revision, if you might be interested in testing it. I would recommend switching various slots between types. Whichever slot you first switched to I2S, switch it back to SPDIF and verify that other active I2S outputs continue to function correctly.

This build is for the RP2350.
 

Attachments

Hello, I tried it with the new firmware.
It's running on a pico2 with channels 1/2 and 3/4 configured as SPDIF, and 5/6 and 7/8 as I2S. For testing purposes, I disabled channels 1-4.
Channels 5/6 (Mains) now work. I get interference on 7/8 (Subs) after a short time. I've tried various other combinations, like 1/2 on I2S, etc., but I can only get one I2S output working reliably.
 
Thanks for your great work Weeb Labs.
Did not read the whole thread back…
Questions:
- Is a second input pair of USB audio on your ToDo list and at which position?
- Will the other way around be implemented at some time (4ch I2S input -‎> 4ch USB output)?
 
For instances when the player / renderer is not running on the USB Host device outputting to the DSPi but farther upstream

Does the loudness-compensation strength varying with volume, only work when using the DSPi's level control and/or USB Host's Master volume?

or can it adjust itself based on detected changes from volume controls on a device upstream of that USB Host?
 
Thanks for your great work Weeb Labs.
Did not read the whole thread back…
Questions:
- Is a second input pair of USB audio on your ToDo list and at which position?
- Will the other way around be implemented at some time (4ch I2S input -‎> 4ch USB output)?
Only one USB input is possible but it will eventually support 8-channel input from the host. USB output from DSPi is not possible. I2S, SPDIF and ADAT input are all planned, though. :)

For instances when the player / renderer is not running on the USB Host device outputting to the DSPi but farther upstream

Does the loudness-compensation strength varying with volume, only work when using the DSPi's level control and/or USB Host's Master volume?

or can it adjust itself based on detected changes from volume controls on a device upstream of that USB Host?
Loudness compensation is currently controlled exclusively via the USB host volume control. It is unaffected by DSPi's input channel preamp or output channel gain controls. This will soon be configurable, as external control is being implemented.

It doesn't perform any kind of level detection, as this would not produce accurate compensation.
 
this stability problem exists only for USB input, so I2S and SPDIF inputs will be permissive of higher clocks once implemented.

So, my 3x SYN RCA analog output channel pairs – not all are stereo

each feed a miniDSP PocketADC which outputs digital via S/PDIF TOSlink optical at 24-bit / 96kHz

to HiFiMeDIY UR23 DDC which feeds a DSPi

yes these function as USB Host
Turns out this last is false.

So, it seems I need to run each of these three DSPi's from full-fledged computers (thinking Raspberry Pi's)

Unless there ARE DDC units out there that can act as USB Host.


Or else I just wait for the new inputs to be implemented. Any ballpark timeline on that, as in weeks vs months?
 
Turns out this last is false.

So, it seems I need to run each of these three DSPi's from full-fledged computers (thinking Raspberry Pi's)

Unless there ARE DDC units out there that can act as USB Host.


Or else I just wait for the new inputs to be implemented. Any ballpark timeline on that, as in weeks vs months?
SPDIF input is a priority and I have been working on it continuously. I expect to have a production-ready implementation by the end of the month but it is difficult to make guarantees.
 
Only one USB input is possible but it will eventually support 8-channel input from the host. USB output from DSPi is not possible. I2S, SPDIF and ADAT input are all planned, though. :)


Loudness compensation is currently controlled exclusively via the USB host volume control. It is unaffected by DSPi's input channel preamp or output channel gain controls. This will soon be configurable, as external control is being implemented.

It doesn't perform any kind of level detection, as this would not produce accurate compensation.
Will it be possible to change the volume together with the loudness compensation from something connected with a SPDIF input?
 
Only one USB input is possible but it will eventually support 8-channel input from the host. USB output from DSPi is not possible. I2S, SPDIF and ADAT input are all planned, though. :)
Not even back to the host via current USB connection? So audio data would go both ways?
Four audio channels in every direction (to the same host) would be perfect for my use case.
 
Back
Top Bottom