Skip to content
 
 

Repository files navigation

BiD — Audient iD software for Linux

Unofficial control panel and mixer software for the Audient iD series USB audio interfaces on Linux: iD4, iD14, iD14 MKII, iD22, iD24, iD44 and iD48. Audient ships no Linux software or driver for the iD range — BiD is the missing mixer: mixes and stereo cues, routing, alternate speaker switching, VU meters and the full monitor section, while audio keeps playing. Built on libusb, glfw and imgui.

The BiD mixer connected to an iD24

BiD is a fork of MixiD by @TheOnlyJoey, which did the original reverse engineering and protocol work this builds on.

Description

Since there is no official support by Audient for the iD interfaces on Linux, this exists as an alternative to enable the functionality not available in the default class compliant USB driver.

Unlike the original, BiD talks to the interface over its spare DFU interface rather than claiming the audio control interface, so the kernel keeps the sound card and playback carries on while the mixer is open. It also stays resident in the system tray, and the interface follows the window when you resize it.

Notes and To Do

  • Devices are detected by USB id; the iD24 is the one verified on hardware. The others carry a profile decoded from the official app — how many mixer nodes and cues they have, whether they own alternate speakers or an optical output — and BiD hides what a model does not have. Until a model is confirmed on hardware it is marked "protocol unverified" and nothing is written to it on connect
    • If a new device gets released, please open an Issue with your USB id and input/output counts
  • The protocol is mostly figured out, just needs verification/testing
    • Only the monitor section can be read back; the rest of the hardware is write-only, so BiD remembers its own state per device and pushes it on connect instead
  • Linux is the target; the tray and desktop integration are Linux only

Quick install

One line on any major distro (Debian/Ubuntu, Fedora, Arch, openSUSE):

curl -fsSL https://raw.githubusercontent.com/baakhoff/BiD/master/install.sh | bash

It installs the build dependencies with your package manager, builds the newest release, installs the binary with its desktop entry and icon, and writes the udev rule so BiD runs without root. Re-run it any time to update. Rather read before you pipe? Download install.sh and run it locally — it is short.

Prefer a package? Every release carries a .deb (dependencies and the udev rule baked in) and an AppImage that runs anywhere; Arch users find a PKGBUILD in packaging/.

Compilation

Dependencies

  • CMake, a C++ compiler and pkg-config
  • libglfw3-dev (glfw-devel)
  • libusb-1.0-0-dev (libusb1-devel)
  • OpenGL headers (libgl-dev / mesa-libGL-devel)
  • libsystemd-dev, or basu on distributions without systemd (optional, enables the system tray icon)

Compile

  • git clone the repository
  • mkdir Release
  • cd Release
  • cmake -DCMAKE_BUILD_TYPE=Release ..
  • make

Usage

  • Either run through sudo, or setup appropriate udev rules for your interface
  • Run the BiD executable

Optionally, make install also places a desktop entry and icon, so BiD can be started from your application menu.

Installing under a prefix inside your home directory, rather than into /usr, can leave the icon missing from the menu and the task bar: an icon theme directory is only searched when it has an index.theme, and a fresh ~/.local/share/icons/hicolor has none. If that happens:

cp /usr/share/icons/hicolor/index.theme ~/.local/share/icons/hicolor/
gtk-update-icon-cache -f -t ~/.local/share/icons/hicolor

System tray

When the desktop provides a system tray, closing the window hides BiD there instead of quitting, so the interface stays connected and reachable. Clicking the icon shows and hides the window again, and right clicking it opens a menu with the monitor toggles (Dim, Alt, Talk, Phase, Mono) and Quit.

This needs a StatusNotifier tray, which KDE Plasma, Cinnamon, Budgie, XFCE and LXQt provide out of the box. GNOME needs an appindicator extension for it, and compositors such as Sway or Hyprland need a panel that implements a tray, for example Waybar. Without one, or when built without libsystemd/basu, BiD simply quits on close.

ScrollControl

