Two ways to capture
Read the system mix directly with ScreenCaptureKit (nothing to install), or read a BlackHole loopback device with AVAudioEngine (Microphone permission only). Switch any time.
Tethertone streams everything your Mac plays to your Android phone, over a USB cable or Wi-Fi. It's lossless, keeps latency low for hours, and pairs with one QR scan. Free, open source and native on both sides.
Features
Two native apps and a small, documented protocol. Each part is built for one job: get the sound from your Mac to your phone intact, on time, and in sync.
Read the system mix directly with ScreenCaptureKit (nothing to install), or read a BlackHole loopback device with AVAudioEngine (Microphone permission only). Switch any time.
The QR code lists every route to your Mac. The phone races them and keeps whichever answers first, so the cable wins when it's plugged in and Wi-Fi takes over when it isn't.
Two devices never agree on how long a second is. Tethertone corrects the difference continuously by playing a fraction of a percent fast or slow. It's inaudible, with no jumps and no creeping delay.
Scan the code and you're done. The phone remembers the Mac, reconnects on its own, and a random token keeps everyone else on your network out.
A foreground service keeps audio going when the phone locks, with a Stop button in the notification. Put the phone in your pocket and walk around.
Round-trip time, buffer depth, underruns, lost packets and drift correction, live on both devices. When something goes wrong, you can see where.
Setup
No accounts, no drivers, no Audio MIDI Setup unless you want it.
Open Tethertone and press Start in the menu bar. macOS asks once for the permission the capture method needs.
On the phone, tap Scan pairing QR and point it at the code on the Mac's Pairing tab. Plug in the USB cable too if you like.
Music, video, calls, games: whatever the Mac plays comes out of the phone. Next time, just press Start and the phone reconnects.
Under the hood
No codec, no browser, no WebRTC. Raw PCM in 10 ms packets over a plain TCP socket, into a jitter buffer that keeps itself at the target depth.
Measured on the USB route with the default 90 ms target buffer. How it works in detail.
Capture methods
macOS offers two ways to hear what the Mac is playing. Tethertone supports both, and you switch between them from the window.
Reads the system audio mix directly through ScreenCaptureKit. Nothing to install and your speakers keep working. macOS files it under screen recording because the API has no audio-only mode, but no image is ever read.
Reads the free BlackHole loopback driver with AVAudioEngine. It needs only the Microphone permission. Turn on Hear it on this Mac too and your speakers keep playing.
Connections
One QR code carries every address your Mac can be reached at. The phone tries them all and uses the best one that works.
The lowest latency, and immune to Wi-Fi congestion. Uses adb reverse, which Tethertone sets up on its own.
No cable, no setup. Works on any home network that lets devices see each other.
Tailscale or ZeroTier on both devices. The address appears in the QR code on its own and works from anywhere.
Add an ngrok or cloudflared hostname by hand. The token gates access, but audio isn't encrypted.
Open source
Tethertone is MIT licensed and developed in the open. The whole project is small enough to read in an afternoon.
# macOS app — no Xcode needed
git clone https://github.com/AimenSayoud/tethertone.git
cd tethertone/macos
./build.sh --install
# Android app
cd ../android
./gradlew :androidApp:installDebug
FAQ
Yes. Install Tethertone on the Mac and on the phone, press Start on the Mac and scan the QR code with the phone. Everything the Mac plays is then streamed to the phone's speaker or headphones, over a USB cable or Wi-Fi.
Yes. Tethertone is free and open source under the MIT License. There are no ads, no accounts, no subscriptions and no tracking.
Both. Over USB it uses adb reverse, which needs USB debugging on the phone and adb on the Mac. Over Wi-Fi both devices must be on the same network. The pairing code lists every route and the phone uses whichever answers first, so the cable wins when it is plugged in.
Latency is mostly the phone's jitter buffer, which you set between 20 and 250 ms; the default is 90 ms. Measured on USB with the default setting, the buffer held between 40 and 110 ms with no lost packets. Lower settings reduce latency at the cost of more dropouts on a busy network.
The default capture method uses ScreenCaptureKit, the only macOS API that provides the whole system audio mix without a virtual driver. It has no audio-only mode, so macOS files it under screen recording. Tethertone never reads an image. To avoid the permission, install BlackHole and switch the capture method to BlackHole, which needs only the Microphone permission.
No. The default Screen Recording method needs nothing installed. BlackHole is an optional alternative for people who prefer not to grant the Screen Recording permission.
No. A random token in the QR code stops other people on your network from connecting, but the audio itself travels unencrypted. On a network you do not trust, use the USB cable or a VPN such as Tailscale.
Not yet. The sender is a macOS app and the receiver is an Android app. The wire protocol is documented, so other senders and receivers can be built on it.
About 1.5 Mbit/s, roughly 690 MB per hour, because the audio is uncompressed 16-bit stereo PCM. That is nothing over USB or home Wi-Fi, but expensive on a metered mobile connection.
Yes. The Mac serves any number of phones at once, each with its own send queue so a slow phone cannot hold up the others. It has been tested with two.
Free for everyone, forever. Download both apps and you'll be listening in about a minute.