Fleet radio: why audio needs its own process
SC FleetradioSC-Overlay
I built a voice radio for our org: multiple channels via LiveKit, push-to-talk on a global hotkey or HOTAS button, a mixer per speaker and an alert for combat comms. A frequency is a LiveKit room; whoever knows the channel password gets a token.
At first the radio was a tab inside SC-Overlay – and it crackled. The OCR scanner loop and the real-time audio callbacks were fighting over the GIL in the same Python process. The fix was unspectacular and effective: the radio is now its own desktop app (PySide6), and the overlay just launches it.
Lesson learned: real-time audio and compute-hungry loops don't belong in the same interpreter.