DuetPlus
Every phone at the party, playing one song, in sync.
One phone hosts, everyone else joins over Wi-Fi, and every speaker in the room plays the same sample at the same moment. No echo, no drift. iPhone and Android, together.
Host. Join. Play.
One phone taps Host a party. Everyone else taps Join a party and finds it under Parties nearby.
Phones find each other on the same Wi-Fi, or on the host’s hotspot. If your network blocks discovery, type the last number of the IP shown on the host and you’re in.
A friend who arrives halfway through a song joins at the right spot. A phone whose Wi-Fi drops keeps playing and reconnects on its own.
Why it stays in sync.
Most apps send play and hope. DuetPlus sends “sample N leaves the speaker at time T”, and every phone works backwards from there.
Each audio buffer carries a hardware timestamp for the moment it leaves the speaker, so a phone with 40 ms of delay simply plays 40 ms earlier than one with 10. Small errors are corrected while the song plays, by a speed change of a tenth of a percent that nobody hears.
- One clock
- Guests ping the host ten times a second, keep only the fastest replies and follow the host’s clock to about a millisecond, drift included.
- Sync check
- Each phone plays a short chirp on cue while the host’s microphone listens. It measures every phone’s real delay, corrects it and checks again.
- Same samples
- Every phone decodes the same Opus stream with the same code, so the songs match sample for sample, not just at the start.
- No waiting room
- Join mid-song, drop off the Wi-Fi, come back: the music never restarts for anyone else.
Any song.
Search YouTube Music or YouTube, or paste a link. Or play your own files.
The host fetches only the audio and hands it to every phone over the local network. MP3, FLAC, WAV, M4A, AAC, ALAC and OGG files work too, with their tags and covers.
The album cover spins on the record on every phone, guests included, and the colours of the screen follow it.
The rest, in short
- iPhone and Android
- Mix them freely in one party. Built with Flutter on a shared C++ audio core.
- No account
- No sign-up, no servers of ours. The phones talk to each other on your own network.
- Up to date
- On Android, the bundled yt-dlp updates itself once a day, so YouTube keeps working.
- Free and open source
- The code is on GitHub under the GPL-3.0 licence: read it, change it, share it.
DuetPlus for Android and iPhone
Version 1.2.0 · Android 9+ · iOS 15+. Questions: mcebrian (at) ik.me
Android: open the APK on your phone and allow installing from your browser when asked. iPhone: install the IPA from the releases page with AltStore or Sideloadly, or build it from the source. DuetPlus plays YouTube audio outside YouTube’s own player, which YouTube’s terms don’t allow; it is a technical project for your own listening.