bahn::DeviceLaneSink

The production LaneSink: one AudioOutputNode per lane.

Declared in src/libs/libbahn/bahn/tracker/engine/DeviceLaneSink.hpp
Inherits bahn::LaneSink
Group bahn

Detailed description

Every method forwards. The output node brings its own io thread, its own ring and its own hot-plug watchdog, so a lane recovers from an unplugged card the same way every other output in the project does.

Member function documentation

formatFor

[static] QAudioFormat DeviceLaneSink::formatFor(const QAudioDevice &device, const QAudioFormat &format)

The format a lane opens device in: every channel the device has.

The rate and the sample format come from format. The channel count and the channel configuration come from the device, when the device has more channels than format.

The lane is mono, and AudioOutputNode copies a mono block to every channel it was opened with (AudioOutputNode.cpp, the mono fan-out). Opening with the schedule's stereo format instead left a lane silent on any card whose channels are not front-left and front-right: the PreSonus AudioBox 1818 VSL is fourteen `aux` channels under PipeWire, and a stereo stream has nothing to land on. The owner heard one card of three on 2026-10-02, while the device selector's Test button sounded on all three — because TestTonePlayer opens a device in its preferred format, with all of its channels. A lane now opens a card the way the Test button proved works.

The rate and the sample format stay the schedule's: every platform backend resamples at the sink (specs/bahn-output-lanes §OLE-5).

In this section