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.
2. 6. 2021 at 22:27
O bluez5.sbc-xq-support jsem nevěděl. Díky!
3. 6. 2021 at 05:47
C: Jen k tomu potřebuje experimentální API Bluez, které zatím není ve výchozím stavu zapnuté.
O: A zapnute neni proc, to je tajne? Udava to aspon skutecne hodnoty? A dokdy to bude asi tak experimentalni. Ja jenom ze treba Nautlilus ma nektere dulezite vlastnosti experimentalni uz nekolik let.
3. 6. 2021 at 10:06
Jak dlouho to je v BlueZ, nevím, ale v PipeWire je to nová věc stejně jako ty ostatní, proto to zatím není zapnuté, ale tipuju, že v F35 už to zapnuté bude.
Vývoj BlueZ v poslední době krapet stagnoval, ale to se teď díky požadavkům z automotive pravděpodobně změní.
4. 6. 2021 at 18:19
Diky za info.
Zkousel jsem bluez5.msbc-support = true. Bohuzel na obou BT sluchatkach co mam dostupne je vysledek katastrofalni.
1) AirPodsPro – uplne hluchy vystup
2) Philips SHB307 – prehravany zvuk je tak strasne prerusovany ze zni jako laserova strelba na 8mi bitu.
SBC-XQ na obou sluchatkach fungovalo dobre – subjektivne jsem nebyl schopen odlisit od SBC.
Vetsi problem je pokud se clovek pokusi pouzit BT headset take jako mikrofon.
Pokud vyberu output device BT headset v profilu HFP + SBC (stereo) a pak dam input take BT headset jediny nabizeny profil je HSP/HFP, profil pro vystup se automaticky take zmeni na HSP (Mono) a kvalita zvuku je priserna. Na Androidu oboje BT sluchatka nejak fungujou.
Nemate nejakej tip pro takovou situaci kdy chcete pouzivat BT headset s mikrofonem, ale chcete zvuk slyset ve stereo kvalite?
4. 6. 2021 at 18:42
Je možné, že ne všechna zařízení fungují s mSBC. Možná proto to zatím není ve výchozím stavu zapnuté. Já jsem s tím neměl u svých BT zařízení problém.
Co se týče toho headset režimu, tak to, že se vám to přepne na mono, není chyba, ale vlastnost HSP a HFP profilu, z definice Bluetooth standardu neumí stereo. Že je kvalita zvuku žalostná, je dáno především použitím toho CVSD kodeku. Řeší to mSBC, ale jestli ten na vašich zařízeních nefunguje, tak to pro vás není řešení.
V Androidu to obstojně funguje, protože výrobci se ta omezení Bluetooth standardu snaží obcházet nejrůznějšími nestandardními obezličkami. Android obsahuje dlouhý seznam výjimek, které se aplikují pro konkrétní připojená zařízení. Vývojáři PipeWire plánují tento seznam převzít.
4. 6. 2021 at 18:55
Ve Fedora 34 je
$ ls -l /etc/systemd/system/bluetooth.target.wants/bluetooth.service
lrwxrwxrwx. 1 root root 41 2019-10-24_01:12:41 /etc/systemd/system/bluetooth.target.wants/bluetooth.service -> /usr/lib/systemd/system/bluetooth.service
Pri zapinani experimentalniho api nemel by se spis smazat link /etc/systemd/system/bluetooth.target.wants/bluetooth.service a nahratit modifikovanou kopii ?
4. 6. 2021 at 21:16
Těch způsobů, jak docílit změny unit filu, je víc. Pravda, asi nejrychlejší způsob je ten použitý v odkazovaném blogpostu: sudo systemctl edit bluetooth.service
Změny jsou pak zaznamenané, dají se jednoduše jedna po druhé vracet.
6. 6. 2021 at 18:52
msbc – ach… v case online meetingov je toto naozaj top feature. preco to nie je by default?
6. 6. 2021 at 20:30
Myslím, že důvod je ten, že je to v PipeWire velmi krátce. Není jasné, u kolika zařízení to může dělat problémy (už tady v diskusi někdo psal, že s jeho sluchátky to nefunguje). Až se to ukáže jako spolehlivé řešení, které funguje s valnou většinou zařízení, tak to default bude. Do té doby si to lidi musí zapnout.
18. 1. 2023 at 19:00
Nevíš, jak povolit SBC-XQ na Fedoře 37?
Balík pipewire-media-session byl nahrazen wireplumber.
Zkusil jsem dát do /usr/share/wireplumber/bluetooth.lua.d/50-bluez-config.lua:
`[„bluez5.enable-sbc-xq“] = true,`
Pak jsem restartoval wireplumber i pipewire služby. Po připojení sluchátek (Shokz OpenRun) vidím v HF módu stále jen kodeky mSBC a CVSD.
19. 1. 2023 at 12:13
A je to skutečně A2DP režim? Protože mSBC a CVSD se nabízejí jen v režimu headsetu. Tam člověk nic jiného nezprovozní, protože kvůli obousměrnému provozu tam není dostatečný datový tok.
3. 2. 2023 at 13:45
Díky za pošťouchnutí správným směrem. Z nějakého důvodu jsem vůbec neměl možnost vybrat Headphones režim (jen Handsfree), takže jsem tam A2DP vůbec neviděl.
Pomohlo smazání BlueZ cache pod /var/lib/bluetooth/ a restartování bluetooth service, jak popsáno v https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Troubleshooting#missing-bluetooth-profiles.
(mimochodem, čekal jsem, že mi přijde odpověď na můj komentář emailem a nepřišla, takže jsem článek hledal znovu, abych se podíval, jestli jsi neodpověděl)
7. 2. 2023 at 17:06
To je divné, nespadlo to do spamu? Mně odpovědi na email chodí.