The audio library within OBS is damn near arcane
I know. The understandable part is that the official dev team hasn't had an audio guy for all those years and (perhaps wisely, given the circumstances) hasn't tried to fix it.
The frustrating part is their defense of the ever-increasing latency in terms of asynchronous networking! THIS IS NOT A NETWORK! It's supposed to emulate a physical wire in the same physical space. Noticeable latency has no place there, even if you have to compromise other things to get rid of it.
No other app that I know has that problem, hence the virtual device in between: send OBS to something else that has the same clock and is therefore okay, and let the something else handle the clock problem correctly.
Anyway, like I said, they don't have an audio guy, so their attempts to fix it will likely make it even worse, and so they haven't.
---
The routing as shown all the way up top here, would have worked...if it weren't for the 2k brickwall. The steepness and location suggest to me an anti-aliasing filter a decade too low. That filter is a required part of resampling:
- Stuff an equal number of zeroes between original samples to get a really high sample rate that is a common multiple of both the input and output rates.
- Lowpass to smooth it out, and gain it up to account for all the zeroes, often doing both in a single step.
- For that matter, all 3 of these points can be condensed into a single step that doesn't look like anything useful at all until you've studied it for a long time.
- The result of the lowpass should contain nothing consequential above half the new sample rate, and should not adversely affect anything audible. For 40-odd kHz sample rates, that's pretty steep! Hence the term, "brickwall".
- Pick samples out at the new rate.
If OBS is resampling the Monitor output (surprised it does, since the clock problem suggests it doesn't), and it gets the filter frequency wrong by a decade or an order of magnitude (same thing), then that would explain the measured behavior.
Thanks.