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