Ljud via Bluetooth: maximal information om profiler, codecs och enheter

Ljud via Bluetooth: maximal information om profiler, codecs och enheter

På grund av massproduktionen av smartphones utan 3.5 mm ljudjack har trådlösa Bluetooth-hörlurar blivit det främsta sättet för många att lyssna på musik och kommunicera i headsetläge.
Tillverkare av trådlösa enheter skriver inte alltid detaljerade produktspecifikationer, och artiklar om Bluetooth-ljud på Internet är motsägelsefulla, ibland felaktiga, pratar inte om alla funktioner och kopierar ofta samma information som inte överensstämmer med verkligheten.
Låt oss försöka förstå protokollet, funktionerna hos Bluetooth OS-stackar, hörlurar och högtalare, Bluetooth-codecs för musik och tal, ta reda på vad som påverkar kvaliteten på överfört ljud och latens, lär dig hur du samlar in och avkodar information om stödda codecs och andra enheter Förmågor.

TL; DR:

  • SBC - normal codec
  • Hörlurarna har sin egen equalizer och efterbehandling för varje codec separat
  • aptX är inte så bra som annonseras
  • LDAC marknadsför skitsnack
  • Samtalskvaliteten är fortfarande dålig
  • Du kan bädda in C-ljudkodare i din webbläsare genom att kompilera dem i WebAssembly via emscripten, och de kommer inte att sakta ner mycket.

Musik via Bluetooth

Den funktionella komponenten av Bluetooth bestäms av profiler - specifikationer för specifika funktioner. Bluetooth-musikströmning använder en högkvalitativ A2DP enkelriktad ljudöverföringsprofil. A2DP-standarden antogs 2003 och har inte förändrats nämnvärt sedan dess.
Inom profilen är 1 obligatorisk codec med låg beräkningskomplexitet SBC, skapad specifikt för Bluetooth, och ytterligare 3 sådana standardiserade. Det är också möjligt att använda odokumenterade codecs av ​​din egen implementering.

Från och med juni 2019 är vi i xkcd-serien med 14 A2DP-codecs:

  • SBC ← standardiserad i A2DP, stöds av alla enheter
  • MPEG-1/2 Layer 1/2/3 ← standardiserad i A2DP: välkänd MP3, används i digital-TV MP2, och okänd MP1
  • MPEG-2/4 AAC ← standardiserad i A2DP
  • ATRAC ← gammal codec från Sony, standardiserad i A2DP
  • LDAC ← ny codec från Sony
  • aptX ← codec från 1988
  • aptX-HD ← samma som aptX, bara med olika kodningsalternativ
  • aptX låg latens ← helt annan codec, ingen mjukvaruimplementering
  • aptX Adaptiv ← ytterligare en codec från Qualcomm
  • FastStream ← pseudo-codec, dubbelriktad SBC-modifiering
  • HWA LHDC ← ny codec från Huawei
  • Samsung HD ← stöds av 2 enheter
  • Samsung skalbar ← stöds av 2 enheter
  • Samsung UHQ-BT ← stöds av 3 enheter

Varför behöver vi överhuvudtaget codecs, frågar du dig, när Bluetooth har EDR, som gör att du kan överföra data i hastigheter på 2 och 3 Mbit/s, och för okomprimerad tvåkanalig 16-bitars PCM räcker det med 1.4 Mbit/s?

Dataöverföring via Bluetooth

Det finns två typer av dataöverföring i Bluetooth: Asynchronous Connection Less (ACL) för asynkron överföring utan upprättande av anslutning, och Synchronous Connection Oriented (SCO), för synkron överföring med preliminär anslutningsförhandling.
Sändning utförs med användning av ett tidsdelningsschema och val av en överföringskanal för varje paket separat (Frequency-Hop/Time-Division-Duplex, FH/TDD), för vilken tiden är uppdelad i 625 mikrosekundersintervall som kallas luckor. En av enheterna sänder i luckor med jämna nummer, den andra i luckor med udda nummer. Det överförda paketet kan uppta 1, 3 eller 5 luckor, beroende på storleken på data och den inställda typen av överföring, i detta fall utförs överföring av en enhet i jämna och udda luckor fram till slutet av överföringen. Totalt kan upp till 1600 paket tas emot och skickas per sekund, om vart och ett av dem upptar 1 plats, och båda enheterna sänder och tar emot något utan att stanna.

2 och 3 Mbit/s för EDR, som kan hittas i meddelanden och på Bluetooth-webbplatsen, är den maximala kanalöverföringshastigheten för all data totalt (inklusive tekniska rubriker för alla protokoll i vilka data måste kapslas in), i två riktningar samtidigt. Den faktiska dataöverföringshastigheten kommer att variera mycket.

För att överföra musik används en asynkron metod, nästan alltid med paket som 2-DH5 och 3-DH5, som bär en maximal mängd data i EDR-läge på 2 Mbit/s respektive 3 Mbit/s och upptar 5 tid -Dela slots.

Schematisk representation av överföring med 5 platser av en enhet och 1 plats av en annan (DH5/DH1):
Ljud via Bluetooth: maximal information om profiler, codecs och enheter

På grund av principen om tidsdelning av etervågorna tvingas vi vänta en tidslucka på 625 mikrosekunder efter att ha sänt ett paket om den andra enheten inte sänder något till oss eller sänder ett litet paket, och mer tid om den andra enheten sänder i stora paket. Om mer än en enhet är ansluten till telefonen (till exempel hörlurar, klockor och ett träningsarmband) delas överföringstiden mellan dem alla.

Behovet av att kapsla in ljud i speciella transportprotokoll L2CAP och AVDTP tar 16 byte från den möjliga maximala mängden överförd ljudnyttolast.

Paket Typ
Antal slots
Max. antal byte i paketet
Max. antal byte av A2DP nyttolast
Max. A2DP nyttolast bithastighet

2-DH3
3
367
351
936 kbps

3-DH3
3
552
536
1429 kbps

2-DH5
5
679
663
1414 kbps

3-DH5
5
1021
1005
2143 kbps

