Improved Bluetooth Audio Quality

I posted this to the Manjaro Forums on July 2, 2020. The Manjaro Forums had a technical issue, and they basically started out fresh. The old forums are frozen in read-only mode under the "archived" subdomain. For whatever reason, standard search engines don't seem to index the archived forums very well. Here is my post: Tip: Improved Bluetooth Audio Quality

In case the archvied forums go away, I am making my own copy of the post here.

Just posting a tip about Bluetooth audio quality that I hope others find useful.

TL;DR: Install modern Bluetooth audio codecs and enable them. That may improve Bluetooth audio quality. I am using pulseaudio-modules-bt-git and libldac from AUR for this.

I am working from home, and using my PC for background music. I have a Bluetooth DAC I use for this purpose. I started with the Topping DX3 Pro, and have since upgraded to the Topping D70. I never noticed any obvious sound quality issues with the DX3 Pro, but with the D70, there was an obvious "hiss" or almost squealing. It was easily drowned out if the music was loud enough. But I keep the music pretty quiet; and either way, the hissing/squealing was very noticeable with music with quiet passages and/or simple music (e.g. solo piano).

Even though Bluetooth is backwards compatible, I initially thought it may have been a Bluetooth versioning issue, since the new D70 is BT 5.0, and the DX3 Pro was BT 4.0, and my PC is also 4.0. I tested with my phone, which is BT 5.0, and there was no hissing. Then I found an older phone with BT 4.0, and it also sounded fine (no hissing).

My ah-ha moment came when I found this blog post, Better Bluetooth sound quality on Linux. Essentially, this post explains that some distributions do not include advanced Bluetooth audio codec support by default, they provide only the original BT codec, SBC (low-complexity subband codec). The blog's suggestion is simple: install additional Pulseaudio modules that implement the more modern BT audio codecs, such as AptX, AptX-HD, and LDAC.

(That said, I do think there is something amiss with the D70 and using the SBC codec, because there was no noticeable hiss in this config with the DX3 Pro, and I was (unknowingly) using SBC with that.)

I installed the following AUR packages pulseaudio-modules-bt-git and libldac to get modern BT audio codec support. Then pulseaudio needs to be restarted: either reboot, or simply do pulseaudio -k.

After that, it was a matter of going into pavucontrol, under the Configuration tab, to actually specify the codec I wanted to use. In my case, I'm using "A2DP Sink: LDAC".

Finally, once everything is installed and configured, you can verify Pulseaudio is using your preferred Bluetooth audio codec like this:

$ pactl list | grep codec
                bluetooth.a2dp_codec = "LDAC"

In my case, with the Topping D70, it got rid of the hiss, which was an immediate and obvious improvement. For folks with nice Bluetooth headphones, this may be a worthwhile tweak to improve sound quality.

Some related links:

Hope this helps someone!