Bluetooth: Degraded Audio Quality Resolved!

My Problem
I recently tried using my old Ubuntu laptop (2012 13" MacBook Pro) to watch a movie. I connected to a Bose SoundLink Mini II, but I started experiencing audio quality issues. Approximately once every couple of minutes the audio would either drop completely or sound convoluted for about 1-2 seconds. The symptoms were identical on both Impish (21.10) and Jammy (22.04)[1].

My Resolution:
In an online forum, I found a comment that suggested that switching from the default PipeWire session manager (pipewire-media-session) to WirePlumber resolved a similar issue for someone else. Being unfamiliar with either of these applications I did some reading[2][3][4][5], and decided to give it a try.

Once I installed wireplumber and libspa-0.2-bluetooth and enabled wireplumber, my sound audio issues disappeared!

The required commands were[6]:

apt install wireplumber libspa-0.2-bluetooth
systemctl --user --now disable pipewire-media-session
systemctl --user --now enable wireplumber

It appears that multiple different Linux distros have taken the stance that “WirePlumber will probably replace pipewire-media-session, someday”. For me, that “someday” is today.

If this helps you to resolve your own audio issues on Ubuntu, please leave a comment with your experience and any additional technical details you can share that might help others!

Notes:

[1] Jammy is unreleased at the time of writing.
[2] Upstream PipeWire currently recommends WirePlumber over pipewire-media-session.
[3] libspa-0.2-bluetooth is considered experimental according to the package description.
[4] https://wiki.debian.org/PipeWire
[5] https://wiki.archlinux.org/title/PipeWire
[6] It wasn’t immediately obvious to me that libspa-0.2-bluetooth was required with wireplumber. The above commands aren’t exactly what I did while troubleshooting, but I think it accurately describes the required commands to reproduce my “fix”.

4 Likes

Thanks for the post.

Firstly, if PipeWire is being used for audio at all in jammy then that is unintentional. We intend for jammy to use PulseAudio for audio, including Bluetooth. Although how to audit that this happens when we have dependencies requiring that both are installed, is unclear.

Second, yes wireplumber is a drop-in replacement for pipewire-media-session. Where we depend on either is in gnome-remote-desktop and they’re supported equally:

Depends: ${misc:Depends},
         ${shlibs:Depends},
         gnome-shell (>= 3.37.92-2~) | budgie-desktop (>= 10.5.2),
         pipewire (>= 0.3.0),
         pipewire-media-session | wireplumber,

As you mentioned, the pipewire-media-session source code says:

PipeWire Media Session is an example session manager for PipeWire.

Note that we recommend the use of WirePlumber instead.

wireplumber is not yet in Ubuntu main though.

2 Likes

Thank you @holmanb for suggesting using wireplumber.
However, your installation steps did not work for me in Ubuntu 20.04, and neither could I find an installation guide on the wireplumber git, maybe because it’s not in Ubuntu main, like @vanvugt suggested .

I had audio issues similar to yours but only on Steam while using the compatibility layer Proton with a bluetooth headset, which have now been solved (hopefully) by installing pipewire instead.
I used the instructions on their website ( pipewire.org). However, I did have to install some dependencies manually (through pip), if anyone wants to follow those steps.

1 Like

Maybe forget it for 20.04… Ubuntu does not support PipeWire for audio until at least version 22.10. Although you can modify 22.04 to use it.

2 Likes

I dumbly followed these steps and now my bluetooth connection is not working at all. My pipewire-media-session was masked instead of disabled. Enabling it again does not work, it stays masked. Is there a way to unmask it again? The reason I tried this in the first place is because since Ubuntu 22.04 upgrade, when I connect my laptop to my radio, the sound on the radio sounds like it’s under water and then also a very mechanical sound. Is there a way to undo what I have done?

Sorry to hear that @ster10 . You should be able to reverse the service changes in this post with the following:

systemctl --user --now disable wireplumber
systemctl --user --now enable pipewire-media-session

I’m guessing that enabling pipewire-media-session while wireplumber is still running is disallowed.

Hi,
Thanks but I already did that right away but it didn’t work unfortunately. It stays masked.
Best regards,
Stefan

Actually it did work. Strange I thought I did it exactly that way yesterday. But perhaps I did not do it in this order after all. Thanks! I can connect to my music device again, but the original issue remains unfortunately.

This worked a treat for me and fixed bluetooth stuttering issues with a Jabra Evolve 2 65 on Ubuntu 22.04.2 LTS x86_64.

Thanks

I’m using ubuntu 23.04 with sony WF-XB700. I’m facing the same problem. There is no pipewire-media-session service. wireplumber service enabled. But I still have a problem. Is there any updates?

Please report a bug by running:

ubuntu-bug bluez

and describe in it the problem you are experiencing.

Thank you @holmanb.

This addressed my BT issue. The intresting part with my ubuntu was that it was initially working - then stopped working for some unknown reason. I was able to hear the volume up/down feedback on wireless headset; I could also play a locally downloaded file. However any audio from browser would play from laptop speakers for some reason. Tried reinstalling BT audio drivers. But finally this one addressed it.

This worked for me Ubuntu 22.04 on an AMD lenovo thinkpad t14s gen2.

My initial symptoms were, terrible choppy, laggy sound on bluetooth while wifi was transmitting data, and also disconnect after 30seconds and then re-connect. Now I still have disconnect, but the audio quality is very good.

I need to figure out the disconnect issue now…

Worked flawlessly for me on Ubuntu 22.04.4 LTS. The difference is mind blowing. Thanks so much for sharing.