The iD button's ScrollControl works on Linux out of the box: the interface's knob is a USB HID device the kernel binds as a mouse, so press the iD button, hover the pointer over anything scrollable, and turn the encoder. No driver and no configuration involved — confirmed on the iD24.

Claiming the system output

Menu → Claim the system output makes the Audient the default output on every launch and every connect. On PipeWire, a card the sound server has split into invented stereo outputs (the iD14 family's "Line" and "Headphones" twins) is first moved to the Pro Audio profile — one honest multichannel output, with the default input following it — while a card already showing a single output keeps its profile, and its node names, untouched. Off by default. Turning it off changes nothing back, and when the claim cannot act — no PipeWire, no card, no such profile — the menu says which it was.

The reassertion is the point: the desktop's output menu offers every profile of every card as a clickable entry, so one misclick can flip the card back and the choice would otherwise quietly stick.

udev rules

By default the USB device node is root-only, so BiD needs a udev rule to run without root. The installer writes it for you; by hand it is:

echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="2708", MODE="0660", GROUP="audio", TAG+="uaccess"' | sudo tee /etc/udev/rules.d/70-audient.rules

The number matters: uaccess grants the logged-in user access through the seat ACL, and udev applies those ACLs at rule 73 — a later file (like the old 84-audient.rules) tags too late and grants nothing unless you happen to be in the audio group, which stock Ubuntu users are not.

Then either reboot or reload the rules for the running system.

udevadm control --reload-rules && udevadm trigger --attr-match=idVendor=2708

All done!

Testing your model

BiD grows by measurement, and owners of untested models are the instrument. docs/TESTING.md (по-русски: docs/TESTING.ru.md) is the whole process — the safety rules, the per-ear checks, the watcher, the beep hunts, and how to report so a finding becomes a fix. Twenty minutes and working ears have mapped entire devices.

Troubleshooting

A problem with an iD interface on Linux lives in one of three layers: the hardware and its cabling, the kernel/PipeWire audio stack, or BiD itself. Chasing a symptom through the wrong layer eats evenings — a stereo imbalance was once pursued here through every software layer before turning out to be a badly seated speaker cable.

Symptom Layer Fix
One side quieter at any volume below 100% (iD14 MkII) Firmware + PipeWire The firmware ignores volume writes on the left half of Speaker Playback Volume, so hardware volume moves tilt the image right. Keep PipeWire off the hardware volume (rule below) and let BiD or the knob own the level. Documented in Audientid14-linux-fix
Only surround profiles offered for a stereo interface Kernel + PipeWire The USB descriptors declare no channel positions, so a surround layout gets invented. Choose the Pro Audio profile, which exposes the raw channels without guessing
Mixer stops responding after suspend or a replug BiD Fixed in 0.2.1: BiD notices the stale device, shows an amber reconnecting dot and comes back on its own. On older builds, Disconnect and Connect again
ALSA mixer sliders look wrong or do nothing Kernel Most of the device is write-only and its ALSA controls are misleading by design; see docs/PROTOCOL.md. Use BiD for the mixer, ALSA/PipeWire for the streams
Connect hangs forever as a normal user udev The rule's uaccess tag only works from files numbered below 73. Re-run the installer (it replaces the old 84- file with 70-audient.rules), replug the interface, retry
Connected, but no control responds (models other than the iD24) Firmware Some models refuse control traffic on the spare interface. Force the old exclusive mode with BID_CONTROL_IFACE=0 BiD — audio pauses while connected — and please report your model in an issue
One side quiet everywhere, all software checked Cables Reseat or swap the speaker cables first. It happened here

To keep PipeWire away from the hardware volume (the iD14 MkII fix; harmless on the other models), drop a WirePlumber rule into ~/.config/wireplumber/wireplumber.conf.d/50-audient-soft-mixer.conf:

monitor.alsa.rules = [
  {
    matches = [ { node.name = "~alsa_output.usb-Audient.*" } ]
    actions = { update-props = { api.alsa.soft-mixer = true } }
  }
]

then restart it with systemctl --user restart wireplumber. Desktop volume becomes a software gain, and the hardware level belongs to BiD and the physical knob alone.

When a front-panel control seems to land nowhere in BiD — a knob the app does not follow, a button with no effect — close BiD (tray included) and run BiD --watch-monitor: it reads the monitor section a few times a second and prints whichever selector moved, stamped with seconds since start. Turn the control, paste the output into an issue, and the selector names itself. It only reads, so it is safe to run on any model.

A practical companion for all of this is PavuControl (pavucontrol): it shows every device PipeWire offers, switches profiles (that is where Pro Audio lives), and picks the default output. Most usefully, its Configuration tab can turn a device Off entirely — disabling the HDMI outputs and webcam mics you never listen to prevents a whole class of sound problems, from apps waking up on the wrong device to defaults jumping after a replug, and leaves WirePlumber far less to juggle.

Authors

Version History

BiD

  • 0.3.0
    • The alt speakers get their trim: right-click ALT sets it in dB, a level-match offset riding the volume while ALT holds — the second pair balanced against the mains, the knob live on both sets
    • The loopback row sits this version out. Its routing writes latch but no capture channel ever carries the signal, and its enable answered to nothing reachable from Linux — the full hunt is in docs/PROTOCOL.md. It returns in 0.4.0 once the official app's traffic shows the write that wakes it
    • The iD24's ear-mapped layout now annotates the whole family: the iD14 table's single cue codes are the mono sums, its true stereo pairs are predicted two families down (docs/TESTING.md carries the ear test that confirms them), and the iD48, speaking the iD24's formula, inherits every correction as predictions awaiting an owner
    • A tester's handbook, in English and Russian (docs/TESTING.md): the safety rules, the per-ear checks, the watcher, the beep hunts, and how to report so a finding becomes a fix
    • Cue A on the iD24 is stereo at last. The codes BiD wrote as its pair turned out to be the mono sums of cue A and cue B — one ear played each — and the true pair, 0x1e/0x1f, had spent years mislabelled as Alt. Found by ear, one beep per candidate code, verified left/right on the speakers and the phones alike; the whole hunt and the corrected code table are in docs/PROTOCOL.md. The same hunt, with the monitors plugged into the alt jacks and — the detail that hid it all night — the knob verifiably up, then found Alt's real pair too: 0x27/0x28, silent until the ALT button, then the monitor mix at the knob's level while the mains mute. Real A/B speaker switching, plus two raw fixed-level taps of the main bus documented along the way
    • The iD14 family gets its second cue back and, on the MKII, the shared encoder's SPEAKERS/PHONES buttons under the knob, like the official console. The headphone level is read from the device on connect instead of guessed — pushing a stored level into an unseen control was how headphones went silent with nothing on screen to explain it
    • MixiD's original routing table returns for the iD14 family — it was written on one — and an iD14 MKII owner confirmed it on hardware (#26): audio followed the matrix through every assignment, so the MKII is marked verified and its routing is pushed on connect
    • The same tester settled what the volume knob governs: on the MKII it acts on the main-mix path, and cue-fed outputs play at fixed level by the hardware's own design — recorded in docs/PROTOCOL.md
    • Faders speak dB, with the scale printed on both flanks, and the meter moved inside the fader slot as a bead ladder showing the channel's input
    • Every device gets a default desk: Set as default keeps the desk as it is now (or any preset), Restore default brings it back — levels, pans, names, routing — and pushes it to the box. Renames hit the disk the moment they are committed
    • Switching the sample rate with BiD open no longer risks wedging the device: BiD watches the momentary rate by file reads alone and goes silent on the wire for a few seconds around any change (#26, and reproduced on the iD24)
    • BiD --watch-monitor prints which monitor selector moves as a front-panel control is turned — the tool for mapping controls that BiD does not follow yet
    • Menu → Claim the system output makes the Audient the default output on every launch and connect; see Usage
  • 0.2.3
    • The udev rule moves to 70-audient.rules, where its uaccess tag is honoured — udev applies seat ACLs at 73, so the old 84- file granted nothing on stock Ubuntu and Connect hung forever as a normal user. The installer replaces the old file
    • BID_CONTROL_IFACE forces the control interface: =0 is the old exclusive mode that pauses audio, for models whose firmware refuses control on the spare interface (reported on the iD14 MKII in #26)
    • Every model carries its own profile now: mixer nodes, DAW returns, how many cues, whether it has alternate speakers, an optical output or a loopback. Controls a model lacks are hidden or greyed instead of being offered, the matrix spacing follows the model's bus count, and a model whose protocol is not hardware-verified gets nothing written on connect — an iD14 MKII was silenced by writes meant for an iD24 (#26)
    • BiD can start itself: "Start at login" in the menu writes an XDG autostart entry pointing at the very binary you are running, opening BiD hidden in the tray (--tray); "Connect on launch" opens the device by itself, retrying quietly until it appears — login often beats the USB bus. Both sit in the menu as checkmarks
    • The rate readout no longer decays to -- between streams: with nothing playing it shows the rate the graph is set to run at next, asked of PipeWire itself
  • 0.2.2
    • One line installs it on any major distro: the installer picks apt, dnf, pacman or zypper, pulls the dependencies, builds the newest release, installs the desktop entry and writes the udev rule
    • The GLEW build requirement is gone — nothing ever used it
    • Packages: a Debian package with the udev rule and dependencies baked in (cpack -G DEB), an AppImage built with linuxdeploy, and a PKGBUILD for Arch under packaging/
  • 0.2.1
    • Routing rewritten with the iD24's real source codes (decoded by Monix from the official app). The old table predated this device and could leave outputs stuck at full level on a source no fader controls
    • The routing window now works per output pair, starts from sane defaults, explains what the sources mean, and can reset to defaults
    • Routing is pushed to the device on connect like the rest of the state, which also recovers a device left mis-routed by older builds
    • The faders edit any of the hardware's three mixes — Main, Cue A, Cue B — switched with tabs above the strips. Each mix keeps its own levels and pans, all pushed on connect
    • Phones default to Cue A. The main-mix source turned out to be the monitor section's own feed, so Dim and Cut used to land in the headphones as well; on a cue the phones answer only to the Phones dial
    • The DAW return pair sits pinned on the left as L Out / R Out, and no longer scrolls away with the input strips
    • The two cue routing codes were crossed with the cue mixes: editing one cue changed outputs routed to the other. Caught by ear and swapped
    • L Out and R Out move as one while their Link button is lit — levels, mute and solo; pan stays per side to keep the stereo image. Unlink to trim a side; relinking snaps the right side back onto the left in every mix, not just the one on screen
    • The mixer remembers itself: all three mixes, pans, phase, routing, the link and the dials are saved per device under ~/.config/bid on quit — including a logout or shutdown killing the tray — and restored on the next start, then pushed to the hardware on connect
    • Cue A's routing pair is 0x23/0x24, not 0x22/0x23: the code block has a gap, and an output sent to 0x22 plays a stuck full-level feed — which had the phones' left ear ignoring every fader on Cue A
    • Matrix rows without a fader (the iD24's DAW returns 3..6) are silenced on connect, so the hardware's boot-time cue contents cannot bleed in
    • The Cut button joined the monitor row and the tray menu, synced with the front panel like the rest
    • VU meters: every strip carries a segmented LED ladder with a peak-hold line, fed 30 times a second by the mixer's block metering — probed once on connect like the rest of the readback
    • A new look: charcoal console theme with one warm amber accent running through faders, knobs, tabs and lit buttons; card-style strips; the output pair boxed as one panel
    • The surface rebuilt the way console software lays it out. Strips read top to bottom: name, type-coloured chip, phase pill, a real fader — slot, cap and tick marks — with its meter, then a pan pot that double-clicks back to centre. The master panel leads with the device name and a status dot, then the monitor knob as the hero, phones under it, and the uppercase toggle grid at the bottom
    • Mute and Solo pills on every strip, and a master fader per mix at the right edge scaling everything that mix sends. Neither exists in the hardware, so both are baked into what reaches the matrix — and both are remembered in the state file
    • Faders tooltip their level while dragging and double-click to unity; the Driver Select and Routing windows fix themselves at content size
    • Every abbreviated button explains itself on a hover pause, and button labels are centred on the pixels they actually ink — the typeface rides low in its line box, which made small buttons read as off-centre
    • A device that stops answering — a suspend staling the USB handle, or a pulled cable — turns into a clean offline and a quiet retry every two seconds; when the interface returns, BiD reconnects and pushes the whole mixer back on its own. The status dot burns amber while it hunts
    • Input strips link in twos as well — MIC 1+2, and the digital inputs pair by pair — each with its own LINK bar remembered in the state file, following the same rules as the output pair
    • The sample rate the kernel negotiated shows under the connection status, read from ALSA's procfs rather than asked of the device
    • Any pair — inputs or the outputs — can be summed to mono from the MONO half of its pair bar: both sides hear both channels, the pan pots rest while it is lit, and the choice is remembered
    • The sample rate readout is a button: it pins the graph to any rate the card offers, through PipeWire, or hands the choice back to the applications
    • The loopback pair joined the routing window: whatever source it plays — a cue, the main mix, or playback channels 11+12 looped straight back — arrives in the computer as inputs 11+12, ready to record or stream
    • The clock has a face: its source — Internal or Optical — sits under the rate as a picker with a signal light, driven through ALSA; and with no stream running the rate is asked of the device itself
    • The optical ports switch between ADAT and S/PDIF from the routing window; the device remembers the modes itself, so they are read on connect and only written when flipped
    • The monitor section filled out behind right clicks: TALK picks what it talks with (Mic 1, Mic 2 or Digi 1), MONO picks centre, left-only or right-only and says so on its face, and DIM and ALT carry sliders for how far Dim drops and the alternate speakers' trim — all read from the device on connect, hidden when it does not answer
    • The strips can be named for what they carry: double click a name, type, Enter. Emptying it brings the stock label back, and the names live in the state file with everything else
    • Named presets: the whole desk — mixes, routing, links, names — saved under a name from the Presets menu, recalled with one click and pushed to the hardware on the spot, deleted from the same menu
  • 0.2.0
    • Control goes through the spare DFU interface, so audio keeps playing while connected
    • System tray icon with close-to-tray and a menu carrying the monitor toggles
    • Desktop entry and icon, installed by make install
    • The interface now follows the window size instead of the size it started at
    • Per channel pan, so a channel can be placed in the stereo image instead of being summed to the centre. Digital inputs start panned apart as pairs
    • Digital input faders now address their own matrix cells; they were writing over the mic channels
    • Headphone volume goes to the right entity
    • Protocol notes in docs/PROTOCOL.md

MixiD, before the fork

  • 0.1.6
    • All known iD usb-id's are now known and implemented
  • 0.1.4
    • Now probes usb devices based on the supported id list and selects if possible
    • Auto disconnects and re-attach to kernel when quitting the application
    • Now should properly set all faders depending on the individual device inputs
    • Small UI Fixes
  • 0.1
    • Initial Release based around the iD14 and iD14 MKII with most essential features implemented.

License

This project is licensed under the MIT License - see the LICENSE.md file for details

Acknowledgments

  • MixiD, the project this is forked from
  • mymixer, prior attempt to reverse engineer the original iD14 with some minimal functionality.
  • imgui, a modern lightweight gui

About

Audient iD mixer software for Linux — unofficial control panel for the iD4, iD14, iD22, iD24, iD44 and iD48: mixes and cues, routing, loopback, meters and monitor control, while audio keeps playing. Fork of MixiD.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages