DSPiConsole WeebLabs
winget install --id=WeebLabs.DSPiConsole -e A WinUI 3 control application for the DSPi audio processor. Supports both RP2040 and RP2350 platforms.
winget install --id=WeebLabs.DSPiConsole -e A WinUI 3 control application for the DSPi audio processor. Supports both RP2040 and RP2350 platforms.
A native WinUI 3 control application for the DSPi audio processor, open source DSP Firmware that turns a Raspberry Pi Pico (RP2040) or Pico 2 (RP2350) into a capable multi-output USB audio interface with an onboard signal processor.
DSPi Console provides complete control over the device: parametric equalisation, active crossovers, routing, time alignment, loudness compensation, headphone crossfeed, dynamics processing, bass enhancement, stereo upmixing, physical control surfaces and hardware configuration, all applied live over USB and requiring no reflashing.

Run Console and Firmware at exactly the same version, including the same beta or hotfix suffix, unless a particular release explicitly states otherwise.
Console and Firmware share a private USB control protocol that evolves with each release. New parameters, new wire layouts and new bulk-transfer sections are introduced together on both sides. Mixing versions is not a supported configuration, and the consequences range from the merely confusing to the potentially damaging:
Every release of DSPi Console names the Firmware version against which it is built, and every Firmware release names the Console version that accompanies it. Update both together, and consult the release notes beforehand: if a release is compatible with a wider range of versions, it will say so.
Console degrades gracefully where it can. It probes the device for each capability at connection time and hides the controls the connected device's Firmware cannot support, rather than issuing commands the device would reject. This behaviour is a mitigation, not a substitute for matched versions.
Firmware releases are published in the DSPi Firmware repository, and Console releases on this repository's releases page.
Hardware
Software
If your device is new, or if you are updating to match a new Console release:
.uf2 Firmware image for your board from the
DSPi releases page. RP2040 and RP2350 builds are separate files;
ensure you select the one that matches your board.RPI-RP2 or similar. Copy the .uf2 file onto it. The board
reboots automatically once the copy completes.DSPi.Console.v.zip from the
releases page, choosing the release that matches
your Firmware version.DSPiConsole.exe.Connect the device and launch Console. Detection is automatic: the title bar shows the connected device, and the sidebar populates with the input and output channels your platform provides. If more than one DSPi device is attached, a selection dialog appears.
Windows also presents the device as a standard USB audio interface. Select it as your playback device in the Windows sound settings, and choose the desired format in the device's advanced properties. The number of input channels Console displays follows the format Windows is streaming, so an eight-channel format yields eight independently processed input channels.
Equalise a channel. Click a channel in the sidebar to open its editor. Each channel provides ten parametric bands. Choose a filter type from the dropdown, then set the frequency, Q and gain. Values accept typed entry, respond to the scroll wheel while Ctrl is held, and reset to their default on a right-click. The graph updates continuously, and every change is applied to the device immediately. Click the channel again to return to the dashboard.
Build a crossover. On an output channel, switch to the crossover tab. Each output provides four crossover bands, each configured by family (Linkwitz-Riley, Butterworth or Bessel), type (low pass or high pass) and slope. This is the configuration required to drive an active two-way or three-way system directly from the device's outputs.
Route your signal. Open the matrix mixer with Ctrl+Shift+M. Rows are inputs, columns are outputs, and each crosspoint carries an independent gain and a phase invert. Routing both input channels to a single output at -6 dB, for example, produces a summed mono feed suitable for a subwoofer. Per-output gain, delay, mute and enable controls sit alongside the matrix, and channels can be renamed to reflect their role in your system.
Align your speakers. Per-output delay is set in milliseconds from the matrix mixer or the channel editor. Firmware compensates automatically for the differing latencies of the S/PDIF, I2S and PDM output paths, so the values you enter correspond to acoustic delay.
Save your work. Adjustments are applied to the device immediately, but they reside in volatile memory until you save them. Press Ctrl+S, or use File > Save Preset, to commit the current configuration to one of the device's ten preset slots so that it survives a power cycle. An asterisk beside the preset selector indicates unsaved changes. File > Revert Preset discards them and reloads the stored version, and File > Factory Reset returns the device to its defaults.
Loudness compensation applies volume-dependent equalisation derived from the ISO 226 equal-loudness contours, restoring the bass and treble that the ear loses at low listening levels. The reference SPL and the strength of the correction are both adjustable, the resulting curve is drawn live, and on Firmware that supports it you may choose precisely which output channels receive the compensation.
Crossfeed applies a BS2B-derived process, with optional interaural time delay, that softens the unnaturally wide channel separation of headphone listening. Three classic presets are provided (Default, Chu Moy and Jan Meier) along with a custom mode that exposes the cutoff frequency and feed level directly. The set of output pairs that receives crossfeed is selectable on Firmware that supports it.
The volume leveller is an RMS-based, soft-knee upward compressor that lifts quiet passages toward a target level without ever making loud passages louder. Controls cover the amount, the speed (slow, medium or fast), the maximum gain it is permitted to apply, a gate threshold below which it remains inactive, and an optional 10 ms lookahead for improved transient handling. The channels that feed the shared level detector and the channels to which the resulting gain is applied are selected independently.
Psychoacoustic bass provides missing-fundamental enhancement for small speakers, synthesising a harmonic series that the ear interprets as bass the driver cannot physically reproduce. The cutoff frequency, harmonic level, clipper drive, even-to-odd harmonic character and the amount of original bass retained are all adjustable, with starting-point presets and per-output selection.
The upmixer derives centre and surround channels from a stereo source on RP2350 devices. Centre and surround extraction each offer two engine modes (Sinner and Logician) with their own conditioning controls: extraction strength, centre width, presence, correlation threshold, attack and release, detector bass cut, surround delay, high-pass and low-pass filtering, and decorrelation. A live telemetry strip shows the measured correlation and explains why the upmixer is parked whenever it is not producing output. Controls that do not apply to the current mode are hidden rather than greyed out, and the matrix mixer labels the derived rows while the upmixer runs.
The test signal generator runs on the device itself, and produces sine and square tones, white and pink noise, and logarithmic, linear or stepped sweeps for calibration and troubleshooting. The target channels and the level are both selectable. The generator can optionally bypass the DSP chain entirely, which is useful for verifying an output path in isolation, decorrelate the channels, or step through one channel at a time. Because it runs on the device, it exercises the entire output path rather than the host playback stack alone.
Control surfaces bind physical controls attached to the device's spare GPIO pins to DSP parameters, so that the device can be operated without a computer. Supported control types are buttons, switches, potentiometers, rotary encoders, plain LEDs, PWM LEDs and infrared receivers. Each binding pairs a control with a parameter and an action: absolute adjustment, stepped increment or decrement, toggle, set, follow, momentary, trigger, or one of the LED indicator behaviours. Parameters include volume, mute, preset selection, input source, the processing blocks, per-output gain and delay, and individual filter parameters. Infrared remotes are handled by a learning mode that captures NEC, RC5 and RC6 codes directly from the handset. Channel targets are presented using your own channel names.
The device is not limited to USB. Depending on your hardware and Firmware, the input source selector offers USB, S/PDIF, I2S and ADAT, and the settings window provides a page for each:
.dspipreset file, which may then be
imported at a later date or onto another device. A preset file carries the input preamps, volumes, input source,
loudness, crossfeed, volume leveller, psychoacoustic bass, upmixer, every channel's name, delay, gain, mute and
enable state along with its EQ and crossover bands, every matrix crosspoint, and the physical I/O wiring. Volume
levels and I/O configuration are separate options when importing, disabled by default, and anything the
connected device cannot accept is reported rather than discarded silently.| Shortcut | Action |
|---|---|
| Ctrl+I | Import filters |
| Ctrl+Shift+I | Import preset file |
| Ctrl+E | Export filters |
| Ctrl+Shift+E | Export preset file |
| Ctrl+S | Save preset |
| Ctrl+Shift+B | Browse AutoEQ profiles |
| Ctrl+Shift+L | Loudness compensation |
| Ctrl+Shift+C | Crossfeed |
| Ctrl+Shift+P | Psychoacoustic bass |
| Ctrl+Shift+U | Stereo upmixer |
| Ctrl+Shift+M | Matrix mixer |
| Ctrl+Shift+G | Test signal generator |
| Ctrl+Shift+T | Statistics |
| Alt+F4 | Exit |
Ctrl+Shift+I and Ctrl+Shift+B are each currently assigned to two menu items (control surfaces and the bulk endpoint monitor respectively, in addition to the entries listed above). Both of those windows are always reachable from the File menu.
Numeric fields throughout the application share the same conventions: type a value directly, hold Ctrl and scroll to adjust it, or right-click to reset it to its default.
The settings window is organised into sections:
Settings that must be written to the device are staged rather than applied piecemeal. The settings window shows a count of pending device changes, which you may then either save to the device's flash or discard.
Console reports that no USB devices are visible to libusb. The DSPi vendor interface has not been bound to the WinUSB driver. Assigning WinUSB to the vendor interface with a tool such as Zadig resolves this. Note that this applies to the vendor control interface only, and does not affect the standard USB audio interface that Windows uses for playback.
Controls or entire windows are missing. Console hides any feature for which the connected device's Firmware does not report support. This is almost always a version mismatch: confirm that the Firmware version matches the Console version, including any beta or hotfix suffix.
The device is not detected at all. Verify that the cable carries data, that the device enumerates as a USB audio interface in the Windows sound settings, and that Firmware has finished flashing (a board left in bootloader mode presents itself as a removable drive rather than an audio device).
Changes are lost after a power cycle. Adjustments are applied live but are not persistent until saved. Press Ctrl+S to write the current configuration to a preset slot.
Requirements:
dotnet build -p:Platform=x64
The platform must be specified explicitly: the default AnyCPU configuration fails because the Windows App SDK
requires an explicit runtime identifier. This project targets x86_64 only.
Alternatively, open DSPiConsole.sln in Visual Studio 2022 and build with Ctrl+Shift+B.
DSPiConsole-Windows/
├── DSPiConsole/ # WinUI 3 application
│ ├── MainWindow.xaml(.cs) # Sidebar, dashboard, channel and crossover editors, graph
│ ├── MatrixMixerWindow.xaml(.cs) # Routing matrix and per-output controls
│ ├── GraphWindow.xaml(.cs) # Detachable frequency response plot
│ ├── LoudnessWindow.xaml(.cs) # ISO 226 loudness compensation
│ ├── CrossfeedWindow.xaml(.cs) # BS2B headphone crossfeed
│ ├── VolumeLevellerWindow.xaml(.cs) # Upward compression
│ ├── PsychoacousticBassWindow.xaml(.cs)
│ ├── UpmixerWindow.xaml(.cs) # Stereo to centre and surround upmixing
│ ├── TestSignalsWindow.xaml(.cs) # Onboard signal generator
│ ├── ControlSurfacesWindow.xaml(.cs) # GPIO and infrared control bindings
│ ├── StatsWindow.xaml(.cs) # Telemetry and buffer statistics
│ ├── BulkMonitorWindow.xaml(.cs) # Control traffic decoder
│ ├── Settings/ # Settings shell, registry and pages
│ ├── Controls/ # Bode plot, meters, CPU display
│ ├── Dialogs/ # AutoEQ browser, channel pickers
│ ├── Services/ # Filter and preset file handling, AutoEQ database
│ └── ViewModels/ # Application state and device commands
├── DSPiConsole.Core/ # Platform-independent models and DSP mathematics
│ ├── Models/ # Channels, filters, crossovers, control surfaces, status
│ └── DspMath.cs # Biquad and crossover coefficient calculation
└── DSPiConsole.Usb/ # USB transport
├── DspDevice.cs # Vendor control protocol over LibUsbDotNet
└── BulkParamsParser.cs # Bulk configuration decoding
The official Discord server is the best place for development updates, discussion and assistance.
Released under the GNU General Public License v3.0.