• 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

I have just released DSPi Firmware v1.1.3 Beta 4. This release enables support for 96KHz input up to 24-bit and fixes the I2S/SPDIF output switching. All I2S outputs are now correctly clock aligned regardless of the order in which they were enabled. This eliminates the distorted output which previously resulted from a very slight initial clock misalignment. :)

@Lastafahrer: I encourage you to give this release a try. It was tricky to debug without the ability to actually listen to the output but measurements of all I2S data outputs indicate correct alignment regardless of selection order. Channel packing order has also been corrected, so left and right channels are no longer reversed.

There may be some slight instability when continuously switching output types. This will be corrected shortly but I need to work from the top down.

PSA: It occurs to me that if you have an I2S DAC connected to a given data output, it is essential always to mute your amplifier prior to switching that output to SPDIF. Otherwise, you will most likely be greeted with noise at full scale. This is unavoidable, as SPDIF data is completely unintelligible to an I2S DAC. I may implement an optional warning and confirmation prompt in DSPi Console for this purpose.

@Luffy: If you take a look at the output overhaul branch on the repository, you will see the recent commits that I pushed to fix 96KHz at 24-bit. These may be helpful to you.
Hi, I've connected two modules to an old Yamaha 5.1 receiver for testing purposes. It has inputs for an external decoder. In this case, it's my DSPi . I'm using it with a passive subwoofer and two main speakers. I have two more modules and some other bits and pieces in my stash. I'm really looking forward to the weekend.

I've already heard the noise. That's why I've now gotten into the habit of assigning the channels to a free GPIO before setting them up, but muting is also a good idea
Thanks a lot for the new version, it's working fine here.
 
Am I right in thinking that, in order to use this board with I2S, I have to solder a bridge on H4L, which isn't pre-soldered?
There are modules with and without pre-soldered jumpers. Mine weren't. On one, I soldered all five jumpers. On the others, I didn't. However, I soldered all the pins.

The modules need to be unmuted. For this, XSMT needs to be high. You can do this by soldering the jumper or connecting a wire to the A3V3 pin.
If the module then produces sound but causes interference, and you're not using a master clock, SCK also needs to be grounded. There are two small jumper pads on the board for this, or you can connect a wire to one of the ground pins.
 
Is there any practical reason that you need delay values of such high-precision? Human ears can not register delays lower than 0.5ms. For alining speaker phase delays less than 0.01ms are definitely not audible. Two decimal places are more than enough (and that should probably be fixed in ui)
I'm a bit of a perfectionist... and I need this for the time alignment of the drivers in a DIY speaker and phase adjustment. It might seem insignificant, but for example, a tenth of a nanosecond allows for adjustments to the nearest tenth of a millimeter. In short, the fact is that it's already possible to enter the desired values, even with greater precision, but once entered, the value doesn't appear fully because there isn't enough space. So, you just need to leave enough room for the value to be visible.

The other problem is that if you accidentally touch the slider, since it doesn't support decimals, you have to manually re-enter the desired value. I find it pointless to have sliders that are so easily manipulated (even by mistake) for variables that, once determined, will be FIXED. Especially for outputs...
 
It does sound as though there might be a problem with a connection somewhere. What is connected to the other end of your RCA cable?
Hey @Weeb Labs,

We tested our circuit with the old firmware (v1.0.7) and console (v1.0.5), and we were able to hear audio output from the speakers at 48 kHz.

However, when using the same circuit with the new beta firmware that supports 96 kHz, we are not getting any audio output. Since the circuit worked fine with the older firmware, we expected it to work with the new version as well, but it doesn’t.

For the new firmware, we connected the output to GPIO pin 6 as mentioned in the README, but we are still not receiving any audio. Any help will be highly appreciated :)
 
We now have a master volume control, while input preamps have been made per-channel with optional linking and moved to their respective channel pages.

1775712846178.png
1775720731370.png


A new setting has also been added to determine whether the master volume level saved to a given preset is applied when that preset is loaded.

Hey @Weeb Labs,

We tested our circuit with the old firmware (v1.0.7) and console (v1.0.5), and we were able to hear audio output from the speakers at 48 kHz.

However, when using the same circuit with the new beta firmware that supports 96 kHz, we are not getting any audio output. Since the circuit worked fine with the older firmware, we expected it to work with the new version as well, but it doesn’t.

For the new firmware, we connected the output to GPIO pin 6 as mentioned in the README, but we are still not receiving any audio. Any help will be highly appreciated :)
If you are using Windows, please bear in mind that Firmware v1.1.3 will require the Console v1.1.3 update, which is not yet available. There were many changes in v1.1.3 which are incompatible with earlier Console versions.

DSPi Console v1.1.3 for Windows should be released this weekend.
 
Could you please explain the linking vs not of MV to per-input channel ? pre gain?
Previously, we had a single "global preamp" control in the sidebar, which controlled the preamp for both input channels (USB L/R). That preamp control has now been split so that each of the two USB input channels has an individually adjustable preamp control on their respective channel pages. The control on each of those pages includes a link button which ties their values together. This effectively replicates the original functionality.

