Fix crackling sound in Libvirt VM with PulseAudio

So I run a Fedora virtual machine on a Libvirt host running in my garage.

I use SPICE and virt-viewer from my laptop in the office to connect to the VM.

Despite the cabled gigabit link, SPICE performances are not optimal.

While I can live with poor full screen video performances in SPICE, I can’t stand crackling audio.

The crackling audio was particularly bad when scrolling in a webpage in a browser or any kind of zooming on pictures.

Receiving end / PulseAudio Server / Audio output / The Laptop

Install the paprefs package.

Start paprefs.

Navigate to the “Network Server” tab”.

Tick “Enable network access to local sound devices”. I ticked the authentication box as I have strict firewall rules between the source and destination.

At the command line kill PulseAudio with pulseaudio -k.

If PulseAudio doesn’t restart automatically (it should) you can run pulseaudio --start.

Open the TCP/4713 port used for receiving the audio.

firewall-cmd --add-port=4713/tcp --permanent
firewall-cmd --reload

Sending end / Client / Audio input / the VM

Edit /etc/pulse/default.pa.

At the end of the file add the following line:

load-module module-tunnel-sink-new server=laptop.example.org sink_name=Remote channels=2 rate=44100

Replace laptop.example.org by the hostname of IP of your server.

Restart PulseAudio with pulseaudio -k.

If PulseAudio doesn’t restart automatically (it should) you can run pulseaudio --start.

Start PulseAudio volume control with pavucontrol.

Start your music player.

You should be able to send your audio through the tunnel:

You can also control the volume of the output:

I now enjoy a crackle free audio experience.

The beauty and other advantage of the setup is that I can close the remote viewer and music will keep playing on my laptop.




Thanks for reading this post!


If you found an issue in this article, you can create an issue on Github.

If you have a comment or question, please drop me a line below!