1414 och 1429 kbps är definitivt inte tillräckligt för att överföra okomprimerat ljud i verkliga förhållanden, med det bullriga 2.4 GHz-intervallet och behovet av att överföra tjänstdata. EDR 3 Mbit/s kräver överföringseffekt och buller i luften, därför, även i 3-DH5-läge, är bekväm PCM-överföring omöjlig, det kommer alltid att finnas kortvariga avbrott, och allt fungerar bara på ett avstånd av en ett par meter.
I praktiken är även en 990 kbit/s ljudström (LDAC 990 kbit/s) svår att sända.

Låt oss återgå till codecs.

SBC

Codec krävs för alla enheter som stöder A2DP-standarden. Den bästa och sämsta codec på samma gång.

Samplingsfrekvens
Lite djup
Bithastighet
Stöd för kodning
Avkodningsstöd

16, 32, 44.1, 48 kHz
16-bit
10-1500 kbps
Alla enheter
Alla enheter

SBC är en enkel och beräkningssnabb codec, med en primitiv psykoakustisk modell (endast maskering av tysta ljud tillämpas), med adaptiv pulskodmodulering (APCM).
A2DP-specifikationen rekommenderar två profiler för användning: mellankvalitet och hög kvalitet.
Ljud via Bluetooth: maximal information om profiler, codecs och enheter

Codecen har många inställningar som låter dig styra den algoritmiska fördröjningen, antalet sampel i ett block, bitdistributionsalgoritmen, men nästan överallt används samma parametrar som rekommenderas i specifikationen: Joint Stereo, 8 frekvensband, 16 block i en ljudram, Loudness-bitdistributionsmetod.
SBC stöder dynamisk förändring av Bitpool-parametern, som direkt påverkar bithastigheten. Om etern är igensatta, paket går förlorade eller enheter är placerade på stora avstånd, kan ljudkällan minska Bitpoolen tills kommunikationen återgår till det normala.

De flesta hörlurstillverkare ställer in det maximala Bitpool-värdet till 53, vilket begränsar bithastigheten till 328 kilobit per sekund när man använder den rekommenderade profilen.
Även om hörlurstillverkaren har ställt in det maximala Bitpool-värdet över 53 (sådana modeller finns till exempel: Beats Solo³, JBL Everest Elite 750NC, Apple AirPods, som också finns på vissa mottagare och bilhuvudenheter), så tillåter de flesta operativsystem inte användningen av ökade bithastigheter på grund av inställd intern värdegräns i Bluetooth-stackar.
Dessutom ställer vissa tillverkare in det maximala Bitpool-värdet till lågt för vissa enheter. Till exempel för Bluedio T är det 39, för Samsung Gear IconX är det 37, vilket ger dålig ljudkvalitet.

Artificiella begränsningar från utvecklare av Bluetooth-stackar uppstod troligen på grund av inkompatibiliteten hos vissa enheter med stora Bitpool-värden eller atypiska profiler, även om de rapporterade stöd för dem, och otillräcklig testning under certifieringen. Det var lättare för författarna till Bluetooth-stackar att begränsa sig till att komma överens om den rekommenderade profilen, snarare än att skapa databaser med felaktiga enheter (även om de nu gör detta för andra felaktigt fungerande funktioner).

SBC allokerar kvantiseringsbitar dynamiskt till frekvensband på låg-till-hög basis, med olika vikter. Om all bithastighet användes för de låga och mellanliggande frekvenserna kommer de höga frekvenserna att "klippas av" (det blir tyst istället).

Exempel SBC 328 kbps. Överst är originalet, längst ner är SBC, som regelbundet växlar mellan spår. Ljudet i videofilen använder FLAC förlustfri komprimeringscodec. Att använda FLAC i en mp4-behållare är inte officiellt standardiserat, så det är inte garanterat att din webbläsare kommer att spela det, men det bör fungera i de senaste versionerna av Chrome och Firefox för stationära datorer. Om du inte har ljud kan du ladda ner filen och öppna den i en fullfjädrad videospelare.
ZZ Top - Sharp Dressed Man

Spektrogrammet visar växlingsögonblicket: SBC klipper periodvis tysta ljud över 17.5 kHz och allokerar inga bitar alls för bandet över 20 kHz. Hela spektrogrammet är tillgängligt genom att klicka (1.7 MB).
Ljud via Bluetooth: maximal information om profiler, codecs och enheter

Jag hör ingen skillnad mellan originalet och SBC på det här spåret.

Låt oss ta något nyare och simulera ljudet som skulle erhållas med Samsung Gear IconX-hörlurar med Bitpool 37 (ovan - originalsignalen, nedan - SBC 239 kbps, ljud i FLAC).
Mindless Self Indulgence - Vittne

Jag hör sprakande, mindre stereoeffekt och ett obehagligt "klumpande" ljud i de höga frekvenserna av sång.

Även om SBC är en mycket flexibel codec kan den konfigureras för låg latens, ger utmärkt ljudkvalitet vid höga bithastigheter (452+ kbps) och är ganska bra för de flesta med standard hög kvalitet (328 kbps), på grund av det faktum att A2DP-standarden anger inte fasta profiler (men ger bara rekommendationer), stackutvecklare har satt konstgjorda begränsningar för Bitpool, parametrarna för det överförda ljudet visas inte i användargränssnittet och hörlurstillverkare är fria att ställa in sina egna inställningar och aldrig ange Bitpool-värdet i produktens tekniska specifikationer, codec blev känd för sin låga ljudkvalitet, även om detta inte är ett problem med codec som sådan.
Bitpool-parametern påverkar bara bithastigheten direkt inom en profil. Samma Bitpool 53-värde kan ge både en bithastighet på 328 kbps med den rekommenderade High Quality-profilen och 1212 kbps med Dual Channel och 4 frekvensband, varför OS-författarna, förutom restriktioner på Bitpool, sätter en gräns och på Bithastighet. Som jag ser det uppstod denna situation på grund av ett fel i A2DP-standarden: det var nödvändigt att förhandla om bithastigheten, inte Bitpool.

Tabell över stöd för SBC-funktioner i olika operativsystem:

operativsystem
Samplingsfrekvenser som stöds
Gräns ​​max. Bitpool
Gräns ​​max. Bithastighet
Typisk bithastighet
Bitpool dynamisk justering

Windows 10
44.1 кГц
53
512 kbps
328 kbps
✓*

Linux (BlueZ + PulseAudio)
16, 32, 44.1, 48 kHz
64 (för inkommande anslutningar), 53 (för utgående anslutningar)
Ingen gräns
328 kbps
✓*

MacOS High Sierra
44.1 кГц
64, standard 53***
okänt
328 kbps

Android 4.4-9
44.1/48 kHz**
53
328 kbps
328 kbps

Android 4.1-4.3.1
44.1, 48 kHz**
53
229 kbps
229 kbps

Björnbär OS 10
48 кГц
53
Ingen gräns
328 kbps

* Bitpool minskar bara, men ökar inte automatiskt, om överföringsförhållandena förbättras. För att återställa Bitpool måste du stoppa uppspelningen, vänta ett par sekunder och starta ljudet igen.
** Standardvärdet beror på stackinställningarna som angavs när den fasta programvaran kompilerades. I Android 8/8.1 är frekvensen endast antingen 44.1 kHz eller 48 kHz, beroende på inställningarna under kompileringen, i andra versioner stöds 44.1 kHz och 48 kHz samtidigt.
*** Bitpool-värdet kan ökas i programmet Bluetooth Explorer.

aptX och aptX HD

aptX är en enkel och beräkningssnabb codec, utan psykoakustik, som använder adaptiv differentiell pulskodmodulering (ADPCM). Dök upp runt 1988 (inlämningsdatum patent daterad februari 1988), före Bluetooth, användes den främst i professionell trådlös ljudutrustning. Ägs för närvarande av Qualcomm, kräver licensiering och royalties. Från och med 2014: 6000 1 USD en gång och ≈ 10000 USD per enhet, för batcher på upp till XNUMX XNUMX enheter (källa, s. 16).
aptX och aptX HD är samma codec, med olika kodningsprofiler.

Codec har bara en parameter - val av samplingsfrekvens. Det finns dock ett val av antal/läge för kanaler, men i alla enheter som jag känner till (70+ stycken) stöds endast Stereo.

Codec
Samplingsfrekvens
Lite djup
Bithastighet
Stöd för kodning
Avkodningsstöd

aptX
16, 32, 44.1, 48 kHz
16-bit
128 / 256 / 352 / 384 kbps (beroende på samplingshastighet)
Windows 10 (dator och mobil), macOS, Android 4.4+/7*, Blackberry OS 10
Brett utbud av ljudenheter (hårdvara)

* Versioner upp till 7 kräver modifiering av Bluetooth-stacken. Codec stöds endast om Android-enhetstillverkaren har licensierat codec från Qualcomm (om operativsystemet har kodningsbibliotek).

aptX delar in ljud i 4 frekvensband och kvantiserar dem med samma antal bitar konstant: 8 bitar för 0-5.5 kHz, 4 bitar för 5.5-11 kHz, 2 bitar för 11-16.5 kHz, 2 bitar för 16.5-22 kHz ( siffror för samplingshastighet 44.1 kHz).

Exempel på aptX-ljud (överst - den ursprungliga signalen, längst ner - aptX, spektrogram av endast de vänstra kanalerna, ljud i FLAC):

Topparna blev lite rödare, men man kunde inte höra skillnaden.

På grund av den fasta fördelningen av kvantiseringsbitar kan codec inte "skifta bitarna" till de frekvenser som behöver dem mest. Till skillnad från SBC kommer aptX inte att "kapa" frekvenser, utan lägga till kvantiseringsbrus till dem, vilket minskar ljudets dynamiska omfång.

Det bör inte antas att användning av till exempel 2 bitar per band minskar det dynamiska området till 12 dB: ADPCM tillåter upp till 96 dB dynamiskt omfång även när man använder 2 kvantiseringsbitar, men bara för en viss signal.
ADPCM lagrar den numeriska skillnaden mellan det aktuella provet och nästa sampel, istället för att lagra det absoluta värdet som i PCM. Detta gör att du kan minska kraven på antalet bitar som behövs för att lagra samma (utan förlust) eller nästan samma (med ett relativt litet avrundningsfel) information. För att minska avrundningsfel används koefficienttabeller.
När författarna skapade codec beräknade författarna ADPCM-koefficienter på en uppsättning musikljudfiler. Ju närmare ljudsignalen är den musikuppsättning som borden byggdes på, desto mindre kvantiseringsfel (brus) skapar aptX.

På grund av detta kommer syntetiska tester alltid att ge sämre resultat än musik. Jag gjorde ett speciellt syntetiskt exempel där aptX visar dåliga resultat - en sinusvåg med en frekvens på 12.4 kHz (ovan - originalsignalen, nedan - aptX. Ljud i FLAC. Sänk volymen!):

Spektrumdiagram:
Ljud via Bluetooth: maximal information om profiler, codecs och enheter

Ljud är tydligt hörbara.

Men om du genererar en sinusvåg med en mindre amplitud så att den är tystare, kommer bruset också att bli tystare, vilket indikerar ett brett dynamiskt område:

Ljud via Bluetooth: maximal information om profiler, codecs och enheter

För att höra skillnaden mellan det ursprungliga musikspåret och det komprimerade spåret kan du invertera en av signalerna och lägga till spåren kanal för kanal. Detta tillvägagångssätt är i allmänhet felaktigt och skulle inte ge vettiga resultat med mer komplexa codecs, men specifikt för ADPCM är det ganska lämpligt.
Skillnaden mellan original och aptX
Medelkvadratskillnaden för signalerna ligger på nivån -37.4 dB, vilket inte är mycket för sådan komprimerad musik.

aptX-HD

aptX HD är inte en fristående codec - det är en förbättrad kodningsprofil för aptX codec. Ändringarna påverkade antalet bitar som tilldelats för kodningsfrekvensområden: 10 bitar för 0-5.5 kHz, 6 bitar för 5.5-11 kHz, 4 bitar för 11-16.5 kHz, 4 bitar för 16.5-22 kHz (siffror för 44.1 kHz) .