The master volume control is separate from the aforementioned preamps and now resides in the sidebar where the old global preamp control had been located,. It controls volume at the very last stage prior to output, effectively setting the volume ceiling of the device.
 
Oh well hidden! Took me a while to even see it in your screenshot. I was expecting it to be in the main window, maybe place one here just next to the mute button as well?
I agree some things in the GUI are not easy to find whole other are there double or even three times (with the connection not always fully obvious), making it a bit hard on novices or if one would want to change something after some (longer) pause.


A few remarks about the GUI (console 1.1.3a MacOS)
Generally I would prefer a bit more contrast, as some elements are not easy to see, if one does not already exactly know where they are. In particular the matrix mixer is a bit a study in 50 shades of black.

About the graph window.
I would prefer if the choice to show an input/output would be sticky. If I choose for some reason to show all outputs (perhaps for comparison) and then switch the active one (perhaps to adjust it) all graphs but the one for the active output disappear.

the phase inversion.
In matrix mixer the ”inv“ is somewhat in the wrong place and IMHO belongs to the settings below.

And in the main window the phase option is somewhat missing and I would group this differently.
gain adjust + mute
delay adjust + phase inversion

Numerical input
For me the option to input frequency, gain and Q numerically for filters does not work anymore. With the touchpad I can not input 24Hz or Q=0.45
And the numerical input of gain and delay for inputs/outputs does only work in matrix mixer, but not in the main window (only sliders).
With delay some rounding takes place automatically that might not be wanted.
Using the slider I can define delay=3.4ms but in matrix mixer it shows 3.0ms. No idea what actually takes place and in any case it is a bit coarse.
 
Last edited:
There are modules with and without pre-soldered jumpers. Mine weren't. On one, I soldered all five jumpers. On the others, I didn't. However, I soldered all the pins.

The modules need to be unmuted. For this, XSMT needs to be high. You can do this by soldering the jumper or connecting a wire to the A3V3 pin.
If the module then produces sound but causes interference, and you're not using a master clock, SCK also needs to be grounded. There are two small jumper pads on the board for this, or you can connect a wire to one of the ground pins.
OK, it works now! Thanks for your help! I just wired it up for testing, but I'll solder the jumpers eventually. Nice little board!
 
I agree some things in the GUI are not easy to find whole other are there double or even three times (with the connection not always fully obvious), making it a bit hard on novices or if one would want to change something after some (longer) pause.
I agree with that as well.

Once again, I'll give the example of minidsp (not for fun, but simply because they have years of experience in the field and therefore have clearly studied the ergonomics of their console).
So here is the main screen of the minidsp console (which corresponds to the matrix mixer of the DSPi):
mdspc.jpg

This is the central (and not secondary) element around which everything revolves. This is where you adjust all the parameters.



If you click on PEQ, a new window opens; the same goes for Crossover, Compressor, and FIR.
mdspc01.jpg

mdspc02.jpg


If you click on Delay or Gain, a small window allows you to enter the desired value and confirm.
mdspc03.jpg


If you click on Invert or Mute, it is applied immediately.

In short, simple and effective.

I won't go into detail about the rest of the page on the left because everything is understandable there.

It seems to me that it would make sense to draw inspiration from it... at least in terms of centralization and simplification (no redundancies between windows, no sliders that can be accidentally moved, multiple decimal places for delays and at least one for gains...).
 
I agree some things in the GUI are not easy to find whole other are there double or even three times (with the connection not always fully obvious), making it a bit hard on novices or if one would want to change something after some (longer) pause.


A few remarks about the GUI (console 1.3a MacOS)
Generally I would prefer a bit more contrast, as some elements are not easy to see, if one does not already exactly know where they are. In particular the matrix mixer is a bit a study in 50 shades of black.

About the graph window.
I would prefer if the choice to show an input/output would be sticky. If I choose for some reason to show all outputs (perhaps for comparison) and then switch the active one (perhaps to adjust it) all graphs but the one for the active output disappear.

the phase inversion.
In matrix mixer the ”inv“ is somewhat in the wrong place and IMHO belongs to the settings below.

And in the main window the phase option is somewhat missing and I would group this differently.
gain adjust + mute
delay adjust + phase inversion

Numerical input
For me the option to input frequency, gain and Q numerically for filters does not work anymore. With the touchpad I can not input 24Hz or Q=0.45
And the numerical input of gain and delay for inputs/outputs does only work in matrix mixer, but not in the main window (only sliders).
With delay some rounding takes place automatically that might not be wanted.
Using the slider I can define delay=3.4ms but in matrix mixer it shows 3.0ms. No idea what actually takes place and in any case it is a bit coarse.
Thank you. There are some very astute observations here! :)

I will work through some of these prior to the Windows update. Another upcoming change will be the introduction of an interrupt IN endpoint, which will enable DSPi to push parameter updates to the host when changed via GPIO or other external control interface. Said updates need to be manually polled at the moment, which is somewhat inefficient.
 
