obs_audio_routing
Route OBS audio inputs to tracks, configure monitoring, sync offset, and stereo balance. Read or change routing with warnings for common misrouting and latency-cap traps.
Instructions
Read - and optionally change - WHERE one audio input goes: which recording/stream tracks carry it, whether OBS monitors it out of the speakers, its A/V sync offset, and its stereo balance. Call it with only inputName to read; every other field is a change. This is separate from mute and volume on purpose: those are 'how loud', these are 'does it reach anyone at all', and a source can be at 0 dB, unmuted, and still inaudible to viewers. TRAPS, all of which return success while doing nothing you wanted: (1) syncOffsetMs is capped near 960 ms - OBS accepts far larger values, stores them, and applies nothing, so 2000 ms is silently 0. The protocol declares a floor of -950 on the negative side but a ceiling of 20000 on the positive one, so only the positive side gets to fail quietly. If a feed is more than a second late, cut the real latency; you cannot compensate past the cap. (2) A source on no track at all does not even meter, so it looks like dead hardware. (3) Only the tracks named by RecTracks reach the recording, and only one reaches the stream; a source on any other track meters perfectly and reaches nobody. That is how a detection microphone exists without being heard, so do not 'fix' such a source onto track 1. (4) monitorType anything but NONE sends this to the room speakers, where the microphone picks it up and it goes out a second time, out of phase. MONITOR_AND_OUTPUT is the one that does both. The reply always contains what OBS holds AFTER the write, plus a notes list naming any of the above that is now true - trust that over the value you sent.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| tracks | No | Omit to leave unchanged. Partial is fine - only the tracks you name change, e.g. {"6": true}. | |
| balance | No | Omit to leave unchanged. 0.0 hard left, 0.5 centre, 1.0 hard right. | |
| inputName | Yes | Audio input name, exactly as OBS lists it. | |
| monitorType | No | Omit to leave unchanged. NONE = viewers only (the safe default while live). | |
| syncOffsetMs | No | Omit to leave unchanged. Positive delays this audio to catch up with late video. Useful range is about -950..960; larger is accepted and ignored. |