Codec
Samplingsfrekvens
Lite djup
Bithastighet
Stöd för kodning
Avkodningsstöd

aptX-HD
16, 32, 44.1, 48 kHz
24 bitar
192 / 384 / 529 / 576 kbps (beroende på samplingshastighet)
Android 8+*
Vissa ljudenheter (hårdvara)

* Versioner upp till 7 kräver modifiering av Bluetooth-stacken. Codec stöds endast om Android-enhetstillverkaren har licensierat codec från Qualcomm (om operativsystemet har kodningsbibliotek).

Mindre vanligt än aptX: kräver tydligen separat licensiering från Qualcomm och separata licensavgifter.

Låt oss upprepa exemplet med en sinusvåg på 12.4 kHz:
Ljud via Bluetooth: maximal information om profiler, codecs och enheter

Mycket bättre än aptX, men fortfarande lite bullriga.

aptX låg latens

En codec från Qualcomm som inte har något gemensamt med standard aptX och aptX HD, att döma av den begränsade informationen från personer som är involverade i dess utveckling. Designad för interaktiv ljudöverföring med låg latens (filmer, spel), där ljudfördröjningen inte kan justeras med programvara. Det finns inga kända programvaruimplementationer av kodare och avkodare, de stöds uteslutande av sändare, mottagare, hörlurar och högtalare, men inte av smartphones och datorer.

Samplingsfrekvens
Bithastighet
Stöd för kodning
Avkodningsstöd

44.1 кГц
276/420 kbps
Vissa sändare (hårdvara)
Vissa ljudenheter (hårdvara)

AAC

AAC, eller Advanced Audio Coding, är en beräkningsmässigt komplex codec med en seriös psykoakustisk modell. Används ofta för ljud på Internet, näst i popularitet efter MP3. Kräver licensiering och royalties: 15000 1000 USD en gång (eller 15 0.98 USD för företag med mindre än 500000 anställda) + XNUMX USD för de första XNUMX XNUMX enheterna (källa).
Codec är standardiserad inom MPEG-2- och MPEG-4-specifikationerna och i motsats till vanliga missuppfattningar tillhör den inte Apple.

Samplingsfrekvens
Bithastighet
Stöd för kodning
Avkodningsstöd

8 - 96 kHz
8 - 576 kbps (för stereo), 256 - 320 kbps (typiskt för Bluetooth)
macOS, Android 7+*, iOS
Brett utbud av ljudenheter (hårdvara)

* endast på enheter vars tillverkare har betalat licensavgifter

iOS och macOS använder Apples nuvarande bästa AAC-kodare för att leverera högsta möjliga ljudkvalitet. Android använder den näst högsta kvaliteten Fraunhofer FDK AAC-kodare, men kan använda olika hårdvara inbyggd i plattformen (SoC) med okänd kodningskvalitet. Enligt de senaste testerna på SoundGuys hemsida, AAC-kodningskvaliteten för olika Android-telefoner varierar kraftigt:
Ljud via Bluetooth: maximal information om profiler, codecs och enheter

De flesta trådlösa ljudenheter har en maximal bithastighet på 320 kbps för AAC, vissa stöder bara 256 kbps. Andra bithastigheter är extremt sällsynta.
AAC ger utmärkt kvalitet vid 320 och 256 kbps bithastigheter, men är föremål för förlust av sekventiell kodning av redan komprimerat innehåll, dock är det svårt att höra några skillnader med originalet på iOS med en bithastighet på 256 kbps även med flera sekventiella kodningar; med enkel kodning, till exempel MP3 320 kbps till AAC 256 kbps, kan förluster försummas.
Som med andra Bluetooth-codecs avkodas all musik först och kodas sedan av codec. När du lyssnar på musik i AAC-format avkodas den först av operativsystemet och kodas sedan till AAC igen för överföring via Bluetooth. Detta är nödvändigt för att blanda flera ljudströmmar, som musik och meddelanden om nya meddelanden. iOS är inget undantag. På Internet kan du hitta många påståenden om att på iOS inte omkodas musik i AAC-format när den överförs via Bluetooth, vilket inte är sant.

MP1/2/3

Codecs i MPEG-1/2 Part 3-familjen består av den välkända och allmänt använda MP3, den mindre vanliga MP2 (används främst i digital-TV och radio), och den helt okända MP1.

De gamla MP1- och MP2-codecna stöds inte alls: jag kunde inte hitta några hörlurar eller Bluetooth-stack som skulle koda eller avkoda dem.
MP3-avkodning stöds av vissa hörlurar, men kodning stöds inte på någon modern operativsystemstack. Det verkar som att tredjeparts BlueSoleil-stacken för Windows kan koda till MP3 om du manuellt ändrar konfigurationsfilen, men för mig leder installationen till BSoD på Windows 10. Slutsats - codecen kan faktiskt inte användas för Bluetooth-ljud.
Tidigare, 2006-2008, innan A2DP-standarden spreds i enheter, lyssnade folk på MP3-musik på Nokia BH-501-headsetet genom programmet MSI BluePlayer, som var tillgängligt på Symbian och Windows Mobile. På den tiden tillät OS-arkitekturen för smartphones åtkomst till många lågnivåfunktioner, och på Windows Mobile var det till och med möjligt att installera Bluetooth-stackar från tredje part.

Det sista patentet för MP3-codec har löpt ut, användningen av codec kräver inga licensavgifter sedan 23 april 2017.

Om det längsta patentet som nämns i ovan nämnda referenser tas som en åtgärd, så blev MP3-teknologin patentfri i USA den 16 april 2017 när US Patent 6,009,399 XNUMX XNUMX, som innehas av och administreras av Technicolor, löpte ut.

Källa: www.iis.fraunhofer.de/en/ff/amm/prod/audiocodec/audiocodecs/mp3.html

Samplingsfrekvens
Bithastighet
Stöd för kodning
Avkodningsstöd

16 - 48 kHz
8 - 320 kbps
Stöds inte någonstans
Vissa ljudenheter (hårdvara)

