Skip to content

triib 1.1.0

Choose a tag to compare

@github-actions github-actions released this 17 Oct 01:39
· 97 commits to main since this release

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 configuration changes it, and triib-cli describe lists
    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 streams lists 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 the set_audio_monitor, audio_monitor
    and list_audio_devices tools. 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 streams prints 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
    does triib-cli discover; a column kept as btc in 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's triib-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" in entities.toml starts 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, in entities.toml and 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 in entities.toml and 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
    in entities.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.toml moves, 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.sh signs with
    the identity named in TRIIB_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.