Single entry point for multi-channel playout: follow one path below, then use Audio routing reference for MIXER / route:// / FFmpeg mapping details.
Related: WO-06 Audio playout · Phase 5 (T5.1)
| Topic | Deep dive |
|---|---|
| List ALSA devices | ALSA device enumeration |
| NVIDIA HDMI/DP, 3.5 mm, USB | Caspar outputs: NVIDIA, stereo, USB |
Consumers in casparcg.config |
Caspar audio consumers |
| AES67, Dante bridges, NDI tools, NetJACK, ROC | Network audio protocols |
| PipeWire sinks / graph | PipeWire multi-channel routing |
| JACK alternative | JACK audio routing |
-ar 48000 and hardware must agree.channel-layout on the channel (and any custom names in <audio><channel-layouts>) must match what you send with -ac and what the sink can play.hw:N,M: aplay -l (see enumeration doc). HighAsCG can list devices via GET /api/audio/devices when the app runs on the same machine as Caspar.Goal: Send program audio over the GPU’s digital audio device (often 2–8 channels on one link).
lsmod | grep snd_hda_intel (see §1.1).aplay -l | grep -iE 'nvidia|hdmi|display' → note card and device → hw:N,M.aplay -D hw:N,M /usr/share/sounds/alsa/Front_Center.wav (or any short WAV).speaker-test -D hw:N,M -c 8 if you need to validate >2ch (see enumeration doc).-f alsa hw:N,M and -ac / codec matching your layout, or <system-audio/> if the default desktop sink should follow HDMI (less deterministic on headless servers).Also read: §1.6 — HDMI/DP into a video switcher (embedded audio into switchers that de-embed / bridge to Dante).
Goal: Class-compliant multi-channel output (often 8–32+ channels).
aplay -l should show the product name on a USB card.speaker-test -D hw:N,M -c 8 (adjust -c).-f alsa hw:N,M with -codec:a pcm_s16le or pcm_s24le, -ar 48000, -ac N.Dante on the network: Linux has no Dante Virtual Soundcard; use a USB–Dante hardware bridge or AES67 mode — Network audio protocols § T3.1.
Goal: Get audio into a Dante domain without DVS on Linux.
hw:N,M like any USB device.Goal: Send video + embedded audio to the LAN.
<name> uniquely (§ T2.3).libndi_newtek, or hardware — § T3.2.Goal: Virtual sinks, graph routing, or ROC — when a single hw: device is not enough.
/etc/pipewire/pipewire.conf.d/ (PipeWire doc).-f pulse sink_name.qpwgraph to verify edges from Caspar’s process to the right sink.| Symptom | Things to check |
|---|---|
| No sound | Wrong hw:N,M; cable/port; monitor/switcher input selected; PULSE_SINK / default sink for <system-audio/>. |
| Only 2 channels work | Layout is stereo but you need 8ch / custom; HDMI EDID limits; -ac too small. |
| Crackle / xruns | Increase buffer (-buffer_size in FFmpeg args, or PipeWire quantum); avoid competing exclusive hw users. |
| Device busy | Another app holds ALSA hw exclusively; use Pulse/PipeWire path or stop the other app. |
| Dante not in OS | Expected on Linux without a bridge — use AES67 + Linux stack or USB–Dante hardware. |
aplay -l
pactl list short sinks # PipeWire/Pulse sinks
pw-cli list-objects Node # PipeWire nodes (best-effort)
speaker-test -D hw:N,M -c N
Application Settings → Audio / OSC stores audioRouting (program layout, ALSA/NDI/system/custom FFmpeg, extra buses). The config generator merges this into flat Caspar keys — see src/config/config-generator.js (mergeAudioRoutingIntoConfig).