LDAC

En ny och aktivt marknadsförd "Hi-Res"-codec från Sony, som stöder samplingshastigheter upp till 96 kHz och 24-bitars bithastighet, med bithastigheter upp till 990 kbps. Den annonseras som en audiofil codec, som en ersättning för befintliga Bluetooth-codec. Den har funktionen för adaptiv bithastighetsjustering, beroende på radiosändningsförhållanden.

LDAC-kodare (libldac) ingår i standardpaketet för Android, så kodning stöds på alla Android-smarttelefoner som börjar med OS-version 8. Det finns inga fritt tillgängliga programvaruavkodare, codec-specifikationen är inte tillgänglig för allmänheten, men vid första anblicken på kodaren liknar codecens interna struktur ATRAC9 - Sonys codec som används i PlayStation 4 och Vita: båda fungerar i frekvensdomänen, använder en modifierad diskret cosinustransform (MDCT) och komprimering med Huffman-algoritmen.

LDAC-stöd tillhandahålls nästan uteslutande av hörlurar från Sony. Möjligheten att avkoda LDAC finns ibland på hörlurar och DAC från andra tillverkare, men mycket sällan.

Samplingsfrekvens
Bithastighet
Stöd för kodning
Avkodningsstöd

44.1 - 96 kHz
303/606/909 kbit/s (för 44.1 och 88.2 kHz), 330/660/990 kbit/s (för 48 och 96 kHz)
Android 8 +
Vissa Sony-hörlurar och vissa enheter från andra tillverkare (hårdvara)

Marknadsföring av LDAC som en Hi-Res codec skadar dess tekniska komponent: det är dumt att spendera bithastighet på att sända frekvenser som är ohörbara för det mänskliga örat och öka bitdjupet, medan det inte räcker för att sända CD-kvalitet (44.1/16) utan förlust . Lyckligtvis har codec två driftslägen: CD-ljudöverföring och Hi-Res-ljudöverföring. I det första fallet sänds endast 44.1 kHz/16 bitar över luften.

Eftersom en mjukvaru-LDAC-avkodare inte är fritt tillgänglig är det omöjligt att testa codec utan ytterligare enheter som avkodar LDAC. Enligt resultaten av LDAC-testet på en DAC med dess stöd, som SoundGuys.coms ingenjörer kopplade upp via en digital utgång och spelade in utgående ljud på testsignaler, ger LDAC 660 och 990 kbps i CD-kvalitetsläge en signal-till- brusförhållandet något bättre än för aptX HD.

Ljud via Bluetooth: maximal information om profiler, codecs och enheter
Källa: www.soundguys.com/ldac-ultimate-bluetooth-guide-20026

LDAC stöder även dynamiska bithastigheter utanför etablerade profiler - från 138 kbps till 990 kbps, men så vitt jag kan säga använder Android bara de standardiserade profilerna 303/606/909 och 330/660/990 kbps.

Andra codecs

Andra A2DP-codecs används inte i stor utsträckning. Deras stöd är antingen nästan helt frånvarande eller tillgängligt endast på vissa modeller av hörlurar och smartphones.
ATRAC-codec standardiserad i A2DP har aldrig använts som en Bluetooth-codec ens av Sony själva, Samsung HD, Samsung Scalable och Samsung UHQ-BT-codec har mycket begränsat stöd från sändnings- och mottagningsenheter, och HWA LHDC är för nytt och stöds endast tre (?) enheter.

Codec-stöd för ljudenheter

Alla tillverkare publicerar inte korrekt information om de codecs som stöds av vissa trådlösa hörlurar, högtalare, mottagare eller sändare. Ibland händer det att stöd för en viss codec endast är för överföring, men inte för mottagning (relevant för kombinerade sändare-mottagare), även om tillverkaren helt enkelt förklarar "support", utan anteckningar (jag antar att separat licensiering av kodare och avkodare för vissa codecs är skyldiga till detta). I de billigaste enheterna kanske du inte hittar det deklarerade aptX-stödet alls.

Tyvärr visar gränssnitten för de flesta operativsystem inte den codec som används någonstans. Information om detta är endast tillgänglig i Android, från och med version 8, och macOS. Men även i dessa operativsystem kommer endast de codecs som stöds av både telefonen/datorn och hörlurarna att visas.

Hur kan du ta reda på vilka codecs din enhet stöder? Spela in och analysera trafikdump med A2DP-förhandlingsparametrar!
Detta kan göras på Linux, macOS och Android. På Linux kan du använda Wireshark eller hcidump, på macOS kan du använda Bluetooth Explorer, och på Android kan du använda standardfunktionen för Bluetooth HCI-dumpssparning, som finns i utvecklarverktygen. Du kommer att få en dump i btsnoop-format, som kan laddas in i Wireshark-analysatorn.
Observera: en korrekt dump kan endast erhållas genom att ansluta från din telefon/dator till hörlurar/högtalare (oavsett hur roligt det kan låta)! Hörlurarna kan oberoende upprätta en anslutning till telefonen, i vilket fall de kommer att begära en lista med codecs från telefonen, och inte vice versa. För att säkerställa att rätt dump spelas in, koppla först bort enheten och koppla sedan ihop telefonen med hörlurarna medan du spelar in dumpningen.

Använd följande visningsfilter för att filtrera bort irrelevant trafik:

btavdtp.signal_id

Som ett resultat bör du se något liknande detta:
Ljud via Bluetooth: maximal information om profiler, codecs och enheter

Du kan klicka på varje objekt i kommandot GetCapabilities för att se de detaljerade egenskaperna hos codec.
Ljud via Bluetooth: maximal information om profiler, codecs och enheter

Wireshark känner inte till alla codec-identifierare, så vissa codecs måste dekrypteras manuellt, titta på identifierartabellen nedan:

Mandatory:
0x00 - SBC

Optional:
0x01 - MPEG-1,2 (aka MP3)
0x02 - MPEG-2,4 (aka AAC)
0x04 - ATRAC

