Humaid AlQassimi

< Go back

How to Loopback Application Sound as an Input Source with PulseAudio

May 3, 2021 · 2 min read

This guide will show you how to loopback your computer’s application sound as a source in your meeting or calling software. There is probably a way to automate or make this setup permanent, which is something I’d like to later figure out.

We’ll first make a sink, we’ll name sink_mix. This sink would mix mic and application sound. This is done by loading the module-null-sink, with some arguments (providing the name and properties).

pactl load-module module-null-sink sink_name=sink_mix sink_properties=device.description=sink_mix

We’ll then loopback the mic sound into this new sink, this is done using the module-loopback. We first need to find the source of the microphone, you can list sources with:

pactl list sources

If you’d like to know what are the difference between sinks, sources, etc. I recommend you check out Victor’s post regarding PulseAudio under the hood.

After finding the name, in my case, this is “alsa_input.usb-BLUE_MICROPHONE_Blue_Snowball_797_2020_07_29_83297-00.mono-fallback”. In the next command, replace <source> with the name of your source.

pactl load-module module-loopback latency_msec=60 adjust_time=6 source=<source> sink=sink_mix

Using PulseAudio Volume Control (pavucontrol), we can see we can now set the playback of specific applications to sink_mix instead of your default output source. You can also under recording, set your source to “Monitor of sink_mix”.

The issue now is that you are not able to listen to the playback, as it is only sent to sink_mix, which you cannot hear without listening to yourself.

To solve this, we can use module-combine-sink, which allows us to direct any output of this sink to multiple sinks (defined as “slaves”).

We first have to find the name of your output (speakers) sink, this can be done with:

pactl list sinks

In my case, this was “alsa_output.pci-0000_00_1f.3.analog-stereo”, and was listed as the first sink in the list. But this might vary depending on your setup.

In the next command, replace <speaker> with the name of your output sink.

pactl load-module module-combine-sink slaves=<speaker>,sink_mix

When directing the playback of an application, make sure to select “Simultaneous output to …, sink_mix”. Where the ellipsis would match your speaker.

If you have any suggestions, please let me know in the mailing list below!

Would like to comment on the blog post? Feel free to start a discussion on my public general mailing list.