Skip to content

sKuhLight/monix

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Monix

CI License: MIT Ko-fi

A standalone, native Linux control application and driver for Audient iD-series USB audio interfaces. Inspired by the great work of MixiD, Monix takes a different technical approach — a companion kernel module plus a protocol mapped from the official app — so it can do what the vendor software does: live state sync, channel faders, routing, and VU metering, while audio keeps playing.

Compatibility

  • Any modern Linux distro — Arch/CachyOS, Debian 12+, Ubuntu 22.04+, Fedora, etc. The module Makefile auto-detects Clang- vs GCC-built kernels, so CachyOS's Clang kernel and the GCC kernels on Debian/Fedora both build cleanly.
  • Kernel ≥ 5.9 — the module uses the in-kernel usb_control_msg_send/recv helpers (added in 5.9), so control + audio can coexist without claiming the audio interface.
  • PipeWire is recommended (for the Windows-style virtual-device split); the rest works on any ALSA setup.
  • Hardware-verified on the iD24; other iD models are detected and supported on a best-effort basis (see Device support).

Why this exists

On Linux the iD control protocol is sent to a USB interface that snd-usb-audio owns, and userspace can't send control requests to it without detaching the audio driver (which kills the sound card). We solve this the same way the kernel does for other pro interfaces: a small companion kernel module relays control transfers from inside the kernel, so control and audio run at the same time with no glitches.

Layout

driver/   companion kernel module (relays USB control transfers; reads via ioctl)
lib/      userspace protocol library (control + state + meters)  [in progress]
app/      the GUI control panel (Audient-like layout, custom theme)  [in progress]
docs/     PROTOCOL.md — reverse-engineering notes / protocol spec
re/       reverse-engineering working files (macOS app slice, scripts) [gitignored]

Requirements

A C++17 toolchain, CMake ≥ 3.16, git, your kernel headers, and dev packages for ALSA, GLFW, and OpenGL. Dear ImGui is fetched automatically by CMake (first build needs internet). DKMS is optional but recommended — it rebuilds the module automatically on kernel updates.

# Arch / CachyOS / Manjaro  (use headers matching your kernel: linux-cachyos-headers, …)
sudo pacman -S --needed base-devel cmake git linux-headers alsa-lib glfw mesa dkms

# Debian / Ubuntu / Pop!_OS
sudo apt install build-essential cmake git linux-headers-$(uname -r) \
                 libasound2-dev libglfw3-dev libgl1-mesa-dev dkms \
                 libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libxext-dev \
                 libwayland-dev

# Fedora
sudo dnf install gcc-c++ cmake git kernel-devel alsa-lib-devel glfw-devel \
                 mesa-libGL-devel dkms

Install

Easiest: a release bundle

Grab the latest monix-*-linux-x86_64.tar.gz from Releases, then:

tar xzf monix-*-linux-x86_64.tar.gz
cd monix-*-linux-x86_64
./install.sh           # installs deps, builds the kernel module (DKMS), installs the app
monix-gui

The bundle ships prebuilt app binaries; only the kernel module is built locally (it has to be — modules are tied to your running kernel). install.sh also works from a source checkout (it builds the app too if there's no prebuilt binary).

From source

git clone https://github.com/sKuhLight/monix && cd monix
./install.sh           # or follow the manual steps below

1) Kernel module (companion driver, not a custom kernel)

A small out-of-tree module that relays control transfers from inside the kernel so the GUI works while audio plays. It declares the device, so once installed it auto-loads when you plug the interface in — no boot-time setup.

Recommended — DKMS (survives kernel upgrades):

sudo cp -r driver /usr/src/audient_id-0.1
sudo dkms add     -m audient_id -v 0.1
sudo dkms install -m audient_id -v 0.1
sudo cp driver/99-audient-id.rules /etc/udev/rules.d/ && sudo udevadm control --reload-rules

Or — plain make (rebuild yourself after each kernel update):

cd driver && make && sudo make install && cd ..   # builds + installs module + udev rule
sudo modprobe audient_id                          # load now (or just replug the device)

Then add yourself to the audio group (the udev rule grants it access to /dev/audient_id*) and re-login:

sudo usermod -aG audio "$USER"

