This is a python program for controlling Dante network audio devices (and possibly others in the future). It's early, so expect things to break or switches to change. Use this at your own risk; it's not ready for anything other than a test environment and could make the devices behave unexpectedly. The first goal is to do everything that Dante Controller can do that would be useful for control of the devices from a command-line interface or within scripts.
For more information, check out the gearspace discussion.
- AVIO input/output gain control
- Add/remove subscriptions
- CLI
- Cross-platform foreground daemon plus installable boot service
- Device lock/unlock through the native Rust protocol core
- Display active subscriptions, Rx and Tx channels, devices names and addresses, subscription status
- JSON output
- Set device latency, sample rate, encoding
- Set/reset channel names, device names
- mDNS device discovery
To install from PyPI:
uv tool install netaudioOr with pip/pipx:
pip install netaudioTo install from a clone (requires Python 3.9+ and a Rust toolchain, since the native core is compiled from source):
uv sync
uv run netaudioTo install from AUR, build the package with aur/netaudio.
Run netaudio if installed globally, or uv run netaudio from a clone.
Run tests:
uv lock --check
uv run --python 3.9 --no-project python -m compileall -q packages/netaudio/src/netaudio
cargo test --manifest-path packages/netaudio-core/Cargo.toml
uv run pytest -qThe default Python suite is self-contained and does not require firmware or laboratory evidence. Run the production emulator-image reproducibility test explicitly:
NETAUDIO_FIRMWARE_LABORATORY_ROOT=/path/to/netaudio-workspace uv run pytest -q laboratory_tests/test_firmware_image_reproducibility.pyLint and format:
uv run ruff check .
uv run ruff format .