While I agree that some elements could be regrouped, I generally prefer the 'reduced' UX style. Fifty shades of black are just my thing. :cool:
 
While I agree that some elements could be regrouped, I generally prefer the 'reduced' UX style. Fifty shades of black are just my thing. :cool:
I agree. The current color scheme is also my preference but I may implement an optional higher contrast mode within the settings panel.
 
I agree. The current color scheme is also my preference but I may implement an optional higher contrast mode within the settings panel.
The color scheme is ok, it is not about that.
But if you open the matrix mixer [which one has to find in the first place to eventually get to see any output at all] there is basically nothing to be seen in the black space and to put the mouse in the area create such a minor effect that it is invisible or seems to be some kind of glitch. Clicking the label of an input does nothing. Even to click in "gain" or "delay" and adjusting does nothing. To have any idea what all this black is good for, you have to find the "Enable" buttons for the outputs. Only then something very dark starts to appear.
It's all very cryptic and distracting (so that later one does not find the phase inversion).

Why not show those rings in the (still dark) grey of "active and mouseover" from the start? And have the enable buttons beneath the labels? Or put these in the side bar of the main window and show all possible outputs there from the start ?

In contrast the graph window behaves very differently. The active graph, the grid, the scales are always clearly there (perhaps even "glowing") and only the button for the extra window is hidden.
And in the crossfeed and the loudness compensation windows everything is visible, too. There is even a clear "Disabled" visible when the slider is off.
It is about usability and consistency.

EDIT: Ok, as I am kind of in a flow, I thought I put all my observations together here, so they can be revised or tossed more easily when the time comes.
I played around with the symbols in the side bar.
symbols.png

I could not figure out what clicking the graph symbol does. And the same goes for the preset chooser.
Well, found out that it is not the graph symbol (though in settings it is used for graph window) it is the volume leveller symbol.

In respect to the other symbols, some bring up the corresponding window, but cross feed and loudness do not. They activate the function instead. It is a bit confusing that mouseover already lights them up (without activation) and clicking activates which is not very obvious as the symbol only gets a tiny bit brighter.
There is no way to bring up the corresponding windows here. A right click brings up the corresponding window for the functions that can be activated..
So it is sometimes left click and sometimes right click for the window. And left click sometimes activates and sometimes brings up the window.

I would use all symbols to bring up (and in front) the corresponding window, and add an “enable“ button (like the buttons in the mixer) for activation above.

I do not understand the preset thing at all.
It took a while until I used a right right click on the preset area.
Shouldn’t be this in the (File) menu, too?

With active input (i.e. USB L) in main window, when ”Clear all” is pushed the filters of both inputs are cleared, even though the second input USB R is not even shown as a graph. A bit confusing.
There is no such ”clear” function in outputs.
Perhaps a disabling function for individual filters would be useful?
How about sorting of filters (according to frequency)?

Ok, that's about it ;-)
 
Last edited:
The color scheme is ok, it is not about that.
But if you open the matrix mixer [which one has to find in the first place to eventually get to see any output at all] there is basically nothing to be seen in the black space and to put the mouse in the area create such a minor effect that it is invisible or seems to be some kind of glitch. Clicking the label of an input does nothing. Even to click in "gain" or "delay" and adjusting does nothing. To have any idea what all this black is good for, you have to find the "Enable" buttons for the outputs. Only then something very dark starts to appear.
It's all very cryptic and distracting (so that later one does not find the phase inversion).

Why not show those rings in the (still dark) grey of "active and mouseover" from the start? And have the enable buttons beneath the labels? Or put these in the side bar of the main window and show all possible outputs there from the start ?

In contrast the graph window behaves very differently. The active graph, the grid, the scales are always clearly there (perhaps even "glowing") and only the button for the extra window is hidden.
And in the crossfeed and the loudness compensation windows everything is visible, too. There is even a clear "Disabled" visible when the slider is off.
It is about usability and consistency.
Looking at the Matrix Mixer colors critically, I can see your point here. I will make a few clarity revisions shortly. An onboarding system might be in order at some point.
 
I do like the colors as well, could maybe get a bit darker though. Coolest would be to have a slider that makes the UI go from OLED black to (almost) 255 white.
But yeah the arrangement could be better, but tbh it's quite alright for now and would prefer seeing the functionality of the DSP to be prioritized for now :)
 
But yeah the arrangement could be better, but tbh it's quite alright for now and would prefer seeing the functionality of the DSP to be prioritized for now :)
Absolutely, but I recall someone asking for the phase inversion he couldn't find. :)
All my points are not demands in any way, but just a feedback about glitches, inconsistencies and ideas that might be considered at some time when it may be convenient.
My use case is spdif or adat input and spdif or analog output, so I am waiting patiently for things to come. I do not mean to interfere at all.

I only today got a pico2 working as a test on a breadboard with spdif and it is working flawlessly in 48kHz and 96kHz as a perfect audio device on the Mac. Just great!
 
Back
Top Bottom