Skip to content
SabiQGPublic

About

Stream Windows audio to HomePod and other AirPlay speakers - a lightweight, native AirParrot alternative

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Repository files navigation

🔊 AirPlayer

Stream your Windows audio to a HomePod — or any AirPlay speaker — with true native Windows integration.

Build License: MIT Platform Python

A reliable, lightweight alternative to AirParrot — and completely free.


Why AirPlayer?

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.

Features

  • 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.

How it works

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

Getting started

  1. Download AirPlayer-Setup.exe from Releases and run it. Windows SmartScreen may warn about an unsigned installer: More info → Run anyway.
  2. 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.
  3. 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.

Latency

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.

Building from source

python -m venv .venv
.venv\Scripts\pip install -r requirements.txt
.venv\Scripts\python -m airplayer

To 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.py

To build the installer (dist\AirPlayer-Setup.exe) with Inno Setup 6:

iscc installer.iss

Tagged pushes (v*) are built by GitHub Actions and the installer is attached to the GitHub Release automatically.

Troubleshooting

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).

Project structure

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

Acknowledgements

  • 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.

License

MIT — do whatever you want, no warranty. VB-Cable is licensed separately by VB-Audio.

About

Stream Windows audio to HomePod and other AirPlay speakers - a lightweight, native AirParrot alternative

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages