@EQ
Your speakers follow your screen, automatically.
What is @EQ?
@EQ is a simple app designed to do one simple thing: Switch your speaker setup when you switch your primary monitor.
You could also use it as a preset-capable audio equaliser, but auto-switching is @EQ's main purpose, for folk like me who use their PC also as their movie player (or whatever) on a different screen, with different speakers.
I used to use Equalizer APO for this, but I could never get the darned thing to work automatically, and having to switch EQ & preamp levels manually when we switch to the "movie screen" was becoming tedious (my desktop speakers sound very different to our "movie" speakers, without EQ adjustment). And of course, switching back again.
@EQ, once setup, will automatically and painlessly set your audio output, EQ + preamp levels and audio channels on a per-monitor basis, with zero user interaction.
@EQ comes in two parts. A listener which runs in the background (using minimal resources), and a font-end editor, which you can use to make changes to your settings, load and save presets, etc..
Stereo-only, for now.
Components..
-
The Wire
@EQ uses the VB-Audio virtual cable; basically a driver; which you will need to install and setup. This is pretty simple. See the CABLE setup section.
CABLE Input is the playback end your apps play into. CABLE Output is the recording end the listener reads.
-
The Listener
@EQListener.execaptures the CABLE input; using WASAPI; filters it to your specifications and plays it through the linked Output. -
The Config
@EQ.exeenables you to edit audio presets and links monitors to speakers. The app updates the (ini) settings for the listener to read and apply.When @EQ.exe isn't running, the listener stops checking the ini file until you switch monitors, switch output device, or change the "default" output device.
CABLE setup:
First, install the VB-Audio virtual cable as Admin. It adds two sound devices to your system audio setup: CABLE Input (ignore the 16ch variant) on the playback side and CABLE Output on the recording side. You will need to reboot to complete the installation.
Once CABLE is installed:
-
Microphone privacy
Windows Settings (Win+I) > Privacy and security > Microphone. Enable "Microphone access" and "Let desktop apps access the microphone". With either off, audio captures fail and the listener instead creates a
capture deniedentry to its log. CABLE counts as a microphone here. There are technical resons for this, outside the scope of this document.No program can work around this switch, so if you want
@EQto work, that's your only option. It doesn't matter if you have an actual microphone or not; because of the way CABLE routes audio, these setting need to be enabled for CABLE to work with@EQ. -
Default playback
Open Sound settings, Playback tab. Right-click CABLE Input, Set as Default Device.
Once installed and selected as the default output device, every app that sends audio to the "default" device will now use CABLE for its output.
To test if CABLE is working, head to the Sound > Recording tab (best to use mmsys.cpl for this, as the newer Windows audio control panel is rubbish), open CABLE Output properties > Listen tab > check "Listen", and below select your current speakers (ensure you have some audio playing), apply.
If all goes well, you should hear your audio. Good. Test complete. Now disable Listen and select "Default Playback Device", move on..
Any issues, check the @EQListener.log (in %APPDATA%\corz\@EQ) for details.
@EQ App:
- There is a choice of 5-band, 10-band, 15-band and parametric EQ controls. The parametric EQ can have up to 32 independantly configurable frequency band sliders (the default is 20); you can add and delete them as required.
- Draw a marquee around any amount of sliders to select them; you can then can drag them all together.
- Select any slider (or its rail, which moves the slider to that point) and move it, then move your pointer left or right to "draw" an EQ curve.
- If you edit a curve in one mode, when you switch to a new mode, so long as you haven't edited that mode already, your curve will be retained; recalculated to the new number of bands. Works both ways, so you can setup a simple curve in 5 or 10 band EQ, then transfer it to a 20 band paramteric EQ for finer control, or whatever.
- Whatever you set for the lowest/highest frequency values is used for all values beyond. So, for example, if you need to clamp the low frequency output on your speakers at 60Hz, create a slider at 60Hz (set to 0) and another at 61Hz (or whatever), where your real settings will begin.
Similarly, if you delete all-but-one of your parametric EQ bands, the remaining band effectively becomes a volume control, spanning all EQ bands; pointless, but illustrates the point.
- Parametric mode has extra controls under the sliders. The band's frequency is editable, and underneath that a grey slider thumb which you can use to drag the band up and down the frequency range. Other sliders will move to accommodate.
The current frequency of the band is calculated continuously by the pointer's current position on a logarithmic scale between its original position and the next band's position, in other words, if you slide half way to the next band and let go (the thumb snaps back to its original location), doing that same thing action again would shift the band's frequency half what it did last time; you can get sliding accuracy down to 1Hz this way. It's easier done than said.
The frequency graph updates live as you move the band around.
Hold down the Ctrl key to transform the grey thumbs into a delete buttons, clicking one deletes that band (you can right-click the slider thumbs for this, too).
- Like Equalizer APO, the position of any frequency is measured on a logarithmic axis between your selected points, basically drawing straight lines between them on the log axis, with linear interpolation (flat outside). Move one slider and every frequency point between that slider and its neighbours will rise or fall relative to your change.
- A graphical display of the current frequency response updates instantly on all changes.
- All changes are saved live, there is no "Save" button. If you want to mess about with a preset, best to use the "Duplicate" function.
- There is a rudementary undo facility (
Ctrl+Z, as usual), so any slider and preamp changes can be reverted.There is no "redo" and no "levels" of undo. Only your most recent action is stored; however undo will revert multi-sliders actions like flatten operations, "drawn" curves and moving multiple (marquee selected) sliders together, as well as deleting a slider and moving it around the frequency band.
- Right-click the preset combo to rename a preset, export a preset, or sort the list. An unsorted preset list shows in the creation order. The "Default" item is always at the top. You can delete the default preset, or create your own, but either way it's always at the top.
- Right click on any monitor in the list to set a "friendly" name for that screen. Same story for the Outputs combo; something like "NEC > Hifi" is much more useful than well, whatever it was.
- Click and drag blank areas (or the frequency graph) to move the window around.
-
Presets
You can of course save presets for later use. These are stored along with all @EQ settings, in your
@EQ.ini.Everything is saved inside the preset, monitors and their selected audio output and for each, EQ curves, preamp levels and channel swap settings for every mode you edited (5 Band, 10 Band, 15 Band and Parametric; each monitor potentially creating four different curves in your ini for each preset), the current mode being the one that is applied.
The estimated upper limit to the number of monitors @EQ can support inside one preset is around 270, depending on how your hardware is named inside Windows OS. I did not test this.
-
Import / Export
You can import presets from an ini file or export all your presets to a file. Simple as that.
Right-click the preset combo to export only the current preset.
This magic will also be applied of you flatten the sliders in your current mode, switch to a different mode with a curve you like, and back. Voila!
The Listener:
The listener accepts a few command-line parameters:
--list
list render endpoints (audo outputs) as id|name
--default
reports DefaultOutput=id
--monitor
print current monitor id
--ini
use a different ini file (defaults to
%APPDATA%\corz\@EQ\@EQ.ini)--help
shows this list
@EQListener never writes to your ini file, it only reads. When the @EQ app is open it does this every 500ms, so your changes happen live.
As mentioned, the listener logs to %APPDATA%\corz\@EQ. This log is wiped on every launch.
@EQListener.exe runs as a Windows app, but in the background, which is why if you try run it in a shell, you won't see any output.
If you want to capture the output from the listener, do something like this:
python -c "import subprocess; print(subprocess.run([r'C:\Program Files\corz\@EQ\@EQListener.exe', '--help'], capture_output=True, text=True).stdout, end='')"
In operation..
When you switch screens, the listener reads the new screen ID, looks up its link in your @EQ.ini (config) file, opens the linked audio output and then loads your saved slider values (with a brief crossfade). This all happens in milliseconds.
The listener watches for monitor changes, sound device changes and default device changes; so docking, undocking, and display switches are (hopefully!) all covered.
Note: If a screen has no linked audio output, you get silence, and in @EQ, an annoying message telling you how to fix this (basically; select a Monitor, select an Output, Link them).
Requirements:
- VB-Audio virtual cable installed, CABLE Input set as Default Playback.
- Windows microphone access and desktop apps access enabled.
- The Listen tick on CABLE Output (Windows sound > recorder) must be unticked in use, or you will get double audio at best.
- If you have multiple monitors connected simultaneously, the "Primary" monitor's linked output is the one @EQ will use.
- Only one listener can run at a time. If you launch a second copy, it will exit immediately.
- The
@EQapp saves settings to your ini file, the listener reads that in ini file regularly and applies its settings. Simple as that. If you really wanted to, you could ignore The@EQapp and edit your ini file manually and everything will work 100%, but that's a lot less fun. You could also create a different app to control the listener. - If you have old APO presets you want to use in
@EQ, ask your AI to convert them to@EQ; it is a trivial task, as they share similar methodology.
Download..
Download and use EQ, for free..
click to see zip archive contents
# made with checksum.. 64-bit edition. # from corz.org.. https://corz.org/windows/software/checksum/ # #sha2#@EQ.zip#2026.11.05@10.19:09 82c8a05ab8d087a6f389333f5862ea39e77ee0502521d7ddebc676e9c9821f0b *@EQ.zip
