What macOS actually builds when you combine two outputs

Published September 8, 2026

D·09 Deep dive
ONE CLOCK FOR EVERY DEVICE48kHzTHE RATE EVERY SUB-DEVICE IS FORCED TO MATCHmacOS elects one device as clock master. Every other member resamples in real time to staylocked to that single rate.

You open Audio MIDI Setup, tick your speakers and your headphones, and hit “Create Multi-Output Device.” Sound now comes out of both at once, which is the whole point. Then you notice two things that don’t quite add up. There’s no single volume slider for the combined device, so the system volume keys either do nothing useful or only affect one of the two. And if you leave music running for a while, you sometimes hear a faint tick, or the two outputs feel a hair out of step with each other.

Neither of those is a bug. Both come from what an aggregate device actually is under the hood, and why combining two pieces of hardware into “one” device is a harder problem than it looks.

What Audio MIDI Setup actually builds

macOS never talks to your speakers directly. Every audio device on the system, physical or virtual, is exposed to CoreAudio as a device object through the Hardware Abstraction Layer, with its own channels, its own buffer, and its own sample rate. An aggregate device is a container object that groups several of those device objects into one that behaves like a single device to any app that opens it. The “Multi-Output Device” you create in Audio MIDI Setup is a specific flavor of this: instead of splitting channels across members, it takes one stream and duplicates it to every device in the group.

WHAT A MULTI-OUTPUT DEVICE FANS OUT TO01APPS02SYSTEM MIX03AGGREGATE DEVICE04SPEAKERS A + BAudio MIDI Setup wraps several real devices in one virtual object. Apps see a singledestination; CoreAudio duplicates the stream underneath.

That’s genuinely useful. It’s also free, built into every Mac, and it’s the right tool for a lot of cases: routing a call through your speakers while a screen recorder also captures system audio, or feeding both a monitor’s speakers and a real set at once. The complexity shows up once you ask two independent pieces of hardware to stay in perfect step.

Why the two outputs drift

Every audio device has a hardware clock, a crystal oscillator that ticks at the device’s sample rate. No two crystals, even from the same manufacturing batch, run at exactly the same speed. The mismatch is tiny, typically a handful of parts per million, but audio is unforgiving about it: at 48,000 samples a second, a drift of even 10 parts per million means one device is producing roughly one extra or one fewer sample every couple of seconds compared to the other.

When CoreAudio builds an aggregate, it has to pick one member as the clock master. That device’s crystal sets the pace for the whole aggregate. Every other member’s audio gets resampled on the fly, a process Audio MIDI Setup calls drift correction, to keep it aligned with the master instead of running at its own native speed. Without that correction, the non-master device’s buffer would slowly fill or drain until CoreAudio has to drop or repeat a sample to catch up, which is the tick you occasionally hear. This is also why the sample rate you see in Audio MIDI Setup for an aggregate is a single shared number: nobody in the group actually runs at their own preferred rate, they all get pulled to whichever one the master is using.

Why there’s no volume slider

A Multi-Output Device isn’t a piece of hardware with a volume knob. It’s a routing rule. CoreAudio’s volume control lives on each individual device, as its own scalar-to-decibel curve, and those curves aren’t interchangeable. Built-in speakers, a USB DAC, and an HDMI display can each expose a completely different volume range, or none at all if the device only does fixed line-level output. There’s no “70%” that means the same loudness change across all of them at once, so macOS doesn’t pretend there is one. It leaves each member’s volume as whatever it was set to before you built the aggregate, and the system volume keys mostly stop doing anything meaningful once a Multi-Output Device is selected as output, because there’s no single target left for them to act on.

In practice this means you set each device’s level once, separately, before combining them, and treat the combined device as a fixed routing rather than something with its own volume.

Where ZonaReq sits in this picture

ZonaReq’s simultaneous-output feature solves the same “one signal, several outputs” problem, but from a different position in the chain. Instead of asking CoreAudio to fan a stream out to independently clocked hardware and hoping the volume question resolves itself, the driver sits earlier: it captures system audio, applies volume, EQ and any other processing once, to a single shared mix, and only then builds a private aggregate device to duplicate that already-finished signal to whichever outputs you’ve picked.

VOLUME APPLIED BEFORE THE SPLIT01APPS02ZONAREQ DRIVER03VOLUME + EQ04AGGREGATE DEVICE05TWO OUTPUTSProcessing happens once, upstream of the fan-out, so the same volume and EQ reach every outputinstead of depending on which device owns a slider.

The aggregate device underneath is the same CoreAudio primitive Audio MIDI Setup uses; there’s no other way to combine outputs on macOS. What changes is that the volume you move is the one number that decides loudness everywhere, because it’s applied before the signal ever reaches the per-device curves that caused the missing-slider problem in the first place. It doesn’t erase the clock-drift math above, that’s a property of the hardware, not the software layer, but it does mean the control in front of you behaves the same way regardless of which devices are downstream.

What to actually do about it

For a one-off, free option, Audio MIDI Setup’s Multi-Output Device is the right call, and there’s no reason to reach for anything else if you only need it occasionally: build it, set each device’s own volume once, and don’t expect the system slider to do much afterward. If you’re hearing ticks on a long session, check that drift correction is enabled on the non-master devices and, where you have a choice, make the built-in output the clock master rather than a USB or Bluetooth device, since it’s tied to the machine’s own logic board instead of a connection that can hiccup.

If what actually bothers you is having to manage volume per device, or wanting EQ to apply consistently no matter which outputs are active, that’s a signal-path problem rather than a routing one, and it’s worth looking at something that sits upstream of the split instead of downstream of it.

Keep reading

Try ZonaReq free.

Start with the free version — a 3-band EQ with 5 presets — and unlock the full toolkit whenever you want. macOS 14+, notarized, zero telemetry.

Z·01 Blog by email

Get every guide and story in your inbox.

Guides for your Mac, stories about how records were made and how to listen to them, honest gear advice. One or two emails a week, nothing else.

Confirm your email and one month of ZonaReq Pro for one Mac is on us.

We will send one email to confirm your address. You can unsubscribe from any email. More in the privacy notice. Privacy notice