Blog

Bluetooth Speaker Lagging Behind AirPlay on a Mac?

A Bluetooth speaker plays behind your AirPlay speakers by however long it takes to start a note, and nothing in macOS waits for it. The AirPlay speakers all keep to one agreed schedule. The Bluetooth one plays whenever it’s ready. Getting them to land together means knowing that speaker’s delay and sending it the music early by that much. When the delay is too long for that, the AirPlay speakers have to wait for it instead, and that second part is new in Audiout 1.3.0.

Why does a Bluetooth speaker play behind AirPlay speakers?

The two kinds of speaker keep time in different ways.

AirPlay speakers play late on purpose. Your Mac sends each one the music ahead of time, along with the moment to play it, and every speaker in the house holds on until that moment. The head start is what lets a HomePod in the kitchen and a Sonos in the hall hit the same beat, and it gives both of them room to ride out a hiccup on the Wi-Fi. In Audiout that head start is the Audio buffer setting, and it’s one second unless you change it.

A Bluetooth speaker has no schedule to keep. It stores up a little of the song before it plays a note, and how much it stores is up to whoever designed it. Bluetooth speaker delay on a Mac goes through where that time comes from. For the echo you only need the total.

If the Bluetooth speaker gets its music timed for the AirPlay schedule, its own delay lands on top, and it trails the other rooms by the full amount. A fifth of a second is enough to hear the chorus twice from the hallway.

Can a Mac play AirPlay and Bluetooth speakers together by itself?

Not as one output. Audio MIDI Setup’s Multi-Output Device will hold two Bluetooth speakers, but an AirPlay speaker greys out of it as soon as the combined device plays. AirPlay greyed out in Audio MIDI Setup explains why no setting changes that, and mixing AirPlay and Bluetooth speakers covers the routes that do get both kinds playing. None of macOS’s own tools has anywhere to tell the Mac how late a particular Bluetooth speaker runs.

How do you measure how far behind the Bluetooth speaker plays?

Play the same sound from it and from a speaker you trust, and time the gap. In Audiout, the Mac mixer we make, that’s the alignment window. Right-click the Bluetooth speaker’s row in the Mixer and choose “Align by ear…”, or click the row’s SYNC chip, which reads “Align by ear” until the speaker has been measured. Aligning a Bluetooth speaker that plays late walks through every screen.

If your Mac has a built-in microphone, the window opens on “Measure on this Mac”. Press Start and each speaker plays a low tone that slides down over a soft chord, one after the other, while the Mac times them and a progress bar fills. Every other speaker goes quiet for the run, a Chromecast included, and comes back afterwards. Keep the room quiet.

When the microphone can’t get a reading it trusts, the window says so, and “Try again” listens once more. After that it falls back to “Align by ear”, which plays a short note from each speaker and asks which one you heard first, about fifteen times. In 1.3.0 the microphone path turns down readings that are too faint or too far out to be real, so a bad one sends you to the by-ear questions instead of being kept. A speaker that has only just connected also gets time to wake up before the Mac starts listening.

The number you keep sits on the speaker’s row, something like “240 ms · kept”.

What if the Bluetooth speaker is slower than AirPlay’s head start?

Then it can’t be sent the music early enough. With the Audio buffer at one second, the AirPlay speakers play a second behind your Mac, and a Bluetooth speaker can be fed anywhere inside that second. Audiout keeps a tenth of a second spare, so at the default the cut-off is around 900 ms of Bluetooth delay. A speaker slower than that would need the music before your Mac had it.

Up to version 1.2, a speaker past the cut-off simply played late by the difference, and the fix was yours to find. You opened Settings › Audio, found Audio buffer under Advanced, and raised it from 1000 ms to 1500 or 2250. That reconnects every speaker that’s playing and puts the whole house further behind, whether the slow speaker is on or not.

From 1.3.0, Audiout makes the room wait for the speaker, and only while it’s part of the mix. Once the speaker has been measured, if its delay plus that spare tenth comes to more than the Audio buffer, Audiout holds the AirPlay speakers and your Mac’s own speakers back to meet it. Say the window measures a speaker at 1,150 ms with the buffer at 1000 ms. AirPlay and the Mac now wait 1,250 ms, and the Bluetooth speaker gets its music in time to land with them.

The cost is that everything plays that much later after you press play, and the sound of a video on the Mac’s screen lands further behind the picture. When the slow speaker leaves the mix, the room drops back to the Audio buffer, with one short gap in the sound while it moves. A new measurement that comes back lower but still over the buffer leaves the delay where it is, because every change means a gap for every speaker in the house.

What else changed for Bluetooth speakers in 1.3.0?

A Bluetooth speaker could slide later as a session went on, when it took audio from the Mac in uneven gulps. One customer’s log showed a speaker about 300 ms behind by the end. Audiout now pulls it back into line once it starts to wander.

A Bluetooth speaker that reconnected and then stayed silent is fixed. Audiout now notices when macOS has dropped or replaced the speaker’s audio connection, and sets it up again or marks it unavailable.

Nudging the slowest speaker’s SYNC value below zero now works. Before, Audiout cut the nudge off and the speaker didn’t move. And holding − or + in the SYNC drawer now lets you hear the change while you hold, and saves it once when you let go.

The rest of the release is on the releases page.

Playing on more than one speaker and the alignment window both need a licence once the trial ends, as Audiout only plays on one speaker after the trial explains. Audiout is €24.99 once, for Apple Silicon Macs on macOS 14.4 or later, and the free 14-day trial of Audiout for Mac has every feature in it.

Common questions

Why is my Bluetooth speaker behind my HomePod?

AirPlay speakers play on a shared schedule, about a second after your Mac sends the music. A Bluetooth speaker plays as soon as it has stored up enough of the song, and that adds its own delay on top of whenever the music reaches it. Unless something sends it the music early by exactly that delay, it trails the HomePod by the full amount.

Can I put an AirPlay speaker and a Bluetooth speaker in one Multi-Output Device?

You can tick both in Audio MIDI Setup, but macOS drops the AirPlay speaker out as soon as the combined device starts playing, and its name goes grey. Playing both kinds from a Mac at once takes an app that sends to each speaker itself, and keeping them together takes one that knows the Bluetooth speaker's delay.

Do I still need to raise Audio buffer for a slow Bluetooth speaker?

Not from Audiout 1.3.0. Once the speaker has been measured, Audiout holds the AirPlay speakers and your Mac back to meet it whenever its delay is longer than the buffer. Leave Audio buffer at whatever suits your Wi-Fi, which is the job it was made for.

Related