Multi-Room Audio op Android: Instelling en Synchronisatie
Hoe je muziek synchroon afspeelt over meerdere luidsprekers en apparaten vanaf je Android-telefoon. Leer over UPnP, Chromecast en cross-protocol multi-room met praktische installatietips.
Wat multi-room werkelijk betekent
Multi-room audio is dezelfde muziek afspelen via luidsprekers in verschillende kamers op hetzelfde moment. Loop van de keuken naar de woonkamer en het nummer gaat naadloos verder. Geen gaten, geen echo, geen raar verschil in timing tussen kamers.
Dat is de belofte. Elke luidsprekerfabrikant zet het op de doos. En binnen een enkel ecosysteem — Sonos, Apple, Google — werkt het grotendeels. De problemen beginnen wanneer je luidsprekers hebt van verschillende fabrikanten, wat eigenlijk iedereen is.
De echte definitie van multi-room is niet alleen “hetzelfde nummer op meerdere plekken.” Het is gesynchroniseerde weergave — audio die vanuit verschillende luidsprekers binnen enkele tientallen milliseconden van elkaar bij je oren aankomt. Als twee luidsprekers meer dan ongeveer 50ms uit elkaar lopen, hoor je het. Niet als een echo, maar als een vervaging, een dikheid in het geluid die verkeerd aanvoelt. Onder 30ms merken de meeste mensen het verschil niet. Dat is het doel.
Het synchronisatieprobleem
Dit is waarom gesynchroniseerde weergave over verschillende apparaten oprecht moeilijk is.
Wanneer je op afspelen tikt, gebeurt er een keten van gebeurtenissen: de app stuurt een commando via WiFi naar de luidspreker, de luidspreker ontvangt het, buffert wat audiodata, verwerkt het door zijn DAC, en geluid komt eruit. Elke stap kost tijd, en elk apparaat kost een andere hoeveelheid tijd.
Een Chromecast heeft misschien 800ms nodig van afspeelcommando tot eerste geluid. Een Denon-receiver misschien 200ms. Een SoundTouch-luidspreker zit ergens rond 150ms. De koptelefoonaansluiting van je telefoon? Onder 10ms. Als je het afspeelcommando naar alle vier apparaten op exact hetzelfde moment stuurt, komt geluid bijna onmiddellijk uit je telefoon, de Denon een vijfde seconde later, de SoundTouch daarna, en de Chromecast bijna een volle seconde nadat je op afspelen tikte.
Dat is alleen het opstarten. Eenmaal afspelend driften apparaten. Netwerkjitter voegt een paar milliseconden willekeur toe aan elk commando. Interne klokken zijn niet perfect gesynchroniseerd — een luidspreker die op 44.099,8 Hz draait in plaats van 44.100 Hz drijft ongeveer 150ms af over een uur. Sommige apparaten pauzeren kort bij WiFi-kanaalwisselingen. Sommige bufferen agressief en negeren zoekcommando’s. Sommige rapporteren hun afspeelpositie nauwkeurig; andere ronden af op de dichtstbijzijnde seconde.
Geen van deze problemen is individueel catastrofaal. Maar gecombineerd over een huis vol verschillende luidsprekers tellen ze snel op.
Protocollandschap
Vier grote protocollen handelen multi-room audio af vandaag de dag. Elk neemt een andere benadering van het synchronisatieprobleem.
| Sonos | AirPlay 2 | Chromecast | UPnP/DLNA | |
|---|---|---|---|---|
| Ecosysteem | Alleen Sonos | Alleen Apple | Alleen Google | Open standaard |
| Synchronisatienauwkeurigheid | ~1ms (propriëtair mesh) | ~5-20ms (Apple-geoptimaliseerd) | ~50-200ms (Cast-groepen) | Geen native synchronisatie |
| Groepering | Native, uitstekend | Native, goed | Native, redelijk | Geen groeperingsstandaard |
| Apparaatbereik | Alleen Sonos-luidsprekers | Apple + gelicentieerd | Cast-compatibel | Receivers, tv’s, streamers, luidsprekers — honderden merken |
| Android-ondersteuning | Via Sonos-app alleen | Niet beschikbaar | Ja | Ja |
Sonos lost synchronisatie op met propriëtaire hardware — hun luidsprekers vormen een mesh-netwerk met microseconde-nauwkeurige kloksynchronisatie. Het is de gouden standaard, maar je zit vast aan Sonos-hardware.
AirPlay 2 gebruikt Apple’s tijdssynchronisatieprotocol om luidsprekers in sync te houden. Het werkt goed, maar het is alleen Apple. Geen optie op Android.
Chromecast-groepen werken redelijk goed binnen het Google-ecosysteem. Je maakt een luidsprekergroep aan in Google Home, en Cast-compatibele apps kunnen de groep targeten. Synchronisatie is redelijk — meestal binnen 50-200ms — maar het systeem is gesloten. Alleen Cast-compatibele apparaten doen mee.
UPnP/DLNA is de open standaard. Het werkt met het breedste scala aan hardware — Denon-receivers, Yamaha-soundbars, Panasonic Blu-ray-spelers, WiiM-streamers, smart-tv’s en meer. De valkuil: UPnP heeft absoluut geen concept van apparaatgroepering of gesynchroniseerde weergave. De specificatie behandelt het simpelweg niet. Elke renderer wordt behandeld als een onafhankelijk apparaat.
De meeste mensen leven niet volledig binnen één ecosysteem. Je hebt de receiver die je vijf jaar geleden kocht, de Chromecast in de slaapkamer, de smart-tv in de woonkamer, en misschien een Bluetooth-luidspreker op het terras. Geen enkel protocol dekt ze allemaal.
De cross-protocol-uitdaging
Dit is het gat dat de meeste muziek-apps wijd open laten.
Spotify Connect werkt geweldig — met Spotify Connect-apparaten. Google Home groepeert Chromecasts prachtig — maar alleen Chromecasts. Je Denon-receiver ondersteunt UPnP en AirPlay, maar je Chromecast spreekt geen UPnP, en je Android-telefoon spreekt geen AirPlay.
Dus wat gebeurt er wanneer je de keuken-Chromecast en de woonkamer-Denon-receiver hetzelfde nummer wilt laten spelen op hetzelfde moment? Bij de meeste apps: niets. Je kiest één apparaat. De andere kamer blijft stil.
Het onderliggende probleem is architectureel. De meeste apps zijn gebouwd rond een enkel uitvoerparadigma — ze sturen audio naar één bestemming. Multi-room vereist een fundamenteel ander model: één bron van waarheid voor wat er speelt, uitwaaierend naar meerdere bestemmingen met welk protocol elk apparaat ook begrijpt, en vervolgens continu drift monitoren en corrigeren over allemaal.
Hoe we multi-room in Echobox hebben gebouwd
We noemen ze uitvoergroepen. Je kiest de apparaten die je wilt — elke combinatie van UPnP-renderers, Chromecast-apparaten en de eigen uitvoer van je telefoon — en Echobox creëert een groep die de weergave over allemaal coördineert.
Het kernidee is eenvoudig. Echobox onderhoudt een enkele afspeeltijdlijn — één gezaghebbend verslag van welk nummer speelt en op welke positie het is. Wanneer je op afspelen tikt, stuurt de groepscoördinator afspeelcommando’s naar elk apparaat in de groep met het native protocol van elk apparaat: SOAP-commando’s voor UPnP-renderers, de Cast SDK voor Chromecasts, en de lokale audio-engine voor je telefoon.
Ze op ruwweg hetzelfde moment laten starten was de eerste uitdaging. Verschillende apparaten hebben wild verschillende opstarttijden — een Chromecast heeft misschien 500ms nodig om te bufferen en te beginnen, terwijl een UPnP-renderer 300ms nodig heeft en de lokale engine bijna niets. Dus we spreiden de afspeelcommando’s: het langzaamste apparaat krijgt zijn commando eerst, dan wachten we, dan sturen we naar het op-een-na-langzaamste, enzovoort. De timing gebruikt absolute klokreferenties in plaats van cumulatieve vertragingen, zodat de uitvoeringstijd voor elk commando het schema niet verstoort.
We hebben maanden besteed aan het goed krijgen van driftcorrectie. De eerste versie was verschrikkelijk — het overcorrigeerde, wat hoorbare sprongen creëerde, of ondercorrigeerde en apparaten liet wegdriften over minuten.
Het huidige systeem werkt als volgt: zodra alle apparaten spelen, pollt Echobox elk apparaat ruwweg eens per seconde voor zijn huidige afspeelpositie. Het vergelijkt de gerapporteerde positie van elk apparaat met waar het zou moeten zijn op basis van het synchronisatieanker — een referentiepunt dat een wandkloktijd koppelt aan een mediapositie. Als een apparaat rapporteert dat het op 1:23.400 is maar het anker zegt dat het op 1:23.650 zou moeten zijn, is dat 250ms drift.
Wat er daarna gebeurt, hangt af van het apparaat.
Per-apparaat intelligentie is hier cruciaal. Echobox onderhoudt een profiel voor elk apparaat dat het heeft gezien, opgebouwd uit drie lagen: wat het apparaat over zichzelf adverteert, wat we weten over zijn familie (alle Denon-receivers gedragen zich vergelijkbaar), en wat we tijdens runtime hebben geobserveerd. Een Denon AVR met betrouwbaar zoeken krijgt strakke driftdrempels — we corrigeren bij 150ms drift met een zoekcommando. Een generieke DLNA-tv met onbetrouwbaar zoeken krijgt veel bredere tolerantie — 500ms voordat we het zelfs markeren, en we slaan correcties mogelijk helemaal over als zoeken te vaak is mislukt. Het systeem leert: als de zoekcommando’s van een apparaat 70% van de tijd mislukken, stopt Echobox met het proberen van zoekcorrectie voor dat apparaat en accepteert het lossere synchronisatie. Zie onze gids over UPnP-streaming voor meer over hoe apparaatmogelijkheden worden gedetecteerd.
UPnP heeft geen native groeperingsstandaard, dus we moesten de coördinatielaag zelf bouwen. Elke UPnP-renderer in een groep krijgt zijn eigen SOAP-commando’s — SetAVTransportURI, Play, Seek — alsof het het enige apparaat is dat speelt. De coördinatielaag zorgt er alleen voor dat die commando’s in de juiste volgorde met de juiste timing worden verstuurd.
Een ding waar we bijzonder trots op zijn: je telefoon kan lokaal en naar netwerkapparaten tegelijkertijd afspelen. De lokale engine leest rechtstreeks uit de audiobuffer met minder dan 10ms latentie, terwijl hetzelfde nummer naar netwerkapparaten streamt via HTTP. Dit betekent dat je kunt rondlopen met koptelefoons verbonden via Bluetooth terwijl luidsprekers in huis dezelfde muziek spelen. Het lokale Android-audiopad verwerkt zijn eigen timing onafhankelijk, zodat lokale weergave nooit wordt verslechterd door netwerkcoördinatie-overhead.
Wanneer een apparaat uitvalt — WiFi-storing, luidspreker gaat in slaap — raakt het systeem niet in paniek. Het houdt opeenvolgende mislukkingen bij en markeert een apparaat pas als mislukt na vijf gemiste polls. Als het terugkomt, herstellen drie succesvolle polls het. Dit voorkomt dat de groep voortdurend apparaten in en uit schakelt wanneer netwerkomstandigheden marginaal zijn.
Eerlijk gezegd was het moeilijkste deel niet een enkele technische uitdaging. Het was het systeem betrouwbaar laten werken over de enorme diversiteit aan apparaten die er zijn. Een firmware-update bij een fabrikant veranderde het zoekgedrag van hun luidsprekers. Sommige renderers rapporteren posities in hele seconden, wat sub-seconde driftdetectie onmogelijk maakt. Sommige Chromecast-modellen doen er zo lang over om te starten dat ze al een volle seconde achterlopen tegen de tijd dat audio begint. Elke eigenaardigheid had zijn eigen workaround nodig, en het systeem moest gracieus degraderen in plaats van volledig te breken.
Praktische installatietips
Netwerkvereisten. Alle apparaten moeten op hetzelfde subnet zitten. Als je een mesh WiFi-systeem hebt met aparte IoT- en hoofdnetwerken, moeten je luidsprekers en telefoon op hetzelfde zitten. SSDP-multicast-ontdekking moet werken — sommige bedrijfsmatige routers blokkeren multicast standaard. Als Echobox je UPnP-apparaten niet kan vinden, is multicast-filtering het eerste om te controleren.
WiFi-stabiliteit doet er meer toe dan snelheid. Multi-room audio heeft niet veel bandbreedte nodig — zelfs ongecomprimeerde cd-kwaliteit audio is slechts ongeveer 1,4 Mbps. Maar het heeft consistente latentie nodig. Als je WiFi pakketten dropt of intermittente congestie heeft, zal drift sneller ophopen dan het correctiesysteem kan compenseren. Een 5 GHz-netwerk biedt over het algemeen meer consistente latentie dan 2,4 GHz, hoewel 2,4 GHz beter bereik heeft door muren.
Apparaten kiezen voor groepen. Voor de strakste synchronisatie, groepeer apparaten met vergelijkbare kenmerken. Twee UPnP-receivers van dezelfde fabrikant blijven beter in sync dan een Chromecast gekoppeld met een UPnP-tv. Dat gezegd hebbende, gemengde groepen werken — stel alleen je verwachtingen op de juiste hoogte. Twee UPnP-streamers blijven misschien binnen 50ms; een Chromecast plus een UPnP-renderer komt misschien uit rond 200ms.
Latentieverwachtingen beheren. Hardware-gesynchroniseerde systemen zoals Sonos bereiken 1-5ms nauwkeurigheid omdat de luidsprekers een klok delen. Software-gecoördineerde synchronisatie over WiFi, wat elke cross-protocol oplossing gebruikt, haalt maximaal rond 30-50ms in het beste geval. Voor achtergrondluisteren — muziek die door het huis speelt terwijl je kookt of werkt — is alles onder 200ms prima. Je merkt drift alleen op als je in een deuropening staat tussen twee kamers.
Wanneer wat te gebruiken. Als je meerdere Chromecast-apparaten hebt, is het aanmaken van een Google Home-luidsprekergroep voor hen eenvoudiger en synchroniseert beter dan coördinatie op app-niveau. Gebruik Echobox-groepen voor de gevallen die native groepering niet aankan: Chromecast mixen met UPnP, je telefoon toevoegen als groepslid, of UPnP-apparaten groeperen die helemaal geen native groeperingsondersteuning hebben. De twee benaderingen sluiten elkaar niet uit — je kunt Chromecast-groepen gebruiken voor sommige kamers en Echobox-groepen voor andere.
Probleemoplossing. Als een apparaat consequent hoge drift toont, controleer eerst de WiFi-signaalsterkte. Zwak WiFi betekent variabele latentie, wat betekent dat de synchronisatie-engine voortdurend een bewegend doel najaagt. Als een specifiek apparaat problemen veroorzaakt in groepen maar solo prima werkt, heeft het mogelijk firmware-eigenaardigheden die zoeken of positierapportage beïnvloeden — de signaalpaddiagnostiek van Echobox toont je het profiel van het apparaat, inclusief zijn synchronisatiegeschiktheidsscore en eventuele geleerde observaties over zijn gedrag.
Waar we staan
Multi-room over verschillende protocollen is een moeilijk probleem, en we doen niet alsof het perfect is opgelost. Software-gecoördineerde synchronisatie zal nooit hardware-gesynchroniseerde systemen als Sonos evenaren voor kritisch luisteren. Sommige apparaten hebben firmware-eigenaardigheden die we nog niet zijn tegengekomen. Nauwkeurigheid van positierapportage varieert enorm tussen fabrikanten.
Maar voor het echte-wereld scenario — verschillende luidsprekers uit verschillende tijdperken en van verschillende merken, allemaal synchroon je muziekbibliotheek afspelend vanaf je telefoon — werkt het. Niet met audiofiele synchronisatienauwkeurigheid, maar met het soort nauwkeurigheid dat heel-huis luisteren oprecht aangenaam maakt. En het systeem wordt slimmer in de loop van de tijd: elke afspeelsessie leert Echobox iets meer over hoe elk apparaat zich gedraagt, waardoor correcties strakker worden voor betrouwbare apparaten en losser voor onbetrouwbare.