• 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

My language is set to english but my localization stuff is set to swedish, and yeah we use commas for decimal separation. IF possible it would be nice if both commas and dots where supported though so one don't have to think about whichever one should use since many programs use either or and it's always difficult to remember. Buut this is nitpicking :)
I agree with accepting both. As someone that uses a comma for a decimal (at least in the culture setting, I'm not a fan) it's kinda frustrating when the point doesnt work since there is no comma on the numpad of a keyboard. So please always accept a point as a decimal separator.
 
Thank you very much for the bug report! I am happy to
Take them here but GitHub issues do make things easier to track. I have a local LLM scraping this thread in an attempt to organize the reports but it can still be tricky to keep everything orderly. :)
Then I'll try to post stuff on Github instead from here on out then. Might post some stuff that I've posted her before as well just incase :)
Btw, do you want the bug reports on the DSPi firmware Github or on whatever DSPi-Console version we use?

I will investigate the output gain behavior shortly. It is most likely just a rounding issue in the application and should be straightforward to rectify.
Oh and I was thinking that that bug was all too vague and not really anything that was easy to repeat. Hope you'll get it fixed then!

After saving the preset, you might need to open the settings and ensure that the startup default is set to your present. The upcoming hotfix revises startup handling to make this more intuitive.
After a bit of investigating it seems like the Startup Mode setting is flipped. So when 'Default Preset' is selected it will instead use the last used preset, and when 'Last Used' is selected it will go for the default preset. The dropdown for Default Startup preset still gets grayed out as it should (but tbh I don't think it should gray out no matter what option you choose).
 
Just sharing this in case it helps anyone.

I made a small custom mod for DSPi v1.1.3-beta4 on RP2350 / Pico 2 that lets a rotary encoder control the global preamp.

I know Troy is bringing proper user-controllable parameter support and an official master volume soon, so this is only a temporary workaround for my own use.

The main reason I wanted it was speaker safety. I did not like relying on Windows volume as the main control and wanted the real listening level to live inside DSPi instead.

What it does:
- encoder adjusts global preamp
- short press = mute
- turn while muted = unmute and adjust level
- long press = save active preset so the level comes back after reboot

My encoder is wired as:
- GPIO 2 = CLK
- GPIO 3 = DT
- GPIO 4 = SW

This does not change the main DSPi firmware behaviour or audio processing in any big way. It is only a small add-on that reads the encoder pins and hooks into DSPi’s existing preamp, mute, and preset save functions. So rather than creating a new volume system, it just uses what is already there in the firmware. It does not live scale on the console but closing and opening the console will show you where you are at.

In simple terms, it works like this:

the knob changes the existing global preamp
the button uses the existing mute
a long press uses the existing preset save
on reboot, DSPi loads that saved preset again

So I now leave Windows at 100% and use the encoder as the real volume control.

One limitation is that loudness compensation does not follow it properly, because it is changing global preamp, not the normal USB volume control.

I have also seen what looks like a bug with pin persistence. My mains are on GPIO 20 and my sub I2S DAC is on GPIO 7. If I save GPIO 20 in hardware config and save the preset, even with Ctrl+S, after reset it still reverts back to GPIO 7. The setting that changes between I2S and SPDIF does save on whatever is selected.

Overall though, it has worked really well as a hardware-side volume workaround.

Dropbox Download
 
After a bit of investigating it seems like the Startup Mode setting is flipped. So when 'Default Preset' is selected it will instead use the last used preset, and when 'Last Used' is selected it will go for the default preset. The dropdown for Default Startup preset still gets grayed out as it should (but tbh I don't think it should gray out no matter what option you choose).
You are correct! The vendor commands were reversed. I have just patched it, so this bug will be eliminated in the hotfix. I'm not sure how this slipped through.
 
Last edited:
DSPi Console v1.1.3-hotfix is now available for Windows.

This release addresses several bugs and introduces the ability to link Master L and R channels, synchronizing their filters. The linking UI will almost certainly be refined in future releases.

Here is the full list of changes:
  • Four decimal places of precision for delays (0.0000ms) and two for gains (0.00dB).
  • Periods are now used to represent decimal points no matter the system language.
  • Application window now scales correctly with desktop scaling settings other than 100%.
  • Master L/R channels can now be linked. This will highlight both channel items simultaneously and synchronize filter and preamp settings betweeen them.
  • Master channel colors changed. They are no longer identical to the first set of output channel colors.
  • Startup preset loading modes now work properly.
  • Added USB ISR ring overrun metering to Stats for Nerbs.
  • Added "Set as Default" option to the Preset context menu on the sidebar.

1776229179034.png


1776228992724.png
 
DSPi Console v1.1.3-hotfix is now available for Windows.

This release addresses several bugs and introduces the ability to link Master L and R channels, synchronizing their filters. The linking UI will almost certainly be refined in future releases.

Here is the full list of changes:
  • Four decimal places of precision for delays (0.0000ms) and two for gains (0.00dB).
  • Periods are now used to represent decimal points no matter the system language.
  • Application window now scales correctly with desktop scaling settings other than 100%.
  • Master L/R channels can now be linked. This will highlight both channel items simultaneously and synchronize filter and preamp settings betweeen them.
  • Master channel colors changed. They are no longer identical to the first set of output channel colors.
  • Startup preset loading modes now work properly.
  • Added USB ISR ring overrun metering to Stats for Nerbs.
  • Added "Set as Default" option to the Preset context menu on the sidebar.

View attachment 525015

View attachment 525014
Seems to be working as intended, thank you!
 
  • Four decimal places of precision for delays (0.0000ms) and two for gains (0.00dB).

View attachment 525015
Thank you very much for this (and for everything else), but these values should also not be rounded in the matrix mixer and should appear as they are.

In fact, since these are values that are generally only rarely modified, I still think they should only be entered into the matrix. Also, I imagine there must be one or more specific uses that require gain and delay to be so easily adjustable with a slider? I'd really like to understand the reasoning behind this ergonomic choice. Could you please shed some light on this?
 
DSPi Console v1.1.3-hotfix is now available for Windows.

This release addresses several bugs and introduces the ability to link Master L and R channels, synchronizing their filters. The linking UI will almost certainly be refined in future releases.

Here is the full list of changes:
  • Four decimal places of precision for delays (0.0000ms) and two for gains (0.00dB).
  • Periods are now used to represent decimal points no matter the system language.
  • Application window now scales correctly with desktop scaling settings other than 100%.
  • Master L/R channels can now be linked. This will highlight both channel items simultaneously and synchronize filter and preamp settings betweeen them.
  • Master channel colors changed. They are no longer identical to the first set of output channel colors.
  • Startup preset loading modes now work properly.
  • Added USB ISR ring overrun metering to Stats for Nerbs.
  • Added "Set as Default" option to the Preset context menu on the sidebar.

View attachment 525015

View attachment 525014
Regarding decimal separator...in my opinion more "correct" solution would be to use proper system locale for display and just to filter keyboard input to accept both comma and dot as decimal separators.
 
Thank you very much for this (and for everything else), but these values should also not be rounded in the matrix mixer and should appear as they are.

In fact, since these are values that are generally only rarely modified, I still think they should only be entered into the matrix. Also, I imagine there must be one or more specific uses that require gain and delay to be so easily adjustable with a slider? I'd really like to understand the reasoning behind this ergonomic choice. Could you please shed some light on this?
Sliders are usually there to limit the range of values that are acceptable as an input. In your case maybe there should be a lock button or right click menu should contain lock option that would disable change of those values (with visually fading them out to show their locked state).
 
Last edited:
Sliders are usually there to limit the range of values that are acceptable as an input. In your case maybe there should be a lock button or right click menu should contain lock option that would disable change of those values (with visually fading them out to show their locked state).
The sliders should have a certain range as sort of a reasonable soft limit, but with the possibility to manually enter (almost) any value you'd want. Blender does that in some places and I find that a good way of doing it.
 
The sliders should have a certain range as sort of a reasonable soft limit, but with the possibility to manually enter (almost) any value you'd want. Blender does that in some places and I find that a good way of doing it.
And what happens when you enter the value outside of slider range and try to use slider after that? If any value is acceptable input, sliders shouldn't be used, in that case steppers are more appropriate ui. Sliders should be used only when you have clearly defined minimum and maximum acceptable values.
 
I am currently planning further improvements to the delay representation and channel pages, with the goal of reaching a reasonable compromise. Additional information such as the active routes to each output channel might be included, in the event that a slider is removed.
 
And what happens when you enter the value outside of slider range and try to use slider after that? If any value is acceptable input, sliders shouldn't be used, in that case steppers are more appropriate ui. Sliders should be used only when you have clearly defined minimum and maximum acceptable values.
Blender handles that by making the new number the sliders min or max point. So say you have a slider that goes from 0-1 and you enter a 2 the slider will now instead go from 0-2. Well it will until you go down below that default soft max value, then the slider will go back to 0-1. Works great and is quite intuitive imo.
 
Blender handles that by making the new number the sliders min or max point. So say you have a slider that goes from 0-1 and you enter a 2 the slider will now instead go from 0-2. Well it will until you go down below that default soft max value, then the slider will go back to 0-1. Works great and is quite intuitive imo.
That's inovative approach, but I wouldn't say it's really intuitive. Real hardware sliders on which gui sliders are based on can't behave like that.
 
That's inovative approach, but I wouldn't say it's really intuitive. Real hardware sliders on which gui sliders are based on can't behave like that.
I don't see why we should limit software to what hardware can or cannot do though. But sure, maybe a hint somewhere that says you can write values above or below of what the slider can itself handle could maybe be of help, like a small hover tooltip whenever you pull a slider to the max.
 
I have a little bit of late night UI development to share. Hopefully this takes a few steps toward uniting the warring factions. :D

1776311781916.png


The output channel pages have received a minor overhaul. We now display interactable routing parameters for the selected channel, with revised gain and delay controls. Previously excessive padding has also been trimmed, meaning that no additional space is consumed by the new elements.

1776312101074.png


Clicking the lock icon next to the gain and delay labels will prevent the corresponding value from being adjusted. Dragging a slider adjusts the value in integer increments, while editing the values numerically enables any desired level of precision up to four decimal places.

The "right-click to reset" function has also been overhauled. Rather than simply resetting the value to zero, it will now be reset to the value that is actually saved to the current preset. One might consider this a sort of undo function. Hopefully this will serve to eliminate frustrating "I didn't mean to change that!" situations.

1776313193033.png


Finally, clicking and holding the delay unit will switch to a sample rate compensated distance unit (centimeters) until released. I think this is rather nifty. ;)
 
I think this is rather nifty. ;)
It's all pretty nifty! I'm still blown away by how much more professional looking it is than some of the kit you can buy. :cool:

