How pabldi08/airsend works
AirSend sends Windows system or per-app audio to AirPlay 2 speakers. The principal flow is choosing or discovering a receiver, preparing a paired stream, capturing and encoding audio, then controlling playback. The graph also retains documented group playback, local mute/standby, and diagnostics capabilities. Some engine and UI paths are unsampled; their links are shown only where excerpts, the source index, or README support them.
Main entry points: lib.rs Engine commands · streaming.rs Live streaming · windows.rs System capture · discovery.rs Speaker discovery
Components 22
User interface
- WinUI controls
native/MainWindow.xaml.cs - Native bridge
native/NativeEngine.cs - Tauri UI
ui/src/main.ts
Engine services
- Engine commands
crates/airsend-engine/src/lib.rs
AirPlay protocol
- Speaker discovery
crates/airplay-core/src/discovery.rs - Receiver capabilities
crates/airplay-core/src/capabilities.rs - Receiver probing
crates/airplay-core/src/probe.rs - Pairing session
crates/airplay-core/src/pairing.rs - Speaker groups
crates/airplay-core/src/groups.rs - Live streaming
crates/airplay-core/src/streaming.rs
Audio pipeline
- System capture
crates/audio-capture/src/windows.rs - App capture
crates/audio-capture/src/process_loopback.rs - Audio endpoints
crates/audio-capture/src/endpoints.rs - Capture queue
crates/audio-capture/src/queue.rs - Silence handling
crates/audio-capture/src/silence.rs - Audio encoder
crates/audio-encode/src/lib.rs
Playback support
- Stream metrics
crates/airplay-core/src/stream_metrics.rs - Diagnostics reports
crates/airsend-engine/src/diagnostics.rs - Preferences
crates/airsend-engine/src/preferences.rs - Silence standby
crates/airsend-engine/src/standby.rs
Other components
- Listener
- AirPlay speaker
Connections 27
- Listener → WinUI controls: controls playback
README.md - WinUI controls → Native bridge: invokes commands
native/MainWindow.xaml.cs - Native bridge → Engine commands: calls engine
native/NativeEngine.cs - Listener → Tauri UI: selects speaker
README.md - Tauri UI → Engine commands: invokes commands
ui/src/main.ts - Engine commands → Speaker discovery: uses discovery
- Speaker discovery → AirPlay speaker: finds receivers
crates/airplay-core/src/discovery.rs - Speaker discovery → Receiver capabilities: checks features
crates/airplay-core/src/discovery.rs - Engine commands → Receiver probing: probes receiver
- Engine commands → Pairing session: prepares session
- Pairing session → AirPlay speaker: opens RTSP session
crates/airplay-core/src/pairing.rs - Engine commands → Speaker groups: selects group
- Engine commands → Live streaming: starts playback
- Live streaming → AirPlay speaker: sends audio
README.md - Engine commands → System capture: starts capture
- Engine commands → App capture: selects app audio
- System capture → Capture queue: queues frames
crates/audio-capture/src/windows.rs - App capture → Capture queue: queues frames
crates/audio-capture/src/process_loopback.rs - System capture → Audio endpoints: selects output
crates/audio-capture/src/windows.rs - System capture → Silence handling: handles silence
crates/audio-capture/src/windows.rs - Capture queue → Live streaming: feeds audio
- Live streaming → Audio encoder: encodes audio
- Live streaming → Stream metrics: records timing
crates/airplay-core/src/streaming.rs - Engine commands → Diagnostics reports: records issues
crates/airsend-engine/src/lib.rs - Engine commands → Preferences: loads settings
crates/airsend-engine/src/lib.rs - Engine commands → Silence standby: manages standby
crates/airsend-engine/src/lib.rs - Listener → AirPlay speaker: listens on
README.md