Portal Equalizer
System-wide EQ, a live spectrum and priority-based device switching for Windows, on top of a DSP engine I did not write.
Problem
Equalizer APO already does system-wide, per-device, per-channel equalisation on Windows at essentially no latency cost. What it does not have is an interface: it is driven by a text file, which means presets are something you keep in a folder, and switching outputs is something you do by hand every time the headphones come out.
Approach
Write none of the DSP. The app generates Equalizer APO’s config file and owns everything around it: a ten-band editor per device with an automatic clip-safe preamp, a preset catalogue, a live spectrum read off WASAPI loopback that suggests a preset for whatever is playing, priority-based device switching, and per-app routing so one player can be pinned to one output. The engine install is handed to Equalizer APO’s own installer, unmodified and separately licensed.
Outcome
- Ten bands per device and 85 presets, with a preamp computed to stay clip-safe rather than left to the ear.
- Device switching by priority: unplugging headphones falls back the way a person would have done it by hand.
- Per-app routing built on an undocumented Windows API, written up in the repository rather than left as a trick.
- Every endpoint’s registry state is exported before the engine installer runs, and Settings has a Restore that puts it back. The pre-existing config.txt is backed up once, too.
- Ships as an .exe and an .msi for Windows, each carrying a Tauri update signature so an installed copy can verify what it upgrades to. That is not a code-signing certificate, so a first download still meets SmartScreen.




1 / 4
The decision worth reading is the one not to write a DSP. A system-wide equaliser on Windows means an APO, an audio processing object loaded into the device graph, and getting that wrong is a machine with no sound and no obvious way back. Equalizer APO has been doing it since 2012, and it is configured by a file. Generating that file makes the whole audio path somebody else’s well-tested code, and leaves this project owning only the part that was actually missing.
What that trade costs is honesty about the seam. Until an endpoint is hooked by the engine, its EQ silently does nothing, which is exactly the failure a user cannot diagnose. The Engine panel says which endpoints are hooked rather than letting the silence speak, and Restore exists because the way to undo an APO is a registry state nobody remembers taking.
- 10
- Bands per device
- 85
- Presets
- 0 lines
- DSP written