2) App + CLI

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j

./build/app/monix-gui     # the GUI control panel
./build/monixctl status   # CLI: dump live device state

Sanity check: ls /dev/audient_id* should list a node and monixctl status should print the sample rate + monitor state.

Device support

The library is profile-driven: on connect it detects the USB PID and loads a per-device profile (counts, mixer node layout, routing scheme) reverse-engineered from the macOS app — see docs/DEVICES.md. The GUI builds its channel strips and routing matrix from that profile, so the mixer adapts to each model. Unknown PIDs fall back to the iD24 layout.

Model Detect Mixer/faders Output routing Tested
iD24 ✅ formula hardware-verified
iD48 ◐ formula (RE'd, untested) binary only
iD14 / iD22 / iD44 ◐ table scheme not yet wired binary only
iD4 — (no mixer) binary only

Non-iD24 models show an "experimental" banner; their routing UI is read-only until the table-scheme wire codes are decoded and someone with the hardware can confirm. Mixer faders/meters use the shared scheme and should work, but are unverified off the iD24.

Status

  • ✅ Kernel module — control + meter reads while audio plays (no card teardown).
  • ✅ Protocol library — routing, mixer crosspoints, sample rate, clock source, optical (ADAT/S-PDIF) mode, monitor/master toggles, talkback, phones; control map decoded from the macOS app and verified on hardware.
  • ✅ GUI — dark-violet, Audient-style: channel strips with stereo/mono link, fader/pan/phase/meter, Master/Cue A/B mixes, monitor section, and a System Panel (routing matrix incl. digital outs, sample rate, clock source with S-PDIF lock warning, digital I/O mode, trims).

Multiple devices & gaming (Windows-style split)

The iD24 is class-compliant, so Linux sees it as one 16-ch output + 12-ch input node with an all-aux channel map. Games and surround-aware apps then spread or mis-map stereo across channels your monitors don't carry — audio "bugs out". (Windows avoids this only because Audient's driver splits the device into named stereo endpoints.)

Easiest: do it in the app. Open VIRTUAL DEVICES in Monix — tick the stereo sinks/sources you want (they appear instantly, no PipeWire restart), hit Enable inputs for the mics/ADAT, and Save as startup config to make them persist.

setup/ has the same thing as hand-editable PipeWire configs — stereo sinks/sources each wired to one channel pair, while the full multichannel node stays for DAWs:

  • setup/id24-stereo-sink.conf — minimal: one clean "iD24 Stereo" sink on DAW 1+2. Point games/desktop at it. Fixes the gaming issue with the least fuss.
  • setup/id24-split.conf — full Windows-style set: Main 1+2 / Out 3+4 / Phones 5+6 sinks, and Mic 1+2 / ADAT / Loopback sources.
mkdir -p ~/.config/pipewire/pipewire.conf.d
cp setup/id24-split.conf ~/.config/pipewire/pipewire.conf.d/   # or id24-stereo-sink.conf
systemctl --user restart pipewire pipewire-pulse

For inputs, set the card to its Duplex profile once (pavucontrol → "Mehrkanal-Duplex"); WirePlumber remembers it. Then pick the stereo device you want as default in your sound settings.

Troubleshooting

  • No /dev/audient_id* — module didn't load. Check lsmod | grep audient and dmesg | grep audient_id; ensure kernel headers are installed and (Arch) match the running kernel.
  • GUI says "no device" / permission denied — not in the audio group yet (re-login after usermod), or the udev rule isn't installed.
  • S/PDIF crackling — set Clock source to Optical in the System Panel so the iD slaves to the incoming stream, and use the same sample rate at both ends.

Support

Monix is free and open source. If it's useful to you, you can support development on Ko-fi:

Support me on Ko-fi

Credits

Huge thanks to MixiD by TheOnlyJoey — the project that first brought Audient iD control to Linux and mapped out a lot of the groundwork (control values, device list). Monix builds on that spirit with a different architecture (kernel-module relay + a protocol decoded from the official macOS iD.app). If you have an Audient interface on Linux, go give MixiD a look too.

About

Native Linux control panel and driver for Audient iD-series USB audio interfaces — mixer, routing, metering, and per-device profiles.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors