Skip to content
JaumeAPPublic

About

128-channel AES67 audio driver for macOS. Native Apple Silicon support with SwiftUI management app.

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

AES67

AES67 audio-over-IP: a macOS driver, the platform-free core it is built on, and the Teensy PTP library a grandmaster box uses. Four packages, three of which came from three repositories and are kept together because they are read together, not because they build together.

What is here

Package What it is Built with
packages/aes67-profiles The tables every implementation here has to agree on: the AoIP compatibility profiles, the Dolby per-model data and the PTP profiles. Freestanding headers -- no platform, no operating system, no other package -- so the macOS core and the Teensy firmware read the same numbers instead of keeping two copies CMake, C++20
packages/aes67-core The platform-free core: SDP parsing, the RTP wire header, the jitter buffer and packet pool, the media-clock PLL, channel mapping, configuration. No Apple framework, no socket header, no operating system — checked, not just intended CMake, C++20
packages/aes67-macos-driver The macOS AudioServerPlugIn driver, the PTP daemon and the tools CMake, C++20 and Objective-C++
packages/aes67-macos-manager The SwiftUI manager app: what a person runs, and what installs the driver and the daemon it carries as resources. Built by its own build.sh against the driver package's build/ swiftc, Swift 5
packages/aes67-linux-ptpd A PTP grandmaster for Linux, written for a Raspberry Pi 5: it announces the NIC's own hardware clock, stamps its Sync messages with it and reads its rates from aes67-profiles. Announce, Sync/Follow_Up and Delay_Resp; no BMCA and no slave side CMake, C++20
packages/aes67-ravenna RAVENNA's session layer and the NMOS APIs a controller routes with: DNS-SD over mDNS and the RTSP DESCRIBE that hands over the SDP, IS-04 so the device is on the list, IS-05 to give one device another's stream, IS-08 for the grid channel by channel. The SDP is the core's and the grid is the core's matrix CMake, C++20
packages/t41-ptp IEEE 1588 for the Teensy 4.1, a fork of IMS-AS-LUH/t41-ptp, carrying QNEthernet and TimeLib under libraries/. A submodule: JaumeAP/t41-ptp, the only package here that is a repository of its own Arduino / PlatformIO

The grandmaster firmware that consumes t41-ptp is not here: it is JaumeAP/AES67-master-box-, standalone, and takes t41-ptp as a submodule.

Verification

Every package verifies itself. Each has a gate of its own that builds it, runs its tests and applies whatever checks that package needs — the core has a platform-freedom contract, the driver has a CMake sanity check, t41-ptp compiles for the board. None of them depends on another package's gate to be covered.

scripts/gate.sh runs all three in order and stops at the first failure. It owns no checks of its own; it knows which packages there are and nothing about what any of them does.

scripts/gate.sh                    # the cheap half of every package: seconds
AES67_ANALYSE=1 scripts/gate.sh    # plus clang-tidy, cppcheck, ASan/UBSan, fuzzing and coverage: many minutes

Each package's gate can be run on its own, from anywhere:

packages/aes67-profiles/scripts/gate.sh
packages/aes67-core/scripts/gate.sh
packages/aes67-ravenna/scripts/gate.sh
packages/aes67-macos-driver/scripts/gate.sh
packages/aes67-macos-manager/scripts/gate.sh
packages/aes67-linux-ptpd/scripts/gate.sh
packages/t41-ptp/scripts/gate.sh

Verification is local. .githooks/pre-push runs scripts/gate.sh before every push and asks about the static analysis when the push is to the default branch; a fresh clone has to opt in once, because hook configuration is local and does not travel with a repository:

git config core.hooksPath .githooks

Four workflows exist. Three are for what this machine cannot check, and one is for a second opinion on what it can. .github/workflows/linux-ptpd.yml compiles the Linux daemon, whose half that talks to the kernel does not build on a Mac at all, and packages it for the Pi. .github/workflows/t41-ptp.yml runs the Teensy package's gate with the board build, which wants a PlatformIO toolchain. .github/workflows/ravenna.yml runs aes67-profiles, aes67-core and aes67-ravenna on Linux, because those three have no Apple in them and a portability nobody ever tests is a claim rather than a fact. .github/workflows/macos.yml builds the driver and the Manager app on a macOS runner and checks that the app comes out carrying both -- a second Mac with a different Xcode, which is what the two packages that only ever built here were missing. None is a merge gate: what the first three cover, no local run can, and the fourth repeats a local run on other hardware.

Building

macOS only, and only because of the driver: aes67-macos-driver's project() declares OBJCXX, so configuring the root fails on Linux before anything builds. The other CMake packages -- aes67-profiles, aes67-core, aes67-ravenna, aes67-linux-ptpd -- configure and build on either system from their own directory, and ravenna-alsa-lkm wants Linux and the running kernel's headers.

git clone --recurse-submodules https://github.com/JaumeAP/AES67.git
cd AES67
cmake -S . -B build && cmake --build build
ctest --test-dir build --output-on-failure

That builds the driver, which pulls the core in with it: 42 test suites, plus the core's 19. external/doctest is the submodule those two share; the other is the Linux AES67 daemon, which brings the RAVENNA kernel module it drives along as a submodule of its own. Neither is read by anything on macOS, and both want --recurse-submodules to be on disk at all.

t41-ptp is cross-compiled for an ARM Cortex-M7 and is not wired into the CMake tree. Its host tests run on the Mac; its board build needs PlatformIO.

Licences

The root LICENSE is GPL-3.0 and covers the code written for this project. Everything vendored keeps the licence it arrived with. NOTICE says which is which, subtree by subtree.

About

128-channel AES67 audio driver for macOS. Native Apple Silicon support with SwiftUI management app.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages