NewVersion 0.2.0: AudioBridge is now Tethertone

Your Mac's audio,
on your Android phone.

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.

  • Free & MIT licensed
  • No account, no cloud
  • No tracking
  • Native Swift & Kotlin
  • Lossless 16-bit PCM
  • USB and Wi-Fi at once
  • No tracking, no cloud
  • MIT licensed

Features

Built like an audio tool, not a screen-sharing hack

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.

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.

USB and Wi-Fi at once

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.

Stays in sync for hours

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.

Pair once with a QR code

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.

Plays with the screen off

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.

Diagnostics you can read

Round-trip time, buffer depth, underruns, lost packets and drift correction, live on both devices. When something goes wrong, you can see where.

Setup

Three steps, about a minute

No accounts, no drivers, no Audio MIDI Setup unless you want it.

  1. Start on the Mac

    Open Tethertone and press Start in the menu bar. macOS asks once for the permission the capture method needs.

  2. Scan the QR code

    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.

  3. Play anything

    Music, video, calls, games: whatever the Mac plays comes out of the phone. Next time, just press Start and the phone reconnects.

Read the full setup guide

Under the hood

From Core Audio to AudioTrack

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.

  1. CapturemacOSScreenCaptureKit or AVAudioEngine
  2. Packetize10 ms blocks16-bit PCM, 8-byte header, sequence numbers
  3. TransportTCPUSB via adb reverse, or Wi-Fi
  4. BufferJitter buffer90 ms target, 20–250 ms adjustable
  5. PlayAudioTrackrate-trimmed to cancel clock drift
stream bitrate
1520 kbit/s
lost packets
0
buffer range
40–110 ms
drift corrected
~200 ppm

Measured on the USB route with the default 90 ms target buffer. How it works in detail.

Capture methods

Your choice of permission

macOS offers two ways to hear what the Mac is playing. Tethertone supports both, and you switch between them from the window.

Screen Recording Default

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.

API
ScreenCaptureKit
Install
Nothing
Permission
Screen & System Audio Recording

BlackHole

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.

API
AVAudioEngine
Install
BlackHole 2ch
Permission
Microphone

Connections

Cable, Wi-Fi, or anywhere

One QR code carries every address your Mac can be reached at. The phone tries them all and uses the best one that works.

USB cable

The lowest latency, and immune to Wi-Fi congestion. Uses adb reverse, which Tethertone sets up on its own.

Best
Same Wi-Fi

No cable, no setup. Works on any home network that lets devices see each other.

Default
Mesh VPN

Tailscale or ZeroTier on both devices. The address appears in the QR code on its own and works from anywhere.

Remote
Tunnel

Add an ngrok or cloudflared hostname by hand. The token gates access, but audio isn't encrypted.

Advanced

Open source

Read it, build it, change it

Tethertone is MIT licensed and developed in the open. The whole project is small enough to read in an afternoon.

  • A SwiftUI app for macOS that builds with just the Command Line Tools
  • A Kotlin Multiplatform client whose logic runs and is tested on the plain JVM
  • A documented wire protocol with identical test vectors in Swift and Kotlin
  • An independent Python probe that checks any server
Build from source
# 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

Questions, answered

Can I use my Android phone as a speaker for my Mac?

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.

Is Tethertone free?

Yes. Tethertone is free and open source under the MIT License. There are no ads, no accounts, no subscriptions and no tracking.

Does it work over USB or only over Wi-Fi?

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.

How much latency does Tethertone add?

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.

Why does macOS ask for Screen Recording permission?

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.

Do I need BlackHole or Soundflower?

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.

Is the audio encrypted?

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.

Does it work with iPhone, Windows or Linux?

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.

How much data does streaming use?

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.

Can several phones listen at the same time?

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.

Turn your phone into your Mac's speaker

Free for everyone, forever. Download both apps and you'll be listening in about a minute.