Od Fedory 34 na pozici zvukového serveru vystřídal PulseAudio PipeWire, který přináší hned několik zlepšení v podpoře Bluetooth zařízení. Je to především podpora pokročilých kodeků jako LDAC nebo AAC, které znatelně zvyšují kvalitu zvuku oproti standardnímu SBC. Existuje ale pár dalších zajímavých zlepšeních, která PipeWire s nejnovějším BlueZ přináší, ale která nejsou ve výchozím stavu zapnutá. Pojďme se podívat na to, co přináší a jak je zapnout.

mSBC pro profil HSP/HFP

Bluetooth profily HSP/HFP (Headset Profile/Hands Free Profile) musí používat úspornější kodeky, protože v limitovaném pásmu Bluetooth musí přenést zvuk oběma směry. Ve Fedoře se standardně používá CVSD, což je letitý kodek, který vznikl už v roce 1970 a používá se např. ve vysílačkách. V komunikaci s Bluetooth zařízeními se používá typicky v datovém toku 64 kbps a vyznačuje se znatelnou degradací kvality zvuku. Zkuste si do tohoto profilu přepnout a okamžitě poznáte, že zvuk zní jako z plechovky. Co putuje opačným směrem z mikrofonu, není o nic lepší.

PipeWire ale umožňuje pro tyto profily použít kodek mSBC, což není nic jiného než konfigurace kodeku SBC s jedním kanálem a vzorkovací frekvencí 16 kHz. Kvalita zvuku se samozřejmě nevyrovná kodekům používaným v profilu A2DP, který má výrazně širší pásmo, ale oproti CVSD je to výrazné zlepšení a na běžnou konverzaci postačuje. Chcete-li jej zapnout, vytvořte soubor /etc/pipewire/media-session.d/bluez-monitor.conf (případně ~/.config/pipewire/media-session.d/bluez-monitor.conf jen pro daný uživatelský účet) s následujícím obsahem:

properties = {
bluez5.msbc-support = true
}

Poté musíte restartovat PipeWire:

systemctl --user restart pipewire.service

A nyní byste měli mít HSP/HFP s kodekem mSBC v nastavení zvuku.

SBC-XQ pro profil A2DP

V úvodu jsme naznačili, že standardní kodek SBC se nevyznačuje velkou zvukovou kvalitou. Je to dáno tím, že se jedná o kodek starší generace z 80. let, který ještě nepoužívá psychoakustický model, a v nižších datovým tocích dochází k znatelné degradaci kvality zvuku v porovnání s pokročilejšími kodeky. Nicméně při dostatečně velkém datovém toku se rozdíl v kvalitě začne stírat. Standardně se ve Fedoře používá SBC v datovém toku do 328 kbps s nepříliš dobrou kvalitou zvuku. PipeWire ale nově podporuje SBC-XQ, což je SBC v datovém toku až 551 kbps, kdy je kvalita s pokročilými kodeky srovnatelná. Výhoda SBC je potom v tom, že je standardním kodekem v Bluetooth a podporují ho tak všechna zařízení používající profil A2DP. Stále existuje řada zařízení, která jiný kodek neumí, případně se používá jako fallback, pokud se zdrojové a koncové zařízení nedohodnou na nějakém společném pokročilém kodeku. V těchto případech se hodí, aby SBC hrálo v co nejlepší zvukové kvalitě, a SBC-XQ se vyplatí zapnout.

Abyste jej zapnuli, musíte vytvořit, případně editovat soubor bluez-monitor.conf jako v předchozím případu, jen do něj umístíte následující řádek:

bluez5.sbc-xq-support = true

Opět je potřeba restart PipeWire a po něm naleznete SBC-XQ jako volbu v nastaveních zvuku.

Hlášení stavu baterie

PipeWire umí také hlásit stav baterie připojeného zvukového Bluetooth zařízení. Jen k tomu potřebuje experimentální API Bluez, které zatím není ve výchozím stavu zapnuté. Zapnete jej tak, že zkopírujete unit soubor /usr/lib/systemd/system/bluetooth.service do /etc/systemd/system/ a na řádek se spouštěcím příkazem přidáte přepínač --experimental:

ExecStart=/usr/libexec/bluetooth/bluetoothd --experimental

Poté restartujete službu bluetooth: sudo systemctl restart bluetooth.service

A pokud vaše zařízení reportuje stav baterie, naleznete jej v Nastavení->Napájení. Systém by vás měl také upozornit, pokud hodnota zbývající energie klesne pod kritickou hranici.

Článek byl inspirovaný blogpostem od Tore Andersona.