Decoder (line out)
A decoder plays an AES67 stream to a USB line-out adapter. It can switch between streams on the fly, and has its own volume and mute.
Set up
- Plug a USB line-out adapter into the board's USB host port.
- On the board's page, choose Decoder · line out under Settings.
- Set:
- Output channels: the width of the output, 1 to 8. A stream with a different channel count is mapped onto it: shared channels are copied, and a mono stream feeds both sides.
- Link offset (ms): how long after a packet is sent it is played, 1 to 40 ms, for streams from EtherJax encoders. The default of 4 ms suits a local switched network. Raise it if Late / bad in the Stream panel keeps climbing.
- Link offset, other senders (ms): the same for every other sender, such as a computer with PipeWire, a web player or a Dante device, 20 ms by default. Those stamp their packets from a software clock and send them in bursts, a few milliseconds late, where an encoder stamps and sends each one on time in hardware. A sender counts as an EtherJax encoder once the decoder has found it on the network (see network); until then it gets this offset, and keeps it until the stream changes.
- Choose Save & reboot.
Choose a stream
Decoders listen for SAP announcements and list the streams on the network under Available streams. Encoders announce about every 30 s, so a new stream can take that long to appear.
- Listen switches to a stream at once, without a reboot, and remembers it. Every stream shares the same PTP clock, so the switch is close to gapless.
- Stop goes silent.
A decoder plays only the sender you chose with Listen, even if another sender uses the same address. Packets from the other sender are ignored, and the decoder's health shows … also sends to … (ignored) while they keep arriving. Streams that share an address are marked same address as …. When the stream you're playing moves to another address, the decoder follows it there (see encoders). It goes by the stream's announcement, not just its sender, so a computer sending several streams (a web player with several zones) doesn't pull the decoder from one to another.
Streams the decoder can't play are listed with the reason, for example not 48 kHz. A stream whose announcement names a different PTP grandmaster is marked not synced to this clock: it won't play in time with this decoder until both share one clock (see clocks).
You can also route decoders from the matrix, or with
POST /api/route (see HTTP API).
Streams from other AES67 devices
Decoders play both L24 and L16 streams. When you choose Listen, the
decoder takes the stream's sample size and media clock offset
(a=mediaclk:direct, nonzero on most Dante devices) from its announcement,
and follows later announcements if they change. For a stream that isn't
announced, give them to POST /api/route as encoding=L16 and
mclk_offset=.
Volume and mute
The Volume slider and Mute button act immediately and are saved after 2 seconds. Volume runs from 0 to 100 on an audio taper: 100 is unity gain, 50 is −12 dB, 1 is −80 dB and 0 is silent. Changes are ramped over a millisecond so they don't click, and the Output levels (played) meters show the result.
Through the API, /api/volume_db sets the volume in dB instead, and allows
up to +12 dB of boost.
If the stream stops
A decoder that stops receiving its stream shows no audio arriving from the group, and rejoins the multicast group every 30 seconds until audio returns. It doesn't reboot for this, since the usual causes (the encoder is off, or a switch forgot the membership) aren't fixed by a reboot. See troubleshooting.