Releases: chris-ritsen/network-audio-controller
Releases · chris-ritsen/network-audio-controller
netaudio v0.2.4
Full Changelog: netaudio/v0.2.3...netaudio/v0.2.4
netaudio v0.2.3
What's New
AES67 Mode Get/Set
- Read AES67 configured state via ARC opcode
0x1100(AVIO-USB devices) - Read AES67 current/new state via conmon
0x1007multicast announcement - Active probe: send conmon
0x1006to trigger a0x1007response - Set AES67 via conmon
0x1006with proven presence/enable flag fields - Full 4-state model: current disabled/new disabled, current enabled/new disabled, current disabled/new enabled, current enabled/new enabled
- Asymmetric apply semantics: off→on requires reboot, on→off may apply immediately
- CLI:
netaudio device config aes67 [on|off] [-n device] [--all] - Relay:
POST /set-aes67
Preferred Leader Get/Set
- Read preferred leader from conmon
0x0020multicast (byte0x26) - Set preferred leader via conmon
0x0021with presence bitmask - Active probe via
0x0021with zero presence to trigger0x0020announcement - CLI:
netaudio device config preferred-leader [on|off] [-n device] [--all] - Relay:
POST /set-preferred-leader - Set commands send 3 packets at 0.5s intervals for reliability
PTP v1 Clock Role
- Read runtime PTP v1 role from conmon
0x0020(bytes0x48:0x49) 0x0006= Leader,0x0009= Follower- Visible in
netaudio -v device list, JSON API, and SSE events asptp_v1_role - PTP v2 role detection is explicitly not supported
Protocol Corrections
- Conmon header field at offsets 8–15 modeled as 8-byte EUI-64, not 6-byte MAC
0x1006trailing fields modeled aspresence_flags(uint16) +aes67_enable_flags(uint16)- Spec generator deduplicates facts that appear in multiple categories
- Replaced broken AES67
0x2600read path with proven0x1100/0x1007paths
Full Changelog: netaudio/v0.2.1...netaudio/v0.2.3
netaudio v0.2.1
Changes
- Implement device reboot command —
netaudio --host <ip> device reboot. Sends conmon opcode0x0090to port 8700 with 3x UDP retry. Supports multiple devices:--host <ip1> --host <ip2> device reboot
netaudio v0.2.0
Breaking Change
- Merged
netaudio-libintonetaudio— single package.pip install netaudionow includes everything. Thenetaudio-libPyPI package is deprecated. - All
import netaudio_lib→import netaudio
Changes since v0.1.7
--lock-state-timeoutflag — configurable lock state collection timeout (default 4s, env:NETAUDIO_LOCK_STATE_TIMEOUT)- Fix device list stall (#45) — wall-clock deadline prevents infinite hang from foreign multicast traffic
--jsonflag ondevice list— shorthand for--output=json- Suppress zeroconf socket warnings on non-multicast interfaces (#43)
Migration
pip install --upgrade netaudio
pip uninstall netaudio-lib
Replace import netaudio_lib with import netaudio in any code using the library directly.
netaudio v0.1.7
Changes
--lock-state-timeoutflag — configurable lock state collection timeout (default 4s). Also available asNETAUDIO_LOCK_STATE_TIMEOUTenv var.
netaudio v0.1.6
Bug Fix
- Fix device list stall (#45) —
_collect_lock_state()could hang indefinitely when multicast heartbeats from unknown devices kept the socket alive. Added wall-clock deadline (4s default, configurable viaNETAUDIO_LOCK_STATE_TIMEOUT). Also skips offline devices during lock state collection. --jsonflag ondevice list— shorthand for--output=json
netaudio v0.1.5
What's New
- Flow command —
device flowfor managing audio flows - Capture improvements — extended packet store, tshark capture with session filtering and collection
- Evidence workflow — ARC service, fact store, and capture CLI evidence tooling
- Relay endpoints — sample rate, encoding, gain, and AES67 device configuration
- Metering fix — fixed off-by-one in channel level parsing (Ferrofish A32)
- Heartbeat lock quirks — skip unreliable lock state for known buggy models
- Server refactor — foreground-only
server start, configurable relay port (--relay-port/NETAUDIO_RELAY_PORT) - Dependency changes —
redisnow optional ([capture]),pyyamladded to core,dbus-fastoptional ([dbus]) - Packaging — AUR PKGBUILDs and systemd service unit
- Removed
bugsubcommand
netaudio v0.1.4
What's new
- CLI restructure: Device config commands moved to
netaudio device config(sample-rate, encoding, latency, aes67). Oldnetaudio configpaths show migration message. - Top-level
netaudio config:editopens config.toml in $EDITOR,pathshows config location. --allflag: Apply device config to all devices at once (netaudio device config sample-rate 48000 --all). Works for both get (table output) and set.- Lock key management:
netaudio key get/set/clear/extract— manage the device lock key. Auto-extracts from Dante Controller on macOS and Windows. - Lock status:
netaudio device lock statusshows lock state for all devices. Lock column in device list. - SSE metering push: Relay server streams metering data via Server-Sent Events at 20fps instead of polling.
- Fact-driven dissection: Packet dissector automatically annotates packets using protocol facts — no more hardcoded routing.
Install
pip install netaudio==0.1.4
netaudio v0.1.3
What's Changed
- Feat/enable aes67 mode by @Mo-way in #16
- make it work with updated cleo dependency by @ain101 in #18
- Fix #9 and #17 SIGPIPE import issue on windows by @Mo-way in #23
- add rename and subscribe by @marcnnn in #24
- fix: allow setting latency values greater than 16ms by @dakriy in #29
- Update pyproject.toml by @joeladria in #33
- fix: if condition anding tx_channel twice, should be tx_device by @dakriy in #34
- fix: StopIteration error when channel number is not cast to an int by @dakriy in #36
- fix add/remove subscription with ip address by @normen in #38
New Contributors
- @Mo-way made their first contribution in #16
- @ain101 made their first contribution in #18
- @marcnnn made their first contribution in #24
- @dakriy made their first contribution in #29
- @joeladria made their first contribution in #33
- @normen made their first contribution in #38
Full Changelog: https://github.com/chris-ritsen/network-audio-controller/commits/netaudio/v0.1.3