A Python desktop suite for streaming live audio from one transmitter to multiple connected clients over WebSockets. It includes a server monitor, transmitter, and client player.
- 48 kHz mono PCM audio in 20 ms frames
- WebSocket-based broadcasting for up to 40 clients
- Tkinter GUIs for server monitoring, transmission, and playback
- Connection heartbeats, latency reporting, buffering, and level meters
common/— shared audio framing, configuration, logging, and protocol utilitiesserver/— WebSocket hub and server GUItransmitter/— local audio capture and transmission GUIclient/— audio reception, buffering, playback, and headless client entry point
- Python 3.10+
- A working audio input/output device
- Dependencies in
requirements.txt
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txtOr install as a package with console entry points:
pip install .Start the server first, then the transmitter and one or more clients.
GUI launchers (Tkinter, work on macOS / Windows / Linux):
audio-server-gui # or: python -m server.gui
audio-transmitter-gui # or: python -m transmitter.gui
audio-client-gui # or: python -m client.guiHeadless entry points:
audio-server
audio-transmitter
audio-client --no-playback # receive/validate without opening an output device- Signal handling uses
loop.add_signal_handleron macOS/Linux and falls back tosignal.signalon Windows, so Ctrl+C shutdown works everywhere. - Audio I/O goes through PortAudio (
sounddevice): install PortAudio via Homebrew on macOS, it ships with the Windows/Linux wheels. - Configuration is read from
audio_suite.yamlin the working directory and can be edited/saved from any of the GUIs.
This project is an active prototype. Completed: shared utilities, server core and GUI, transmitter core and GUI, client core and GUI, packaging with console entry points, cross-platform signal handling. Next milestones: latency/jitter statistics in the server monitor, reconnection support in the client, and packaged releases.