Real-time processing setup for livestreaming on Windows

I would like to try Ardour for real-time audio processing for livestreaming. My goal is to be able to apply all the mixing, filters and other effects within Ardour and send the resulting audio via a single stereo channel to Open Broadcaster Software (OBS).

However, I have not been able to figure out how to access the following from Ardour, simultaneously:

  1. The system audio (the monitor of audio output devices one can select on the right side of the windows toolbar, the system audio should still be audible to the user on the chosen output device);
  2. My audio input devices (various microphones connected to the computer).

My current setup and what it can and cannot do:
I use JACK with the following settings – the input device is my XLR microphone connected via the Behringer UMC 204HD interface. The output device is the VB-Cable driver, which is a virtual audio channel that lets me send the resulting audio signal to OBS.
This setup lets me do simple processing of the microphone audio, and record it in OBS.
However, the obvious disadvantage is that I only have access to a single input device (my microphone) and no access to other devices or the system audio. Also, I am wondering whether there is a better way to route the resulting audio to OBS without using VB-Cable (perhaps an alternative solution).

Thank you for your time.

I thought OBS has JACK support, so that you could do all the routing within jackd.

The latest version(s) of jackd have the zita audio adapter built in, but I don’t know if it runs on Windows. It was originally ALSA only, so probably still is (meaning only available on Linux systems). If you are stuck on Windows it might be easier to just buy a UMC404 or UMC1820 interface so that you have more mic preamps on the same audio interface.

Others may know of a software based solution on Windows that is similar to zita_alsa adapter that is available on Linux, but I have not run across that.

I came across ASIO4ALL, a “Universal Windows ASIO Driver”, and got it working. It is free, albeit closed-source. Here’s what the typical configuration looks like:

However, it does accomplish that I can access multiple devices from within Ardour:

With this setup, I am facing 3 issues:

  1. enabling some devices in ASIO4ALL causes it to crash;
  2. still no way to monitor desktop audio;
  3. still no alternatives to routing resulting audio to OBS (I have to use VB-Cable).

Interestingly, I can use the ASIO4ALL driver with JACK as well:

Unfortunately, it provides only 1 input and output stereo channel:

I tried capturing the desktop/system sound using VB-Cable, but the sound seems to become distorted after several minutes. I suspect it might be because I am using a sampling rate of 48 kHz instead of 44.1 kHz, even though I made sure every part of the system was set to 48 kHz.

I also tried Virtual Audio Cable, which seems to provide any number of virtual channels but found it unintuitive and kept running into various audio distortions probably caused by incorrect configuration.

You are looking at the hardware tab. Isn’t your hardware only two channel?

AFAIK that is displaying the I/O of the ASIO4ALL driver chosen in JACK, as shown here: Real-time processing setup for livestreaming on Windows - #5 by Limeth
I would expect it to show all devices I enabled in the ASIO4ALL configuration, but there is no way to open the configuration when selecting JACK (instead of Portaudio) in Ardour, so I assume it is not supposed to be used through JACK.

Did you notice this section of the ASIO4ALL manual:
"Multi-device-setups require that all the devices involved are running from the same clock source. "

ASIO4ALL does not perform adaptive resampling to handle independent clocks, so you have to use external clock synchronization. That is likely not possible if you are trying to use onboard audio together with a USB audio device. Definitely not with a UMC204 which does not have any clock or digital audio I/O.

That might just explain why I keep getting distorted audio in my speakers, which are using the soundcard on my motherboard. I only have two physical audio devices:

  1. My soundcard on the motherboard;
  2. The UMC204 audio interface for my XLR microphone and headphones.

Thankfully, it seems like the UMC204 has two stereo outputs I might be able to use – one for my headphones, and the other for my speakers, thus hopefully eliminating the need for external synchronization. The external synchronization is a requirement I was not aware of, so thank you for informing me.

I think I might have run into a dead end due to the synchronization issues. ASIO4ALL lets me access VB-Cable virtual audio devices and my UMC204HD, but I suspect the distorted sound that gradually appears and disappears over time is caused by asynchronous clocks – one controlling the sampling rate of the system sounds used by VB-Cable, the other being the clock of the UMC204HD.
Would anyone happen to know whether there is anything I can do about this? It seems to me like some sort of clock drift compensation must be available to the OS so that I could even use the UMC204HD at all, but perhaps it is not being utilized in this setup.

Does VB-Cable emulate a WDM interface, or ASIO? I think if you have ASIO aware applications you can use jackd, ASIO4ALL, and jack-router.

I am inquiring on the JACK IRC channel to make sure jack-router is still maintained and is installed with the latest Windows installer. If I understand correctly, jack-router is an application which allows to expose jackd ports as an ASIO driver, so each ASIO aware application can connect to jackd like it is connecting to an ASIO audio device, allowing you to route audio between applications, and to the true audio interface device.

What is your actual use case? You have only mentioned Ardour and OBS, which both support JACK, so using jackd would seem to be the obvious solution there. Are you using other applications? This is a case where which specific applications you are concerned about may be relevant, since applications which support ASIO may have a different solution than applications which only support WDM.

Thanks for your response.

Are you sure about OBS supporting JACK on Windows? It doesn’t seem to show up in the QjackCtl graph or patchbay for me.

My use-case is processing the desktop audio from applications, as well as my microphone’s audio. Ideally, I’d like to be able to capture audio from music streaming applications separately. I can currently do that by using Window’s “App volume and device preferences” and setting my music player’s output to a separate VB-Cable B, while the rest of the desktop audio is transferred by VB-Cable A. The processing should be done in Ardour and the resulting processed audio passed to OBS.

I created a support thread on the VB-Audio forums about the distortion I am experiencing with their software:

No, I was going just by the fact that JACK support was listed in a feature list.
Probably OBS forums would be the best place to ask, the actual Ardour setup should be relatively straight forward if you can figure out the routing between Windows applications, OBS, and Ardour.