Repository navigation
triib 1.1.0
The Streams tab with peak meters, max transit times, media clock streams
on host entities with one chosen as their clock source, and host talkers
and listeners folded into host entities. On a Mac, the Mac's own AVB
entity as a host entity, with its configurations, and Listen controls
for what it receives and sends. The macOS app and installer are signed
with Scramble Tools' Developer ID and notarized.
Controller
- The Streams tab lists an entity's streams, outputs then inputs, five
before it scrolls, and shows the picked one's details under the list:
its name, format, state, stream ID, destination and VLAN, and for this
computer's entities its audio and channels. The Entity tab no longer
shows streams. - Each stream in the Streams tab's list has a peak meter of its first two
channels before its format, green, yellow from -12 dBFS and red from
-6 dBFS, wherever this computer carries its audio: its own entities'
streams, and other entities' streams connected to them.
triib-endpointd measures its entities' streams and writes them 20
times a second while the app shows them. On a Mac, a helper,
triib --meters, measures the Mac's own entity's from its Core Audio
device: what it receives from the device's input, what apps send it
through a Core Audio tap. The list's rows line up with the inspector's
headings and fields, and their formats with each other. - An output's max transit time is picked in its details, from 0.25 ms to
50 ms, on any entity that answers GET_MAX_TRANSIT_TIME, Milan or not,
the Mac's AVB entity among them. A running stream's refusal says to
disconnect it first. - While a media clock stream is picked, the Streams tab leaves out the
entity's channel mappings, which are its audio streams'. - The matrix remembers which entities are folded, across restarts.
- An entity with several configurations has a configuration picker,
each by its own name, read from its own strings, or by what it holds
where names are missing or repeat: "16 in, 16 out, 8 ch streams".
triib-cli configurationchanges it, andtriib-cli describelists
them. - A stream output's details list its listeners where its talker keeps
them, as talkers outside Milan do, those not online marked, each with
a button that disconnects it;triib-cli streamslists them too. - On a Mac, the Mac's own entity has Listen controls: a channel or a
pair of what it receives, or of what apps send to one of its output
streams, heard through a Core Audio tap (macOS 14.2 and later), played
through an output picked, with a gain.
The audio runs in a helper,triib --monitor, started again when it
ends or hangs, which waits for a device that is not there, as the
Mac's is not while none of its streams is connected; the choice is
kept. Agents set it through theset_audio_monitor,audio_monitor
andlist_audio_devicestools. macOS asks once for the microphone,
to hear what the Mac receives, and for audio recording, to hear what
it sends. Before macOS 14.2, which has no taps, the controls offer
what the Mac receives alone and say why. - On a Mac, the Mac's own AVB entity shows as a host entity, with its
Core Audio device, which macOS makes only while one of its streams is
connected, and a button that opens Audio MIDI Setup; where AVB is
off, the Entities view says where to turn it on. - Controllers that do not advertise, as the Mac's own does not, are
listed from the commands triib hears them send: their connection
commands, which reach every station, and their commands to this
computer's entities. Each is named for the computer it runs on, as
"Controller on Mac mini", and stays listed for 5 minutes after its
last command. - The network view leaves out controllers, which take no part in the
clock or the streams, and shows the local host as its host entities
where there is one, rather than as This computer beside them. - Controllers have an icon of their own, a traffic light, rather than
the host's. triib's controller, which has no model to read, is
named for the computer it runs on: "triib on Mac mini" after an entity
from the same address, "triib on this computer", else "triib
controller". - Settings has a Storage tab, as prev has: the presets folder and the
entities file, each typed or chosen with Choose…, and checked before
it is taken. - The interface picker's filter opens a menu that hides virtual
interfaces, as before by default, wireless interfaces, and interfaces
without a PTP hardware clock, each checked on its own. - An entity advertising another model is read again in place: the list
and the inspector keep showing what was read before until the new
read is done. - A stream that offers CRF formats counts as a media clock stream
whatever it sends, as the Mac's media clock outputs sending one
channel of AAF do. triib-cli streamsprints each input's counters, and its probing
state and last ACMP answer where Milan's stream info gives them.- The new app icon.
- The entity list's column and the inspector's field for the gPTP
grandmaster an entity advertises say Grandmaster, rather than BTC, as
doestriib-cli discover; a column kept asbtcin the settings
loads as it. - The inspector is titled by the picked entity's name, cut short to
leave the close button its room. - In the inspector, a value short enough to sit beside its label does:
a rate, a channel count, a format, or a picker whose widest choice
fits. Longer ones stay under their labels. - The entity list's rows are 40 pixels tall rather than 56, its Name
heading lines up with the names rather than their icons, and the line
after the names ends with the last row. - Each view has the same 16 pixel margin at the window's sides, below
the toolbar and above the status bar; the matrix's sides were 24. - On a narrow window, the matrix's Hide what cannot connect shrinks to
its icon, its label a tooltip, and the network view's "Showing …
streams" goes below the map, so neither moves the view down. - Every scroll bar is as thin as the matrix's; the stream list's was
thicker. - The Streams tab marks an output with an arrow out of a circle,
pointing right, and an input with one into a circle, pointing left. - Settings and Presets open at once, rather than growing in.
- On macOS, the toolbar's color runs up behind the title bar, which is
transparent, rather than the system's tinted bar with a seam under
it; a double-click there zooms or minimizes as the system's setting
says.
Host entities (Linux)
- Installing triib is all a host entity takes on an interface with a
PTP hardware clock: where no ptp4l answers for the interface, the
daemon starts triib'striib-ptp4l-gptp@<interface>unit itself,
which the polkit rule lets it, rather than waiting for one to be
enabled by hand. A ptp4l run another way on the interface stays as it
is, and where linuxptp is missing the daemon says to install it. - triib opens with the host entities listed for its interface back on
the network, starting the daemon, as after a restart; it started only
as one was added or a preset recalled. - A host entity whose ptp4l clock is more than a millisecond off the
grandmaster's reports itself not asCapable, so controllers show it out
of sync, and the daemon says how far off it is; it reported asCapable
however far off. Out of sync for 10 s, as when a driver reset the
hardware clock, triib's own ptp4l unit starts again, ptp4l stepping
the clock as it starts. - A stream's report says how many frames its socket dropped, its thread
behind, telling frames lost here from frames lost on the way, and the
socket holds about a tenth of a second of a stream rather than a few
hundredths, where the system allows. - Every audio stream takes 2 and 8 channels as well as its own count, as
the AVB community's Basic Audio profile has every talker and listener
do, and the profile's 16 and 32 below a larger stream's own, at its
own rates, so a stereo talker and an 8-channel input meet once a
controller picks the format both take. A talker sends its audio's
channels as the stream's first, with silence in the rest; a listener
plays the stream's channels from the first, with silence where the
stream has fewer. A format chosen so is kept. The entities' model IDs
change, so controllers read them again once. - An output's SR class follows its format: class B's own formats, a frame
each 250 µs, send it in class B, and the others in class A, so a
controller picks the class by picking the format, and a class B stream
is never Milan's frames sent two to an interval. Its max transit time
moves from one class's default to the other's, where a controller set
none.class = "B"inentities.tomlstarts an output in class B's
formats. Every stream's descriptor says which classes its formats go
in, and an entity with audio streams advertises class B support. - A change of sampling rate keeps a stream in its SR class: class B's own
format moves to class B's own at the new rate, not to Milan's. - Talkers and listeners are folded into entities of any number of
streams, as one of one stream does what they did. The Entities view's
one button, Add entity, adds an entity with a stream each way, and its
Streams tab adds and removes streams. triib 1.0's talker and listener
entries, inentities.tomland in presets, read as entities of their
one stream, named as the entity is, with their audio, format, binding,
transit time and class. Their entity IDs stay; their model IDs change,
so controllers read them again once. - One Add stream button, whose menu adds an audio input or output, or a
media clock input or output. - Media clock streams: CRF in Milan's format, 48 kHz with a timestamp
every 96 samples, sent on the same timeline as the entity's audio,
without channels, audio or mappings. - An entity advertises the kinds of stream it has: a media clock source
or sink for its media clock streams, an audio source or sink for its
audio streams, rather than audio whatever it had. - Any input can be the entity's clock source: its talkers then follow
the clock recovered from a media clock's timestamps or an audio
stream's presentation times, and gPTP time while it is not recovered.
The choice is kept, and the clock domain's counters count each lock
and loss. - Controllers map an entity's inputs: their ports have dynamic
mappings, as Milan has them, kept inentities.tomland played as
mapped. - An entity's input binds to its own output, which the matrix offers on
host entities. - The max transit times controllers set on an entity's outputs are kept
inentities.toml. - Adding, removing or changing an entity's stream keeps the entity on
the network, where controllers read it again in place, and leaves its
other streams running as they were, their stream addresses, bindings
and reservations with them. A stream added runs at the entity's rate. - The entities' model name is triib entity, and their model IDs change
once for it. - The entities are listed in
entities.toml, to which 1.0's
endpoints.tomlmoves, or in the file Settings, Storage name; the
daemon starts again on a file named there, one not there yet starting
as a copy of the one in use.
Packages
- The Arch package depends on linuxptp and ethtool, as the Debian and
Fedora packages recommend them, which those systems install by
default; installing has systemd read triib's units again. - The macOS app says why it asks for the microphone and for audio
recording, which Listen needs.packaging/macos/bundle.shsigns with
the identity named inTRIIB_SIGN_IDENTITY, from the keychain in
TRIIB_SIGN_KEYCHAIN, rather than ad hoc where it is set: an ad hoc
signature changes with every build, and macOS then asks for those
permissions again. - The macOS app and package are signed with Scramble Tools' Developer ID
certificates and the package is notarized, so Gatekeeper opens them
without Open Anyway and macOS keeps Listen's permissions across
updates. Both programs run under the hardened runtime, the app with
the microphone entitlement. The release workflow signs, notarizes and
staples, then fails unless the app and package are signed by the
identities its variables name. - The installers say when this computer cannot be an AVB endpoint. The
Linux packages check for a wired interface with a PTP hardware clock
as they install and, finding none, say so with the Ethernet cards that
have one: Intel's I210, I225 and I226 and Marvell's AQtion AQC107, and
no Wi-Fi card yet. The macOS installer warns as it opens when the Mac
has no AVB Ethernet port, and the Windows installer's last page says
that this computer cannot be an AVB endpoint on Windows yet. - The packages, the installer and the AppStream metadata link to the
repository where it lives now, github.com/scrambletoolsllc/triib, and
the metadata to the website, triib.run, with its screenshots and the
host entities, AVB Wireless and AI agents among the features.
Fixed
- Host entities hear their streams on network cards that filter VLANs in
hardware, as Intel's I210 does: the card dropped every stream frame,
tagged with its VLAN, unless that VLAN was registered with it, which
takes an administrator. A stream's socket takes the interface
promiscuous there, which the packet socket's own privilege allows. - The packaged ptp4l configurations step the clock when it is a second
or more off. igb resets an I210's hardware clock when its link goes
down and up, as triib-link does to turn EEE and PAUSE off, and ptp4l
then slewed for good, decades off, still reporting itself in sync. - An entity advertising a new gPTP grandmaster or domain has its gPTP
state and path read again, so one read while it was its own
grandmaster joins the network view's tree. - The AVB Lite offset alarm shows only where an interface runs AVB Lite,
not where it is only capable of it, as an AVB Wireless station is. - An entity running AVB that could run AVB Lite shows "AVB (AVB Lite
capable)". - Adding or removing a host entity leaves the others
running, their stream addresses as they were. - Host entities show as the host's from the moment they advertise.
- A refused SET_MAX_TRANSIT_TIME no longer shows the time asked for.
- A stream's own SR class sets its priority and its reservation, so an
entity's class B stream is reserved as class B. - A preset moved to another computer renames the talkers its entities'
inputs are bound to. - An entity lists each sampling rate once.
- Host entities tell a talker when an input lets go of its
stream: unbound, bound elsewhere, removed or leaving with its entity.
A talker outside Milan, such as the Mac, kept the connection a probe
made and streamed on to a listener long gone. - On Linux, the links triib opens open: the desktop portal refused
them, as it does any app holding a capability, as triib holds
cap_net_raw. triib now asks it from a helper without one. - A Mac's streams no longer read as failing their reservation, "for an
unknown reason". macOS marks a stream's MSRP failure fields valid
while they hold no failure, with failure code 0, and triib took the
mark alone for a failure; a failure now needs a failure code.