Stream your Windows audio to a HomePod — or any AirPlay speaker — with true native Windows integration.
A reliable, lightweight alternative to AirParrot — and completely free.
Apps like AirParrot bolt a custom UI on top of your audio. AirPlayer does the opposite: it makes your AirPlay speaker feel like a native Windows audio device, so you keep using the tools Windows already gives you:
- 💸 Completely free — AirParrot is paid software (per-machine license, trial with limitations). AirPlayer costs nothing, forever: no license key, no trial, no account, no watermarks. Open source under MIT.
- 🎚️ Native volume — your keyboard volume keys and the Windows volume slider control the HomePod's actual device volume. Mute works too.
- 🔈 Native device picker — the speaker shows up in the standard Windows output selector, under its own name (e.g. "Sala de estar").
- 🪟 Zero-window UI — a single tray icon. Click, pick your speaker, done. No floating windows, no accounts, no nags.
- 🔌 One-click driver setup — the required virtual audio driver (VB-Cable) is downloaded from its official source and installed for you, right from the tray menu.
- AirPlay 2 / HomePod support — streams over RAOP via pyatv, with device discovery on your network (HomePod, HomePod mini, Apple TV, AirPort Express, Macs, AirPlay TVs…).
- Silent local playback — while streaming, audio goes only to the speaker; your PC speakers stay quiet. On disconnect, your previous output device is restored automatically.
- Tunable latency — 800 ms by default; configurable down to the AirPlay minimum (250 ms) via
AIRPLAYER_LATENCY_MS. - Self-healing — if the app is killed mid-stream, the next launch restores your default audio device. Stream health telemetry is logged for easy debugging.
- Single instance — launching it twice just tells you it's already running.
- No microphone access — audio is captured via WASAPI loopback, so the Windows mic-privacy indicator stays off.
Windows apps ──► VB-Cable virtual device ──► WASAPI loopback capture
│
HomePod ◄── AirPlay 2 / RAOP (44.1 kHz) ◄── AirPlayer
Windows only exposes audio devices that have a signed kernel driver — that's why every app in this category uses one. AirPlayer pairs with VB-Cable (free, by VB-Audio): when you connect to a speaker, AirPlayer switches your default output to the virtual device, captures what lands there, and streams it. Windows volume changes are forwarded to the speaker as its own device volume.
| Mode | Requirement | Behavior |
|---|---|---|
| Cable (default) | VB-Cable (auto-installable) | Silent local playback, native volume/mute, auto device switch & restore |
| Loopback (fallback) | none | Mirrors your current speakers; audio also plays locally |
- Download
AirPlayer-Setup.exefrom Releases and run it. Windows SmartScreen may warn about an unsigned installer: More info → Run anyway. - The setup wizard installs AirPlayer, offers autostart with Windows, and — if not already present — downloads and installs the VB-Cable virtual audio driver for you (from the official VB-Audio site). One elevation prompt, zero manual steps. Reboot when asked.
- Stream — right-click the tray icon and pick your speaker. The icon turns green while streaming.
Tip
Rename the virtual device to your speaker's name (Settings → System → Sound → CABLE Input → Rename) and the Windows output picker will show "Living Room" instead of "CABLE Input". AirPlayer detects the device by driver, so any name works.
Note
First run may trigger a Windows Firewall prompt for network access — allow it on private networks (AirPlay discovery uses mDNS). PC and speaker must be on the same network.
AirPlay is a buffered protocol; AirPlayer defaults to a total delay of roughly one second — great for music, not for videos or games. If your Wi-Fi is flaky and the speaker drops out or goes silent, give the stream a bigger cushion via the AIRPLAYER_LATENCY_MS environment variable (default 400, floor 250):
setx AIRPLAYER_LATENCY_MS 800(then restart AirPlayer). Higher = more resilient, lower = snappier.
python -m venv .venv
.venv\Scripts\pip install -r requirements.txt
.venv\Scripts\python -m airplayerTo produce the app executable (dist\AirPlayer.exe, what the installer bundles):
.venv\Scripts\pip install pyinstaller
.venv\Scripts\pyinstaller --noconfirm --onefile --noconsole --name AirPlayer --icon airplayer.ico --version-file file_version_info.txt --hidden-import pystray._win32 run_airplayer.pyTo build the installer (dist\AirPlayer-Setup.exe) with Inno Setup 6:
iscc installer.issTagged pushes (v*) are built by GitHub Actions and the installer is attached to the GitHub Release automatically.
| Symptom | Fix |
|---|---|
| Speaker not found | Same network? Allow Python/AirPlayer through the firewall (private networks). Try Refresh devices. |
| Audio cuts out after seconds | Raise AIRPLAYER_LATENCY_MS (600–1000), see Latency. |
| No sound anywhere after a crash | Relaunch AirPlayer — it restores your default device automatically. |
| Driver installed but not detected | Reboot Windows once. |
| Everything else | Check the log: %LOCALAPPDATA%\AirPlayer\airplayer.log (includes stream-health telemetry every 15 s). |
airplayer/
├── airplay.py # discovery + live RAOP/AirPlay 2 streaming (pyatv), latency control
├── capture.py # WASAPI loopback capture, resampling to 44.1 kHz
├── devices.py # default-device switching (IPolicyConfig), endpoint lookup
├── driver.py # one-click VB-Cable download + elevated silent install
├── volume.py # Windows volume/mute watcher → forwarded to the speaker
├── app.py # controller: glues capture, streaming, volume and the tray
├── tray.py # pystray menu + theme-aware icon
└── __main__.py # entry point, logging, single-instance lock
- pyatv — the excellent AirPlay/RAOP implementation this app builds on.
- VB-Cable — donationware virtual audio device by VB-Audio. Not bundled (its license forbids redistribution); AirPlayer downloads it from the official site. If you find it useful, consider donating to VB-Audio.
- PyAudioWPatch, pystray, pycaw.
MIT — do whatever you want, no warranty. VB-Cable is licensed separately by VB-Audio.