Vendor specific:
0xFF 0x004F 0x01   - aptX
0xFF 0x00D7 0x24   - aptX HD
0xFF 0x000A 0x02   - aptX Low Latency
0xFF 0x00D7 0x02   - aptX Low Latency
0xFF 0x000A 0x01   - FastStream
0xFF 0x012D 0xAA   - LDAC
0xFF 0x0075 0x0102 - Samsung HD
0xFF 0x0075 0x0103 - Samsung Scalable Codec
0xFF 0x053A 0x484C - Savitech LHDC

0xFF 0x000A 0x0104 - The CSR True Wireless Stereo v3 Codec ID for AAC
0xFF 0x000A 0x0105 - The CSR True Wireless Stereo v3 Codec ID for MP3
0xFF 0x000A 0x0106 - The CSR True Wireless Stereo v3 Codec ID for aptX

För att inte analysera dumpningar manuellt gjorde jag en tjänst som analyserar allt automatiskt: btcodecs.valdikss.org.ru

Jämförelse av codecs. Vilken codec är bättre?

Varje codec har sina egna fördelar och nackdelar.
aptX och aptX HD använder hårdkodade profiler som inte kan ändras utan att modifiera kodaren och avkodaren. Varken telefontillverkaren eller hörlurstillverkaren kan ändra bithastighets- eller aptX-kodningsfaktorerna. Ägaren av codec, Qualcomm, tillhandahåller en referenskodare i form av ett bibliotek. Dessa fakta är styrkan med aptX - du vet i förväg vilken ljudkvalitet du kommer att få, utan några "men".

SBC, däremot, har många konfigurerbara parametrar, dynamisk bithastighet (kodaren kan minska bitpoolparametern om etern är upptagna), och har inga hårdkodade profiler, bara den rekommenderade "medelkvalitet" och "hög kvalitet" som var läggs till A2DP-specifikationen 2003 år. "Hög kvalitet" är inte längre så hög med dagens standarder, och de flesta Bluetooth-stackar tillåter dig inte att använda parametrar bättre än profilen "hög kvalitet", även om det inte finns några tekniska begränsningar för detta.
Bluetooth SIG har ingen referens SBC-kodare som bibliotek, och tillverkarna implementerar det själva.
Det här är svagheterna med SBC - det är aldrig klart i förväg vilken ljudkvalitet man kan förvänta sig av en viss enhet. SBC kan producera ljud av både låg och mycket hög kvalitet, men det senare är ouppnåeligt utan att inaktivera eller kringgå de konstgjorda begränsningarna för Bluetooth-stackar.

Situationen med AAC är tvetydig: å ena sidan bör codecen teoretiskt producera kvalitet som inte kan skiljas från originalet, men i praktiken, att döma av testerna från SoundGuys-laboratoriet på olika Android-enheter, är detta inte bekräftat. Troligtvis ligger felet i ljudkodare för hårdvara av låg kvalitet inbyggda i olika telefonchipset. Det är vettigt att bara använda AAC på Apple-enheter och på Android för att begränsa det till aptX och LDAC.

Hårdvara som stöder alternativa codecs tenderar att vara av högre kvalitet, helt enkelt för att det för mycket billiga enheter av låg kvalitet inte är meningsfullt att betala licensavgifter för att använda dessa codecs. I mina tester låter SBC väldigt bra på kvalitetsutrustning.

Jag gjorde en webbtjänst som kodar ljud till SBC, aptX och aptX HD i realtid, direkt i webbläsaren. Med den kan du testa dessa ljudkodekar utan att faktiskt överföra ljud via Bluetooth, på alla trådbundna hörlurar, högtalare och din favoritmusik, och även ändra kodningsparametrar direkt medan du spelar ljud:
btcodecs.valdikss.org.ru/sbc-encoder
Tjänsten använder SBC-kodningsbiblioteken från BlueZ-projektet och libopenaptx från ffmpeg, som är kompilerade till WebAssembly och JavaScript från C, via emscripten, för att köras i webbläsaren. Vem kunde drömma om en sådan framtid!

Så här ser det ut:

Lägg märke till hur brusnivån ändras efter 20 kHz för olika codecs. Den ursprungliga MP3-filen innehåller inte frekvenser över 20 kHz.

Prova att byta codec och se om du hör skillnaden mellan originalet, SBC 53 Joint Stereo (standard och vanligaste profilen) och aptX/aptX HD.

Jag kan höra skillnaden mellan codecs i hörlurar!

Personer som inte hör skillnaden mellan codecs under testning via en webbtjänst hävdar att de hör det när de lyssnar på musik i trådlösa hörlurar. Tyvärr, detta är inte ett skämt eller en placeboeffekt: skillnaden är verkligen hörbar, men den orsakas inte av skillnader codecs.

De allra flesta Bluetooth-ljudkretsar som används i trådlösa mottagningsenheter är utrustade med en Digital Signal Processor (DSP), som implementerar en equalizer, compander, stereoexpander och andra saker som är utformade för att förbättra (eller ändra) ljudet. Tillverkare av Bluetooth-utrustning kan konfigurera DSP för varje codec separat, och när man växlar mellan codecs, kommer lyssnaren att tro att de hör en skillnad i funktion av codecs, när de i verkligheten lyssnar på olika DSP-inställningar.

Ljud via Bluetooth: maximal information om profiler, codecs och enheter
DSP Kalimba ljudbehandlingspipeline i chips tillverkad av CSR/Qualcomm

Ljud via Bluetooth: maximal information om profiler, codecs och enheter
Aktivera olika DSP-funktioner för varje codec och mata ut separat

Vissa premiumenheter kommer med programvara som låter dig anpassa DSP-inställningar, men de flesta billigare hörlurar gör det inte, och användare kan inte stänga av efterbehandling av ljud manuellt.

Funktionella egenskaper hos enheter

