A small tool to control the Audient EVO 4 USB audio interface on Linux, with a GUI, persistent settings, and automatic restore at login.
Audient's official control app is Windows/macOS only. On Linux the hardware gain resets when you fully power-cycle the device, because nothing restores your values. This tool fixes that.
Unlike the raw-USB / kernel-module approaches out there, this one talks to the device through ALSA (the same layer PipeWire uses). That means:
- No kernel module
- No detaching the device from the audio driver
- No device reset, no "gain jumps to 0"
- Your audio never disappears while the tool runs
- GUI (CustomTkinter, neon/cyberpunk styling) with percent sliders (0–100) for Mic Gain and Output/Headphone
- Persistent settings saved to
~/.config/evo4-control/ - Autostart restore — your saved values are re-applied at login
- Headless restore script for use in a service
Discovered ALSA controls on the EVO 4 (amixer -c EVO4 scontrols):
| Control | Function | Raw range |
|---|---|---|
Mic |
Mic gain | 0..116 (−8 dB … +50 dB) |
EVO4 |
Output / headphone | 0..254 |
Extension Unit |
on/off switch, purpose unclear | — |
The GUI shows these as 0–100% and converts to the raw values internally.
48V phantom power is not exposed as an ALSA control on this unit and can only be toggled with the hardware button. That's fine for dynamic mics, which don't need phantom power anyway.
Tested on an Audient EVO 4 (USB
2708:0006). Other EVO models likely expose different control names — adjustevo4_device.pyaccordingly.
- Linux with ALSA (
amixer, fromalsa-utils) - Python 3.10+
tkinterandcustomtkinter(for the GUI)
- Put the
.pyfiles somewhere, e.g.~/evo4-control/ - Install dependencies:
and make sure
pip install customtkinteralsa-utils+ Python'stkinterare present. - Run the GUI:
python3 evo4_gui.py
If your card isn't named EVO4, find it and adjust CARD in
evo4_device.py:
aplay -l
amixer -c <number> scontrols
See nixos-example.nix for a ready-to-adapt snippet that:
- registers a
systemduser service to restore settings at login - provides
evo4-guiandevo4-restorecommands - pulls in
alsa-utils
The Python environment needs tkinter and customtkinter:
python3.withPackages (ps: [ ps.tkinter ps.customtkinter ])Replace YOUR_USER and the project path, then sudo nixos-rebuild switch.
- Drag a slider → value is sent to the device immediately (as a percentage)
- Save → store current values persistently
- Reconnect → if the device was plugged in after the GUI started
After saving once, the autostart service applies your values at every login — no need to open the GUI again unless you want to change something.
Headless (e.g. from a script or service):
python3 evo4_restore.py
The controls were found by listing the ALSA mixer controls the kernel already
exposes for the device (amixer scontrols / scontents). The tool simply
sets those controls via amixer. No reverse-engineered USB traffic is needed
for gain and output — ALSA already surfaces them.
The USB protocol for EVO devices was originally reverse-engineered by several community projects. This project takes a different, simpler route via ALSA, but those efforts were helpful in understanding the device.
MIT — see LICENSE.