Ahem... Just to add an unnecessary bit of extra work for you, I was wondering how easy it would be for you to embed volume data in the user bits in the SPDIF signal? Obviously it would only work between two (or more) DSPi's, although I suppose you could format it as displayable text for compatibility(?). I was thinking about ways to synchronise volume between two (L/R) active crossover DSPi's and a master/source DSPi (say, in active speakers) without additional cables. You might need safeguards on the receiving DSPi, so maybe it will only ramp up the local volume slowly when first connected, so you have time to pull the plug if it doesn't stop at your expected level! Do you think it would be worth yout time to look at?

It's an unlikely scenario, but you could make a multi-zone speaker/sub system each with DSP and/or Xover and synchonised volume control for the whole house. No problem on distance over 10m if you use AES!:D

P.S. I'm also blown away by the projects that are taking shape - keep up the good work and please keep sharing! :p
 
It's all pretty nifty! I'm still blown away by how much more professional looking it is than some of the kit you can buy.

It really shows how sad the DSP market is. There are so many units out there but they all seem to have pretty annoying drawbacks be it cost or garbage UI or just crappy feature set. I mean the Delay settings alone on this DSPi just embarass most other units. Something like a Dayton DSP408 is basically e-waste in comaprison.

I just ordered a few pico's to have around for this project. Replacing my 'Motu into a Motu' interface based DSP filters.
 
Back
Top Bottom