Skip to content

Audio Mixer

Per-app volume with zero setup, plus full routing to OBS, a DAW, or several outputs at once. This guide walks Simple mode and Advanced mode end to end.

The audio mixer routes any audio source — a hardware mic, or an app’s output — through a multi-bus mixer to your speakers/headphones and to virtual outputs other apps can capture. Each channel gets its own gain, mute, solo, pan, and parametric EQ, with live meters. It’s modeled on VoiceMeeter Banana.

Two views of the same mixer:

  • Simple — one card per running app, drag a fader. No routing to think about.
  • Advanced — input strips, output buses, and a routing matrix for streamers and producers.

Virtual outputs use our own audio driver, compiled and shipped inside the app — there’s nothing to download from a third party. You do need to install it once before virtual audio works, and that install requires administrator privileges (it copies a system audio driver and restarts the audio service).

  1. Open Audio Router from the sidebar.
  2. Click Enable virtual audio. Approve the one administrator prompt — this is required the first time and only happens once.
  3. The driver installs and the audio system restarts — your BTM Virtual In and BTM Virtual Out devices appear.

Until this is done you’ll only have your physical inputs/outputs; the virtual buses (and anything that captures the mix as a mic) need the driver installed.

On first launch with the driver present, Auto setup runs automatically and binds a working passthrough scene (app audio → speakers, plus a muted mic strip). Auto setup only fires when nothing is configured yet, so it never overwrites a saved scene.

Simple mode is per-app volume with zero setup. Every running app shows as its own card with a fader.

  • Per-app faders — Music, Chrome, Discord each get a card. Drag to set level; mute from the card.
  • Groups — combine sources into one card (e.g. Music = Apple Music + Spotify) and ride a single master.
  • Sub-mixer — open a group for independent per-app faders inside it, while the group master still rules them all.
  • Tone — a three-band Bass / Mid / Treble shelf on every group; warm it up or tame the highs without opening the EQ.
  • Output switching — the device picker updates the moment you plug in headphones or connect Buds. No System Settings, no Audio MIDI Setup.

Advanced mode exposes the full board: input strips on the left, output buses on the right, and a routing matrix between them.

  • A1–A3 — physical outputs (speakers, headphones). A1 is tied to your system output: whatever output device is active in macOS shows up as A1, and changing A1’s device from the mixer also changes the macOS system output — they stay in sync.
  • B1–B3 — virtual outputs other apps can capture as a microphone (OBS, Discord, a DAW).
  • Source device select, gain fader, mute, solo, pan.
  • Routing-matrix buttons — send one strip to any combination of A1–A3 and B1–B3 at once.
  • Parametric EQ (see below).

Solo overrides non-soloed strips. Gain, mute, solo, pan, and EQ apply live with no glitch; only topology changes (swapping a device, changing routing, adding or removing channels) rebuild the engine.

On an interface with more than two channels (a multi-output audio interface, an aggregate device, etc.), the strip or bus shows separate L and R channel selectors so you can map exactly which device channels feed left and right — e.g. send a bus out channels 3 and 4 instead of 1 and 2. Set R to Mono to feed a single channel into both sides. Stereo devices just use channels 1 and 2 and don’t show the picker.

If the device an output bus is using disappears — the classic case being headphones that unplug or a Bluetooth device that drops — you decide what the mixer does. The behavior is a setting:

  • Auto-switch — the bus automatically moves to your speakers (the current system default output) so audio keeps playing.
  • Don’t switch — the bus keeps targeting the device that left and stays silent, picking it back up if it reconnects.
  • Ask — the mixer prompts you to choose a new output, and stays silent until you pick one.

On macOS 14.4 and later, an App strip can bind directly to a single app by its bundle — the mixer captures just that app’s audio and gives it its own gain, EQ, and routing. Use Add App and pick from the running audio apps.

On older macOS, the Add App button is hidden; route apps through a virtual device instead: set the app’s output (or System Settings → Sound) to a BTM Virtual Out device and it appears as a Virtual strip.

  1. Add an App strip for the app.
  2. Route that strip to a virtual bus, e.g. B1.
  3. In OBS, add an Audio Input Capture and pick the B1 virtual device.

Route the same strip to both A1 (your speakers) and B1 (the virtual bus OBS captures). One strip, two destinations.

  1. Strip = your mic; add an EQ to clean it up.
  2. Route the strip to a virtual bus (e.g. B2).
  3. In Discord, set Input Device to that virtual bus.

Parametric EQ — drag nodes on the frequency curve on any strip or bus. Low-shelf, peak (bell), and high-shelf bands, each with frequency, gain, Q, and enable. A/B compare and named presets included.

Scenes — save the whole board as a named scene and load or delete it later from the scene bar. Your active scene is restored automatically on the next launch.

No sound through the router : Confirm the strip is routed to a bus, the bus is assigned to a real output, and neither is muted. Watch the meters — if they move, audio is flowing.

An App strip is silent (per-app capture) : Needs macOS 14.4+ and the audio-capture permission grant. Make sure the app is actually playing audio, then re-add the strip.

Feedback/echo when testing the mic : Routing the mic to your speakers loops sound back. Keep volume modest or use headphones.

“xruns” counter in the header : An xrun (buffer underrun) is a moment where the audio engine couldn’t fill its output buffer in time — heard as a tiny gap or click. A few xruns are normal right when the engine starts up while it settles, so don’t worry about the first ones. Click the counter to reset it to zero; if it then keeps climbing during steady playback, that points to the machine being overloaded.