Hlavní navigace

Lepší zvuk přes Bluetooth na Linuxu díky kodeku LDAC

Jiří Eischmann

Bluetooth sluchátka jsou bezvadná věc a na moderním linuxovém desktopu se používají bez potíží. Jen ten zvuk není úplně ideální. Existuje totiž spousta kodeků různých kvalit a licencí. Třeba LDAC.

Doba čtení: 4 minuty

Sdílet

Před rokem jsem si pořídil první pořádná bezdrátová sluchátka. Musím říct, že s Fedora Workstation fungují bezvadně. Spárují se, spojí se, zvuk je automaticky přesměrovaný do sluchátek. Když už spárovaná sluchátka zapnu, notebook se s nimi automaticky spojí. Jen ten zvuk není úplně ideální.

Zatímco „po drátě“ jde zvuk v nekomprimované podobě, Bluetooth má omezenou propustnost, a proto se musí použít nějaký kompresní kodek. Můžete použít prakticky libovolný. Aby byl ale použit, musí jej podporovat obě strany. A počet kodeků, které bluetooth zařízení podporuje, je omezený: AAC (částečně volně použitelný, má asi nejširší podporu, protože to je jediný kodek, který podporuje iPhone), AptX (proprietární a patentově chráněný, taktéž velmi rozšířený), AptX-HD (opět proprietární a patentově chráněný, vylepšený AptX s vyšším bitratem), LDAC (volně dostupný v Androidu, nejvyšší bitrate, asi nejlepší dostupný kodek), MP3 (ano, i ten se dá použít, dnes už je dokonce volně použitelný, ale podporuje ho minimum zařízení).

A pak je tu SBC, základní kodek první generace, který je součástí standardu Bluetooth a podporují ho všechna zařízení. Jeho poměr velikost/kvalita je oproti výše zmíněným kodekům špatný. Problém taky je, že většina zařízení dneska zvládne bitrate přes 500 kbps, ale při použití SBC jej omezuje na 320 kbps nebo ještě méně, což je u tohoto kodeku vážně málo.

Moje sluchátka podporují SBC, AAC, AptX, AptX-HD, LDAC. Kromě SBC tedy i všechny aspoň trochu rozšířené pokročilé kodeky. Bohužel na Linuxu se nakonec použije SBC, protože žádný jiný není k dispozici, a sluchátka za šest tisíc hrají jako šumítka za pár stovek. Dnes poslouchám hudbu už prakticky jen na Spotify, které streamuje v OGG 320 kbps. Tento stream se ale v notebooku překóduje do SBC, což znamená docela výraznou ztrátu kvality.

Když jsem o tom přemýšlel před necelým rokem, uvědomil jsem si, že jsem četl, že Sony uvolnilo pro Android kodek LDAC, aby tak mělo konkurenční výhodu oproti AptX-HD, jehož předchůzce AptX je na Androidu taky velmi rozšířený, ale není součástí samotného Androidu a výrobci mobilů za jeho použití musí platit Qualcommu. Říkal jsem si, že pokud je součástí Android Open Source Projectu, musí být uvolněný pod nějakou otevřenou licencí. A taky že byl! Nachází se tam pod licencí Apache 2.0, která zaručuje to, že i když má Sony na daný kodek patenty, nemůže nic vymáhat po uživatelích tohoto kódu.

Zjistil jsem také, že Bluez s kodekem LDAC počítá a pokud je k dispozici, dokáže se na jeho použití s druhou stranou domluvit. Co ale chybělo, bylo rozšíření pro PulseAudio, které by se staralo o převod zvukového streamu do LDACu. Nebylo to úplně triviální množství práce, tak jsem to přeřadil do škatulky „Co bychom mohli implementovat v budoucnu v PipeWire“. PipeWire má totiž výhledově PulseAudio nahradit.

Včera jsem se ale dozvěděl, že takové rozšíření PA mezitím vzniklo. Kromě LDACu podporuje také AptX, AptX-HD a AAC. Ty jsou, jak už jsem zmínil, patentově chráněné a onen modul pro ně používá ffmpeg. Ty tak ve Fedoře hned tak podporovat nebudeme. Zjistil jsem ale taky, že libldac už je ve Fedora package review a zrovna včera dostal kladný právní posudek. To znamená, že už stačí dostat do Fedory jen ten modul a uživatelé se sluchátky podporujícími LDAC budou mít automaticky ve sluchátkách mnohem lepší zvuk.

Původně jsem si myslel, že budeme moci podporovat i AAC, což by vzhledem k jeho rozšířenosti bylo super, ale kodek, který je momentálně ve Fedoře nepodporuje všechny profily, což se může projevit na funkčnosti nebo kvalitě streamu.

Každopádně někdo už zabalil jak onen modul, tak libldac, a já jsem se rozhodl to vyzkoušet. A ono to na Fedoře 29 skutečně fungovalo, LDAC se začal používat pro streaming přes Bluetooth:

Nemám netopýří uši, ale rozdíl v kvalitě zvuku jsem poznal od prvního okamžiku. Poslouchám na těch sluchátkách hudbu z notebooku už druhý den a je to opravdu jiná káva. Vysledoval jsem, že PulseAudio při hraní vytěžuje procesor z 3–5 %. Nedělal jsem srovnání s původním SBC. Předpokládám, že kódování do LDACu bude o cosi náročnější, ale u průměrného stroje to bude rozdíl neznatelný. Někteří uživatelé si stěžovali na latenci, ale myslím si, že to je primárně problém sluchátek, které si nejsou schopné domluvit latency off-set. Já mám video s audiem synchronizované.

Pokud se nepletu, dělá to z Linuxu první desktopový systém, který LDAC podporuje. Doufám, že se nám to podaří dostat už do Fedory 30. Společně s podporou AptX, AptX-HD a AAC (které budou v případě Fedory vyžadovat instalaci balíčku z RPMFusion) tak bude mít vůbec nejširší podporu pokročilých kodeků mezi systémy. Všichni ostatní podporují jen SBC a potom podmnožinu z těch pokročilých.

Kromě výše zmiňovaného modulu se vyvíjí podpora také přímo v PulseAudiu. Ta má pokrývat stejné kodeky. Ale také SBC Ultra High Quality (SBC s vyšším bitratem), AptX Low Latency a FastStream (kodeky pro obousměrný provoz použivané pro hovory). Vzhledem k tomu, že vývoj probíhá v kontaktu s upstreamem, má i větší šanci na to, že se stané trvalou součástí PulseAudia.