Set Up Jitsi With Audacity



Published April 22, 2020

Next week I will start teaching an online course in sound technology at Tallinn University, and I have decided to use Audacity and Jitsi for my video conferencing needs. When setting this up on my Arch Linux laptop I discovered a little problem: there is no easy way to connect Audacity to Jitsi’s sound input, which is a bit inconvenient when teaching sound. Normally I would do this kind of patching between applications in Jack, using the excellent patchbay included in qjackctl. However, this proved problematic, as Audacity creates new inputs and outputs as needed whenever you press play or record. This leaves you in a situation where you constantly have to reconnect Audacity’s output to Jitsi’s input whenever you do anything at all. Very messy and unsustainable. To begin with I tried to set up an alsa loopback device to create a virtual soundcard that would show up as a jack client, but I couldn’t make it work. So in the end I swallowed the bitter pill of installing pulseaudio on my system… A bit painful for a software purist like myself, but if that’s the way to get the job done then that’s the way it has to be.

To make pulseaudio sit well with jack you can use Cadence to set up a jack bridge like this:

Then you need to make sure that the pulseaudio bridge is on:

So far so good. Now you should be able to select pulseaudio as an input to Jitsi:

Now, in Audacity, you can choose to send your audio out to system or to PulseAudio Jack source.

If you select the latter, the other Jitsi participants will be able to hear the output, but you will not. Not good. This is where SuperCollider comes to the rescue.

First of all, launch your favorite SuperCollider editor. I use scnvim, but the official SuperCollider IDE will also do.

Run this little snippet of code:

s.waitForBoot({ Ndef(\route, {In.ar(2, 2)}).play });

This will give you a simple patchbay with 2 channels in and 2 channels out (depending on how you have set up SuperCollider, of course…). In qjackctl -> graph your routing now should look something like this:

Now is a good time to restart Audacity. You will notice that the output selector now has SuperCollider as an option. Awesome! Select and connect.

We are almost there. Return to qjackctl and connect SuperCollider’s output to PulseAudio like this:

When you now start playing anything in Audacity, your output will be routed to Jitsi, AND you will be able to hear it yourself.

Screen Sharing

Unfortunately there seems to be no way to share Audacity’s screen on Jitsi in Wayland, so for these meetings I have to go back to the 20th century and do it from xorg and i3wm instead. Oh well…

SuperCollider Alternative

After trialling the setup with a bunch of students I bumped into the issue that the levels from Audacity and the dry mic levels were very different, also due to a problem I had with the sound-card. In addition I wanted a bit more feedback on what the different levels looked like. In the end I discovered jack_mixer, a truly awesome utility for mixing different jack clients. jack_mixer allows you to create new input and output channels at will, so I ended up setting one stereo input track for audacity and one mono track for my microphone. Additionally I added an extra output channel, so that I could send one level to my headphones through the system output and one level to PulseAudio Jack source. I replaced my ad-hoc SuperCollider patcher with this and keep it open during the lectures, so that I can see what is going on at all times.