Den moderna versionen av A2DP-standarden har "absolut volymkontroll" funktion — enhetsvolymkontroll med hjälp av speciella kommandon från AVRCP-protokollet, som reglerar förstärkningen av utgångssteget, istället för att programmässigt minska volymen på ljudströmmen. Om när du ändrar volymen på dina hörlurar, ändringen inte synkroniseras med volymen på din telefon, stöder inte dina hörlurar eller telefon den här funktionen. I det här fallet är det vettigt att alltid lyssna på musik med maximal volym på telefonen, justera den faktiska volymen med hörlursknapparna - i det här fallet blir signal-brusförhållandet bättre och ljudkvaliteten måste vara ovan.
I verkligheten finns det tråkiga situationer. På mina RealForce OverDrive D1-hörlurar för SBC är en stark compander påslagen, och att öka volymen leder till en ökning av nivån av tysta ljud, medan volymen på höga ljud inte ändras (signalen komprimeras). På grund av detta måste du ställa in volymen på datorn till ungefär hälften, i så fall finns det praktiskt taget ingen komprimeringseffekt.
Enligt mina observationer stödjer alla hörlurar med extra codecs den absoluta volymkontrollfunktionen, tydligen är detta ett av kraven för codec-certifiering.

Vissa hörlurar stöder ansluta två enheter samtidigt. Detta gör att du till exempel kan lyssna på musik från din dator och ta emot samtal från din telefon. Du bör dock vara medveten om att i detta läge är alternativa codecs inaktiverade och endast SBC används.

AVDTP 1.3 Funktion för fördröjd rapportering låter hörlurarna kommunicera fördröjningen till den sändande enheten där ljudet faktiskt spelas. Detta gör att du kan justera synkroniseringen av ljud med video medan du tittar på videofiler: om det finns problem med radioöverföring kommer ljudet inte att släpa efter videon, utan tvärtom kommer videon att saktas ner av videospelaren tills ljud och bild synkroniseras igen.
Funktionen stöds av många hörlurar, Android 9+ och Linux med PulseAudio 12.0+. Jag är inte medveten om stöd för den här funktionen på andra plattformar.

Dubbelriktad kommunikation via Bluetooth. Röstöverföring.

För röstöverföring i Bluetooth används Synchronous Connection Oriented (SCO) - synkron överföring med preliminär förhandling av anslutningen. Läget låter dig sända ljud och röst strikt i ordning, med symmetriska sändnings- och mottagningshastigheter, utan att vänta på bekräftelse av överföring och återsända paket. Detta minskar den totala fördröjningen av ljudöverföring över radiokanalen, men lägger allvarliga begränsningar på mängden data som sänds per tidsenhet och påverkar kvaliteten negativt.
När detta läge används sänds både röst och ljud med samma kvalitet.
Tyvärr, från och med 2019, är röstkvaliteten över Bluetooth fortfarande dålig, och det är oklart varför Bluetooth SIG inte gör något åt ​​det.

CVSD

Den grundläggande CVSD-talkodeken standardiserades 2002 och stöds av alla dubbelriktade Bluetooth-kommunikationsenheter. Den ger ljudöverföring med en samplingsfrekvens på 8 kHz, vilket motsvarar kvaliteten på konventionell trådbunden telefoni.

Ett exempel på en inspelning i denna codec.

mSBC

Den extra mSBC-codecen standardiserades 2009, och 2010 dök det redan upp chips som använde den för röstöverföring. mSBC stöds brett av olika enheter.
Detta är inte en oberoende codec, utan en vanlig SBC från A2DP-standarden, med en fast kodningsprofil: 16 kHz, mono, bitpool 26.

Ett exempel på en inspelning i denna codec.

Inte briljant, men mycket bättre än CVSD, men det är fortfarande irriterande att använda för onlinekommunikation, speciellt när du använder hörlurar för att kommunicera i spelet - spelets ljud kommer också att sändas med en samplingshastighet på 16 kHz.

FastStreamCSR-företaget bestämde sig för att utveckla idén om att använda SBC. För att komma runt begränsningarna för SCO-protokollet och använda högre bithastigheter gick CSR en annan väg – de introducerade stöd för tvåvägs SBC-ljud i A2DP envägsljudöverföringsstandard, standardiserade kodningsprofiler och kallade det "FastStream".

FastStream sänder stereoljud i 44.1 eller 48 kHz med en bithastighet på 212 kbps till högtalarna, och mono, 16 kHz, med en bithastighet på 72 kbps används för att överföra ljud från mikrofonen (något bättre än mSBC). Sådana parametrar är mycket bättre lämpade för kommunikation i onlinespel - ljudet av spelet och samtalspartnerna kommer att vara av hög kvalitet.

Ett exempel på en inspelning i denna codec (+ ljud från mikrofonen, samma som mSBC).

Företaget kom med en intressant krycka, men på grund av att den strider mot A2DP-standarden stöds den endast i vissa av företagets sändare (som fungerar som ett USB-ljudkort, inte en Bluetooth-enhet), men det gör det inte få stöd i Bluetooth-stackar, även om antalet hörlurar med FastStream-stöd inte är så litet.

För närvarande är det bara FastStream-stöd i operativsystemet som en patch för Linux PulseAudio från utvecklaren Pali Rohár, som inte ingår i programmets huvudgren.

aptX låg latens

Till din förvåning stöder aptX Low Latency också dubbelriktat ljud, och implementerar samma princip som FastStream.
Det är inte möjligt att använda den här funktionen hos codec någonstans - det finns inget stöd för Low Latency-avkodning i något operativsystem eller i någon Bluetooth-stack som jag känner till.

Bluetooth 5, Classic och Low Energy

Det har varit mycket förvirring kring Bluetooth-specifikationer och -versioner på grund av närvaron av två inkompatibla standarder under samma varumärke, som båda används i stor utsträckning för olika ändamål.

Det finns två olika, inkompatibla Bluetooth-protokoll: Bluetooth Classic och Bluetooth Low Energy (LE, även känd som Bluetooth Smart). Det finns också ett tredje protokoll, Bluetooth High Speed, men det är inte utbrett och används inte i hushållsapparater.

Från och med Bluetooth 4.0 gällde ändringar i specifikationen främst Bluetooth Low Energy, och Classic-versionen fick endast mindre förbättringar.

Lista över ändringar mellan Bluetooth 4.2 och Bluetooth 5:

