ltc-reader: pick the LTC channel out of a multichannel capture

LTC usually rides one input of a console bus or Dante/MADI interface, and
downmixing it into program audio (-ac 1) corrupts the bit transitions. New
flags --channels <n> (interleaved count of the stdin stream, no practical
upper bound) and --ch <n> (1-based pick) deinterleave in the reader, so
the capture command stays a plain passthrough. The extractor keeps frame
alignment across arbitrary chunk splits; selftest adds an LTC-on-5-of-8
case fed in odd-sized chunks. Mono remains the default.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Waters Church
2026-09-02 16:06:53 -04:00
co-authored by Claude Fable 5
parent cb77030eec
commit 7ff8b42e90
2 changed files with 95 additions and 19 deletions
+5 -3
View File
@@ -100,9 +100,11 @@ are written by the app itself.
machine that can hear the LTC signal; it decodes the SMPTE frames from
a PCM pipe (ffmpeg/sox one-liners in its header) and POSTs
running/stopped/no-signal, the timecode, and the frame rate (incl.
29.97 drop-frame) to the module's `/ltc` ingest route. `--selftest`
checks the decoder; `--demo` feeds synthetic LTC end-to-end with no
audio hardware.
29.97 drop-frame) to the module's `/ltc` ingest route. LTC on one
input of a multichannel interface: capture all channels and pick one
with `--channels 18 --ch 5` — never downmix LTC into program audio.
`--selftest` checks the decoder; `--demo` feeds synthetic LTC
end-to-end with no audio hardware.
2. A stage-display layout field labeled "LTC", read over ProPresenter's
stage websocket — value and freshness only, no frame rate.
- **Clock** — a big booth clock; also the smallest possible module and the