Been chasing this around today trying to find the optimal setup. I am familiar with virtual cables and multi-input/output devices on macos. I know this is windows forum but the concepts and problem are the same. Seems like there isn't an optimal solution out there as you either lose audio monitoring or lose audio switching (along with scene switching).
So the virtual audio cable approach half-way works with the virtual camera (zoom, teams, etc cases).
Option 1 - Setup
- Desktop audio OUTPUT goes into virtual cable (ie VLC, game, whatever audio).
- Virtual cable may not be needed on windows to capture desktop audio.
- OBS Monitor OUTPUT goes into virtual cable (e.g. audio from scenes).
- Microphone combines with virtual cable (perhaps via multi-input device or software mixer depending on your OS/app options).
- This happens OUTSIDE of OBS.
- Your mic audio is not managed/switched by OBS when you switch scenes.
- So mic is always on or you have to manually switch it (additional step) in another app.
Computer speakers set to monitor virtual cable (ie before mic input combined so you don't have feedback or "listening to yourself" problems).
App (zoom, teams, whatever) audio input set to software mixer or multi-input device depending on how you combined your mic input with the virtual cable.
App camera input set to OBS virtual camera.
Option 2 - Setup
- Desktop audio OUTPUT goes into virtual cable AND computer speakers (e.g. via multi-output device for monitoring)
- Microphone INPUT in OBS (global or within scene)...so audio switching when scene switching is possible.
- OBS Monitor output set to virtual cable (not multi-output device which feeds computer speakers).
- You lose audio monitoring for everything in OBS because virtual cable will not feed computer speakers or headphones.
- Upside: No microphone echo or hearing yourself and you get microphone audio switching.
App (zoom, teams, etc) audio input set to virtual cable (gets desktop audio, obs video audio and mic audio).
App camera input set to OBS virtual camera.
If you have more than one virtual cable device available then you can do a modification of this where you use the first virtual cable to route Desktop audio as global or scene-switchable input to OBS (as well as to computer speakers for output) and use the second virtual cable for OBS output and App (zoom/etc) input. This 2 cable modification gets you OBS-switchable desktop audio...but you still don't have audio monitoring of assets played by OBS. On windows you may not need a second virtual cable to capture desktop audio...might be a mac-only thing.
Solution (doesn't exist yet)
It seems like the logical thing would be to treat the virtual camera as a first-class "Output" (ie in addition to recording/streaming) by creating a "virtual camera audio output device" selection (in addition to the monitor device). Hardware switchers like the Atem Minis allow you to stream, record and emulate a webcam all at the same time as you monitor audio and video (hdmi out)...at least on the Atem Mini Extreme I have.
We can already select whether we want a given audio to be:
- monitor off
- monitor only (mute output)
- monitor and output
...but currently "output" has no meaning in the virtual camera case (only recording/streaming cases). So we have to hack the Monitor output into a virtual cable to make the virtual webcam more usable with OBS audio switching.
If this was implemented:
selectable audio output device in addition to monitor device to use when virtual camera is activated
...then the basic setup would be...
Setup 3 - not yet possible
Set "virtual camera audio OUTPUT device" to virtual cable B.
Set MONITOR device to speakers or headphones so you can monitor/mix your program in OBS.
- Desktop audio output goes to virtual cable A (if necessary to capture it...sorry I know this is windows forum)
- Set as input (global or scene-switchable in OBS)
- Audio monitoring: Monitor + Output (ie goes to output:virtual cable B and monitor:speakers)
- Microphone input to OBS (global or scene switchable).
- Audio monitoring: Monitor off (ie goes to output: virtual cable B only...no echo or feedback problems).
- Videos with audio in OBS scenes
- Audio monitoring: Monitor + Output (goes to output: virtual cable B and monitor:speakers)
App audio input: virtual cable B (OBS "virtual camera audio output device")
App video input: OBS virtual camera
Slightly more elegant but perhaps less flexible solution...
The more elegant (but more complex) solution would be to skip the "virtual camera output selection" and instead create a virtual audio input device that is enabled alongside the virtual camera. Basically just a virtual cable under the hood that takes the OBS audio output and exposes it as a selectable input device in the OS.
Or you could do both. A drop-down to select the OUTPUT audio device for virtual camera (dropdown contains OS audio output devices including any virtual cables installed)...and a checkbox that says: "create virtual input device for output". Checkbox would disable dropdown and could be default.