9 ÄNDRINGAR FRÅN v4.2 TILL 5.0

9.1 NYA FUNKTIONER

Flera nya funktioner introduceras i Bluetooth Core Specification 5.0 Release. De viktigaste förbättringsområdena är:
• Slot Availability Mask (SAM)
• 2 Msym/s PHY för LE
•LE Long Range
• High Duty Cycle, icke-anslutbar reklam
• LE Advertising Extensions
• LE Channel Selection Algoritm #2
9.1.1 Funktioner tillagda i CSA5 - Integrerad i v5.0
•Högre uteffekt

Källa: www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=421043 (sida 291)

Endast en förändring påverkade den klassiska versionen inom ramen för Bluetooth 5-specifikationen: de lade till stöd för Slot Availability Mask (SAM)-teknik, designad för att förbättra radiosändningsseparationen. Alla andra ändringar påverkar endast Bluetooth LE (och även högre uteffekt).

Alla Ljudenheter använder endast Bluetooth Classic. Det är omöjligt att ansluta hörlurar och högtalare via Bluetooth Low Energy: det finns ingen standard för att överföra ljud med LE. A2DP-standarden, som används för att överföra högkvalitativt ljud, fungerar endast via Bluetooth Classic, och det finns ingen analog i LE.

Slutsats - det är ingen mening att köpa ljudenheter med Bluetooth 5 bara på grund av den nya versionen av protokollet. Bluetooth 4.0/4.1/4.2 i samband med ljudöverföring kommer att fungera exakt likadant.
Om tillkännagivandet av nya hörlurar nämner fördubblad räckvidd och minskad strömförbrukning tack vare Bluetooth 5, bör du veta att de antingen inte förstår det själva eller vilseleder dig. Inte konstigt, eftersom även tillverkare av Bluetooth-chips i sina meddelanden är förvirrade över skillnaderna mellan den nya versionen av standarden, och vissa Bluetooth 5-chips stöder den femte versionen endast för LE och använder 4.2 för Classic.

Ljudöverföringsfördröjning

Mängden fördröjning (fördröjning) i ljud beror på många faktorer: storleken på bufferten i ljudstacken, i Bluetooth-stacken och i själva den trådlösa uppspelningsenheten, och den algoritmiska fördröjningen av codec.

Latensen för enkla codecs som SBC, aptX och aptX HD är mycket liten, 3-6 ms, vilket kan försummas, men komplexa codecs som AAC och LDAC kan orsaka märkbar fördröjning. AAC-algoritmens latens för 44.1 kHz är 60 ms. LDAC - cirka 30 ms (baserat på en grov analys av källkoden. Jag kan ha fel, men inte mycket.)

Den resulterande latensen beror mycket på uppspelningsenheten, dess chipset och buffert. Under tester fick jag en spridning på 150 till 250 ms på olika enheter (med SBC-codec). Om vi ​​antar att enheter som stöder ytterligare codecs aptX, AAC och LDAC använder högkvalitativa komponenter och en liten buffertstorlek, får vi följande typiska latenser:

SBC: 150-250ms
aptX: 130-180 ms
AAC: 190-240 ms
LDAC: 160-210 ms

Låt mig påminna dig: aptX Low Latency stöds inte i operativsystem, varför lägre latens endast kan erhållas med en kombination av sändare+mottagare eller sändare+hörlurar/högtalare, och alla enheter måste stödja denna codec.

Problem med Bluetooth-enheter, certifiering och logotyp

Hur skiljer man en högkvalitativ ljudenhet från ett billigt hantverk? Utseendemässigt, först och främst!

För billiga kinesiska hörlurar, högtalare och mottagare:

  1. Ordet "Bluetooth" saknas på lådan och enheten, "Wireless" och "BT" används oftast
  2. Bluetooth-logotyp saknas Ljud via Bluetooth: maximal information om profiler, codecs och enheter på lådan eller enheten
  3. Ingen blå blinkande LED

Frånvaron av dessa element indikerar att enheten inte har certifierats, vilket innebär att den är potentiellt av låg kvalitet och problematisk. Till exempel är Bluedio-hörlurar inte Bluetooth-certifierade och överensstämmer inte helt med A2DP-specifikationen. De skulle inte ha klarat certifieringen.

Låt oss överväga flera enheter och lådor från dem:
Ljud via Bluetooth: maximal information om profiler, codecs och enheter

Ljud via Bluetooth: maximal information om profiler, codecs och enheter

Ljud via Bluetooth: maximal information om profiler, codecs och enheter

Dessa är alla ocertifierade enheter. Instruktionerna kan innehålla en logotyp och namnet på Bluetooth-tekniken, men det viktigaste är att de finns på kartongen och/eller själva enheten.

Om dina hörlurar eller högtalare säger "Ze bluetooth dewise är ansluten framgångsrikt", indikerar detta inte heller deras kvalitet:

Slutsats

Kan Bluetooth helt ersätta trådbundna hörlurar och headset? Det är kapabelt, men till priset av dålig samtalskvalitet, ökad ljudlatens som kan vara irriterande i spel och en mängd proprietära codecs som kräver licensavgifter och ökar den slutliga kostnaden för både smartphones och hörlurar.

Marknadsföringen av alternativa codecs är mycket stark: aptX och LDAC presenteras som en efterlängtad ersättning för den "föråldrade och dåliga" SBC, som inte är så dålig som folk tror att den är.

Som det visade sig kan de konstgjorda begränsningarna för Bluetooth-stackar på SBC-bithastigheten kringgås, så att SBC inte kommer att vara sämre än aptX HD. Jag tog initiativet i egna händer och gjorde en patch för LineageOS firmware: Vi modifierar Bluetooth-stacken för att förbättra ljudet på hörlurar utan AAC, aptX och LDAC codecs

Mer information finns på hemsidorna Ljud killar и SoundExpert.

bonus: SBC referenskodare, A2DP bitströmsinformation och testfiler. Denna fil brukade publiceras offentligt på Bluetooth-webbplatsen, men är nu endast tillgänglig för medlemmar av Bluetooth SIG.

Källa: will.com

Lägg en kommentar