Skip to content

Releases: chris-ritsen/network-audio-controller

netaudio v0.2.4

31 Mar 01:10
netaudio/v0.2.4
1d32c70

Choose a tag to compare

netaudio v0.2.3

29 Mar 01:36
netaudio/v0.2.3
6c2b46f

Choose a tag to compare

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 0x1007 multicast announcement
  • Active probe: send conmon 0x1006 to trigger a 0x1007 response
  • Set AES67 via conmon 0x1006 with 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 0x0020 multicast (byte 0x26)
  • Set preferred leader via conmon 0x0021 with presence bitmask
  • Active probe via 0x0021 with zero presence to trigger 0x0020 announcement
  • 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 (bytes 0x48:0x49)
  • 0x0006 = Leader, 0x0009 = Follower
  • Visible in netaudio -v device list, JSON API, and SSE events as ptp_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
  • 0x1006 trailing fields modeled as presence_flags (uint16) + aes67_enable_flags (uint16)
  • Spec generator deduplicates facts that appear in multiple categories
  • Replaced broken AES67 0x2600 read path with proven 0x1100/0x1007 paths

Full Changelog: netaudio/v0.2.1...netaudio/v0.2.3

netaudio v0.2.1

24 Mar 17:45
netaudio/v0.2.1
5d848e5

Choose a tag to compare

Changes

  • Implement device reboot commandnetaudio --host <ip> device reboot. Sends conmon opcode 0x0090 to port 8700 with 3x UDP retry. Supports multiple devices: --host <ip1> --host <ip2> device reboot

netaudio v0.2.0

24 Mar 15:58
netaudio/v0.2.0
83716d1

Choose a tag to compare

Breaking Change

  • Merged netaudio-lib into netaudio — single package. pip install netaudio now includes everything. The netaudio-lib PyPI package is deprecated.
  • All import netaudio_libimport netaudio

Changes since v0.1.7

  • --lock-state-timeout flag — 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
  • --json flag on device 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

24 Mar 15:08
netaudio/v0.1.7
61d5985

Choose a tag to compare

Changes

  • --lock-state-timeout flag — configurable lock state collection timeout (default 4s). Also available as NETAUDIO_LOCK_STATE_TIMEOUT env var.

netaudio v0.1.6

24 Mar 14:54
netaudio/v0.1.6
33986cf

Choose a tag to compare

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 via NETAUDIO_LOCK_STATE_TIMEOUT). Also skips offline devices during lock state collection.
  • --json flag on device list — shorthand for --output=json

netaudio v0.1.5

24 Mar 14:16
netaudio/v0.1.5
7c41117

Choose a tag to compare

What's New

  • Flow commanddevice flow for 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 changesredis now optional ([capture]), pyyaml added to core, dbus-fast optional ([dbus])
  • Packaging — AUR PKGBUILDs and systemd service unit
  • Removed bug subcommand

netaudio v0.1.4

09 Mar 03:15
40f95b4

Choose a tag to compare

What's new

  • CLI restructure: Device config commands moved to netaudio device config (sample-rate, encoding, latency, aes67). Old netaudio config paths show migration message.
  • Top-level netaudio config: edit opens config.toml in $EDITOR, path shows config location.
  • --all flag: 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 status shows 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

06 Mar 04:25
netaudio/v0.1.3

Choose a tag to compare

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

Full Changelog: https://github.com/chris-ritsen/network-audio-controller/commits/netaudio/v0.1.3