Audio via Bluetooth: massimi dettagli su profili, codec e dispositivi

Audio via Bluetooth: massimi dettagli su profili, codec e dispositivi

A causa della produzione in serie di smartphone senza jack audio da 3.5 mm, le cuffie Bluetooth wireless sono diventate per molti il ​​modo principale per ascoltare musica e comunicare in modalità auricolare.
I produttori di dispositivi wireless non sempre scrivono specifiche dettagliate del prodotto e gli articoli sull'audio Bluetooth su Internet sono contraddittori, a volte errati, non parlano di tutte le funzionalità e spesso copiano le stesse informazioni che non corrispondono alla realtà.
Proviamo a comprendere il protocollo, le capacità degli stack del sistema operativo Bluetooth, delle cuffie e degli altoparlanti, dei codec Bluetooth per musica e parlato, scopriamo cosa influenza la qualità del suono trasmesso e della latenza, impariamo come raccogliere e decodificare informazioni sui codec supportati e altri dispositivi capacità.

TL; DR:

  • SBC: codec normale
  • Le cuffie hanno il proprio equalizzatore e post-elaborazione separatamente per ciascun codec
  • aptX non è buono come pubblicizzato
  • LDAC sta commercializzando stronzate
  • La qualità delle chiamate è ancora scarsa
  • Puoi incorporare codificatori audio C nel tuo browser compilandoli in WebAssembly tramite emscripten e non rallenteranno molto.

Musica tramite Bluetooth

La componente funzionale del Bluetooth è determinata dai profili: specifiche di funzioni specifiche. Lo streaming musicale Bluetooth utilizza un profilo di trasmissione audio unidirezionale A2DP di alta qualità. Lo standard A2DP è stato adottato nel 2003 e da allora non è cambiato in modo significativo.
All'interno del profilo sono standardizzati 1 codec obbligatorio di bassa complessità computazionale SBC, creato appositamente per Bluetooth, e 3 aggiuntivi. È anche possibile utilizzare codec non documentati della propria implementazione.

Da giugno 2019 lo siamo nel fumetto xkcd con 14 codec A2DP:

  • SBC ← standardizzato in A2DP, supportato da tutti i dispositivi
  • MPEG-1/2 Layer 1/2/3 ← standardizzato in A2DP: ben noto MP3, utilizzato nella TV digitale MP2, e sconosciuto MP1
  • MPEG-2/4AAC ← standardizzato in A2DP
  • ATTRARRE ← vecchio codec Sony, standardizzato in A2DP
  • LDAC ← nuovo codec di Sony
  • aptX ← codec del 1988
  • aptX HD ← come aptX, solo con diverse opzioni di codifica
  • aptX a bassa latenza ← codec completamente diverso, nessuna implementazione software
  • aptX adattivo ← un altro codec di Qualcomm
  • Faststream ← pseudo codec, modifica SBC bidirezionale
  • HWA LHDC ← nuovo codec di Huawei
  • SamsungHD ← supportato da 2 dispositivi
  • Samsung scalabile ← supportato da 2 dispositivi
  • Samsung UHQ-BT ← supportato da 3 dispositivi

Perché abbiamo bisogno dei codec, vi chiederete, quando il Bluetooth ha l'EDR, che consente di trasferire dati a velocità di 2 e 3 Mbit/s, e per PCM a 16 bit a due canali non compressi sono sufficienti 1.4 Mbit/s?

Trasferimento dati tramite Bluetooth

Esistono due tipi di trasferimento dati in Bluetooth: Asynchronous Connection Less (ACL) per il trasferimento asincrono senza creazione di connessione e Synchronous Connection Oriented (SCO), per il trasferimento sincrono con negoziazione preliminare della connessione.
La trasmissione viene effettuata utilizzando uno schema di divisione del tempo e selezionando separatamente un canale di trasmissione per ciascun pacchetto (Frequency-Hop/Time-Division-Duplex, FH/TDD), per il quale il tempo viene suddiviso in intervalli di 625 microsecondi detti slot. Uno dei dispositivi trasmette negli slot con numeri pari, l'altro negli slot con numeri dispari. Il pacchetto trasmesso può occupare 1, 3 o 5 slot, a seconda della dimensione dei dati e del tipo di trasmissione impostata, in questo caso la trasmissione da parte di un dispositivo viene effettuata negli slot pari e dispari fino alla fine della trasmissione. In totale, è possibile ricevere e inviare fino a 1600 pacchetti al secondo, se ciascuno di essi occupa 1 slot ed entrambi i dispositivi trasmettono e ricevono qualcosa senza fermarsi.

2 e 3 Mbit/s per EDR, che possono essere trovati negli annunci e sul sito Web Bluetooth, rappresentano la velocità di trasferimento massima del canale di tutti i dati in totale (comprese le intestazioni tecniche di tutti i protocolli in cui i dati devono essere incapsulati), in due direzioni contemporaneamente. La velocità effettiva di trasferimento dei dati varierà notevolmente.

Per trasmettere la musica si utilizza un metodo asincrono, utilizzando quasi sempre pacchetti come 2-DH5 e 3-DH5, che trasportano una quantità massima di dati in modalità EDR rispettivamente di 2 Mbit/s e 3 Mbit/s e occupano 5 tempi -condivisione degli slot.

Rappresentazione schematica della trasmissione utilizzando 5 slot da un dispositivo e 1 slot da un altro (DH5/DH1):
Audio via Bluetooth: massimi dettagli su profili, codec e dispositivi

A causa del principio della divisione temporale delle onde radio, siamo costretti ad attendere un intervallo di tempo di 625 microsecondi dopo aver trasmesso un pacchetto se il secondo dispositivo non ci trasmette nulla o trasmette un piccolo pacchetto, e più tempo se il secondo dispositivo trasmette in grandi pacchetti. Se al telefono è collegato più di un dispositivo (ad esempio cuffie, orologi e braccialetto fitness), il tempo di trasferimento viene condiviso tra tutti.

La necessità di incapsulare l'audio in protocolli di trasporto speciali L2CAP e AVDTP richiede 16 byte dalla quantità massima possibile di carico utile audio trasmesso.

Tipo di pacchetto
Numero di slot
Massimo. numero di byte nel pacchetto
Massimo. numero di byte del payload A2DP
Massimo. Velocità in bit del carico utile A2DP

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 e 1429 kbps non sono sicuramente sufficienti per trasmettere audio non compresso in condizioni reali, con la rumorosa gamma di 2.4 GHz e la necessità di trasmettere dati di servizio. EDR 3 Mbit/s richiede potenza di trasmissione e rumore nell'aria, quindi anche nella modalità 3-DH5 una trasmissione PCM confortevole è impossibile, ci saranno sempre interruzioni di breve durata e tutto funzionerà solo a una distanza di paio di metri.
In pratica, anche un flusso audio a 990 kbit/s (LDAC 990 kbit/s) è difficile da trasmettere.

Torniamo ai codec.

SBC

Codec richiesto per tutti i dispositivi che supportano lo standard A2DP. Il codec migliore e peggiore allo stesso tempo.

Frequenza di campionamento
capacità
Velocità in bit
Supporto per la codifica
Supporto per la decodifica

16, 32, 44.1, 48kHz
16 bit
10-1500 kbps
Tutti i dispositivi
Tutti i dispositivi

SBC è un codec semplice e computazionalmente veloce, con un modello psicoacustico primitivo (viene applicato solo il mascheramento dei suoni deboli), utilizzando la modulazione adattiva del codice a impulsi (APCM).
La specifica A2DP consiglia due profili da utilizzare: qualità media e qualità alta.
Audio via Bluetooth: massimi dettagli su profili, codec e dispositivi

Il codec ha molte impostazioni che consentono di controllare il ritardo algoritmico, il numero di campioni in un blocco, l'algoritmo di distribuzione dei bit, ma quasi ovunque vengono utilizzati gli stessi parametri consigliati nelle specifiche: Joint Stereo, 8 bande di frequenza, 16 blocchi in un fotogramma audio, metodo di distribuzione dei bit del volume.
SBC supporta la modifica dinamica del parametro Bitpool, che influisce direttamente sul bitrate. Se le onde radio sono intasate, i pacchetti vengono persi o i dispositivi si trovano a grandi distanze, la sorgente audio potrebbe ridurre il Bitpool finché la comunicazione non ritorna alla normalità.

La maggior parte dei produttori di cuffie imposta il valore Bitpool massimo su 53, che limita il bitrate a 328 kilobit al secondo quando si utilizza il profilo consigliato.
Anche se il produttore delle cuffie ha impostato il valore Bitpool massimo superiore a 53 (tali modelli si trovano, ad esempio: Beats Solo³, JBL Everest Elite 750NC, Apple AirPods, presenti anche su alcuni ricevitori e unità principali dell'auto), la maggior parte dei sistemi operativi non consentirà l'uso di bitrate aumentati a causa dell'impostazione del limite di valore interno negli stack Bluetooth.
Inoltre, alcuni produttori impostano il valore massimo di Bitpool su un valore basso per alcuni dispositivi. Ad esempio, per Bluedio T è 39, per Samsung Gear IconX è 37, il che dà una scarsa qualità del suono.

Restrizioni artificiali da parte degli sviluppatori di stack Bluetooth sono probabilmente dovute all'incompatibilità di alcuni dispositivi con valori Bitpool elevati o profili atipici, anche se ne hanno segnalato il supporto, e a test insufficienti durante la certificazione. Era più facile per gli autori degli stack Bluetooth limitarsi a concordare il profilo consigliato, piuttosto che creare database di dispositivi errati (anche se ora lo fanno per altre funzioni che funzionano in modo errato).

SBC assegna dinamicamente i bit di quantizzazione alle bande di frequenza dal basso all'alto, con pesi diversi. Se tutto il bitrate è stato utilizzato per le frequenze basse e medie, le frequenze alte verranno “tagliate” (ci sarà invece silenzio).

Esempio SBC 328 kbps. In alto c'è l'originale, in basso c'è l'SBC, che passa periodicamente da una traccia all'altra. L'audio nel file video utilizza il codec di compressione senza perdita FLAC. L'uso di FLAC in un contenitore mp4 non è ufficialmente standardizzato, quindi non è garantito che il tuo browser lo riproduca, ma dovrebbe funzionare nelle ultime versioni di Chrome e Firefox desktop. Se non hai l'audio, puoi scaricare il file e aprirlo in un lettore video completo.
ZZ Top - Uomo vestito in modo elegante

Lo spettrogramma mostra il momento della commutazione: l'SBC taglia periodicamente i suoni deboli sopra i 17.5 kHz e non assegna alcun bit per la banda sopra i 20 kHz. Lo spettrogramma completo è disponibile facendo clic su (1.7 MB).
Audio via Bluetooth: massimi dettagli su profili, codec e dispositivi

Non sento alcuna differenza tra l'originale e SBC su questa traccia.

Prendiamo qualcosa di più nuovo e simuliamo l'audio che si otterrebbe utilizzando le cuffie Samsung Gear IconX con Bitpool 37 (sopra - il segnale originale, sotto - SBC 239 kbps, audio in FLAC).
Autoindulgenza insensata - Testimone

Sento un crepitio, un minore effetto stereo e uno sgradevole suono "clunking" nelle alte frequenze della voce.

Sebbene SBC sia un codec molto flessibile, può essere configurato per una bassa latenza, fornisce un'eccellente qualità audio a bitrate elevati (452+ kbps) ed è abbastanza buono per la maggior parte delle persone con qualità alta standard (328 kbps), poiché è lo standard A2DP non specifica profili fissi (ma fornisce solo raccomandazioni), gli sviluppatori di stack hanno imposto restrizioni artificiali su Bitpool, i parametri dell'audio trasmesso non vengono visualizzati nell'interfaccia utente e i produttori di cuffie sono liberi di definire le proprie impostazioni e mai indicare il valore Bitpool nelle specifiche tecniche del prodotto, codec diventato famoso per la sua bassa qualità del suono, sebbene questo non sia un problema con il codec in quanto tale.
Il parametro Bitpool influisce direttamente sul bitrate solo all'interno di un profilo. Lo stesso valore di Bitpool 53 può dare sia un bitrate di 328 kbps con il profilo High Quality consigliato, sia di 1212 kbps con Dual Channel e 4 bande di frequenza, motivo per cui gli autori del sistema operativo, oltre alle restrizioni su Bitpool, stabiliscono un limite e Velocità in bit. A mio avviso, questa situazione è dovuta a un difetto dello standard A2DP: era necessario negoziare il bitrate, non Bitpool.

Tabella di supporto per le funzionalità SBC in diversi sistemi operativi:

GA
Frequenze di campionamento supportate
Limite massimo Bitpool
Limite massimo Velocità in bit
Velocità in bit tipica
Regolazione dinamica di Bitpool

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

Linux (BlueZ + PulseAudio)
16, 32, 44.1, 48kHz
64 (per connessioni in entrata), 53 (per connessioni in uscita)
Senza limiti
328 kbps
✓*

MacOS High Sierra
44.1 кГц
64, predefinito 53***
sconosciuto
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

Blackberry OS 10
48 кГц
53
Senza limiti
328 kbps

* Bitpool diminuisce solo, ma non aumenta automaticamente, se le condizioni di trasferimento migliorano. Per ripristinare Bitpool è necessario interrompere la riproduzione, attendere un paio di secondi e riavviare l'audio.
** Il valore predefinito dipende dalle impostazioni dello stack specificate durante la compilazione del firmware. In Android 8/8.1 la frequenza è solo 44.1 kHz o 48 kHz, a seconda delle impostazioni durante la compilazione, nelle altre versioni sono supportati contemporaneamente 44.1 kHz e 48 kHz.
*** Il valore Bitpool può essere aumentato nel programma Bluetooth Explorer.

aptX e aptX HD

aptX è un codec semplice e computazionalmente veloce, senza psicoacustica, che utilizza la modulazione adattiva del codice differenziale dell'impulso (ADPCM). Apparso intorno al 1988 (data di deposito brevetto del febbraio 1988), prima del Bluetooth, veniva utilizzato principalmente nelle apparecchiature audio wireless professionali. Attualmente di proprietà di Qualcomm, richiede licenze e royalties. A partire dal 2014: 6000 dollari una tantum e ≈ 1 dollaro per dispositivo, per lotti fino a 10000 dispositivi (fonte, p. 16).
aptX e aptX HD sono lo stesso codec, con profili di codifica diversi.

Il codec ha un solo parametro: selezionare la frequenza di campionamento. C'è tuttavia la possibilità di scegliere il numero/modalità dei canali, ma in tutti i dispositivi da me conosciuti (oltre 70 pezzi) è supportato solo lo stereo.

codec
Frequenza di campionamento
capacità
Velocità in bit
Supporto per la codifica
Supporto per la decodifica

aptX
16, 32, 44.1, 48kHz
16 bit
128 / 256 / 352 / 384 kbps (a seconda della frequenza di campionamento)
Windows 10 (desktop e mobile), macOS, Android 4.4+/7*, Blackberry OS 10
Ampia gamma di dispositivi audio (hardware)

* Le versioni fino alla 7 richiedono la modifica dello stack Bluetooth. Il codec è supportato solo se il produttore del dispositivo Android ha concesso in licenza il codec a Qualcomm (se il sistema operativo dispone di librerie di codifica).

aptX divide l'audio in 4 bande di frequenza e le quantizza costantemente con lo stesso numero di bit: 8 bit per 0-5.5 kHz, 4 bit per 5.5-11 kHz, 2 bit per 11-16.5 kHz, 2 bit per 16.5-22 kHz ( valori per la frequenza di campionamento di 44.1 kHz).

Esempio di audio aptX (in alto - il segnale originale, in basso - aptX, spettrogrammi dei soli canali sinistri, suono in FLAC):

Gli alti diventavano un po' più rossi, ma non si sentiva la differenza.

A causa della distribuzione fissa dei bit di quantizzazione, il codec non può “spostare i bit” sulle frequenze che ne hanno più bisogno. A differenza di SBC, aptX non “taglierà” le frequenze, ma aggiungerà ad esse rumore di quantizzazione, riducendo la gamma dinamica dell'audio.

Non si deve dare per scontato che utilizzando, ad esempio, 2 bit per banda si riduca la gamma dinamica a 12 dB: ADPCM consente fino a 96 dB di gamma dinamica anche quando si utilizzano 2 bit di quantizzazione, ma solo per un determinato segnale.
ADPCM memorizza la differenza numerica tra il campione corrente e il campione successivo, invece di memorizzare il valore assoluto come in PCM. Ciò consente di ridurre i requisiti per il numero di bit necessari per memorizzare le stesse informazioni (senza perdite) o quasi le stesse (con un errore di arrotondamento relativamente piccolo). Per ridurre gli errori di arrotondamento vengono utilizzate le tabelle dei coefficienti.
Durante la creazione del codec, gli autori hanno calcolato i coefficienti ADPCM su una serie di file audio musicali. Più il segnale audio è vicino all'insieme musicale su cui sono state costruite le tavole, minori saranno gli errori di quantizzazione (rumore) creati da aptX.

Per questo motivo i test sintetici produrranno sempre risultati peggiori di quelli musicali. Ho realizzato un esempio sintetico speciale in cui aptX mostra scarsi risultati: un'onda sinusoidale con una frequenza di 12.4 kHz (sopra - il segnale originale, sotto - aptX. Audio in FLAC. Abbassa il volume!):

Grafico dello spettro:
Audio via Bluetooth: massimi dettagli su profili, codec e dispositivi

I rumori sono chiaramente udibili.

Tuttavia, se generi un'onda sinusoidale con un'ampiezza minore in modo che sia più silenziosa, anche il rumore diventerà più silenzioso, indicando un'ampia gamma dinamica:

Audio via Bluetooth: massimi dettagli su profili, codec e dispositivi

Per sentire la differenza tra il brano musicale originale e quello compresso, puoi invertire uno dei segnali e aggiungere i brani canale per canale. Questo approccio è, in generale, errato e non darebbe risultati sensati con codec più complessi, ma specificamente per ADPCM è abbastanza adatto.
Differenza tra originale e aptX
La differenza quadratica media dei segnali è al livello di -37.4 dB, che non è molto per una musica così compressa.

aptX HD

aptX HD non è un codec autonomo: è un profilo di codifica migliorato del codec aptX. Le modifiche hanno interessato il numero di bit assegnati per la codifica delle gamme di frequenza: 10 bit per 0-5.5 kHz, 6 bit per 5.5-11 kHz, 4 bit per 11-16.5 kHz, 4 bit per 16.5-22 kHz (cifre per 44.1 kHz) .

codec
Frequenza di campionamento
capacità
Velocità in bit
Supporto per la codifica
Supporto per la decodifica

aptX HD
16, 32, 44.1, 48kHz
24 bit
192 / 384 / 529 / 576 kbps (a seconda della frequenza di campionamento)
Android 8+*
Alcuni dispositivi audio (hardware)

* Le versioni fino alla 7 richiedono la modifica dello stack Bluetooth. Il codec è supportato solo se il produttore del dispositivo Android ha concesso in licenza il codec a Qualcomm (se il sistema operativo dispone di librerie di codifica).

Meno comune di aptX: apparentemente richiede licenze separate da Qualcomm e costi di licenza separati.

Ripetiamo l'esempio con un'onda sinusoidale a 12.4 kHz:
Audio via Bluetooth: massimi dettagli su profili, codec e dispositivi

Molto meglio di aptX, ma ancora un po' rumoroso.

aptX a bassa latenza

Un codec di Qualcomm che non ha nulla in comune con aptX standard e aptX HD, a giudicare dalle informazioni limitate delle persone coinvolte nel suo sviluppo. Progettato per la trasmissione audio interattiva a bassa latenza (film, giochi), in cui il ritardo audio non può essere regolato tramite software. Non sono note implementazioni software di codificatori e decodificatori; sono supportati esclusivamente da trasmettitori, ricevitori, cuffie e altoparlanti, ma non da smartphone e computer.

Frequenza di campionamento
Velocità in bit
Supporto per la codifica
Supporto per la decodifica

44.1 кГц
276/420 kbps
Alcuni trasmettitori (hardware)
Alcuni dispositivi audio (hardware)

AAC

AAC, o Advanced Audio Coding, è un codec computazionalmente complesso con un modello psicoacustico serio. Ampiamente utilizzato per l'audio su Internet, secondo in popolarità dopo MP3. Richiede licenze e royalty: $ 15000 una tantum (o $ 1000 per le aziende con meno di 15 dipendenti) + $ 0.98 per i primi 500000 dispositivi (fonte).
Il codec è standardizzato nelle specifiche MPEG-2 e MPEG-4 e, contrariamente a quanto si pensa erroneamente, non appartiene ad Apple.

Frequenza di campionamento
Velocità in bit
Supporto per la codifica
Supporto per la decodifica

8 - 96kHz
8 - 576 kbps (per stereo), 256 - 320 kbps (tipico per Bluetooth)
macOS, Android 7+*, iOS
Ampia gamma di dispositivi audio (hardware)

* solo su dispositivi i cui produttori hanno pagato i costi di licenza

iOS e macOS utilizzano il miglior codificatore AAC attuale di Apple per offrire la massima qualità audio possibile. Android utilizza il codificatore Fraunhofer FDK AAC di seconda qualità, ma può utilizzare vari hardware integrati nella piattaforma (SoC) con qualità di codifica sconosciuta. Secondo recenti test sul sito Web SoundGuys, la qualità della codifica AAC dei diversi telefoni Android varia notevolmente:
Audio via Bluetooth: massimi dettagli su profili, codec e dispositivi

La maggior parte dei dispositivi audio wireless ha un bitrate massimo di 320 kbps per AAC, alcuni supportano solo 256 kbps. Altri bitrate sono estremamente rari.
AAC fornisce una qualità eccellente con bitrate di 320 e 256 kbps, ma è soggetto a perdita della codifica sequenziale di contenuti già compressi, tuttavia, anche con diverse codifiche sequenziali è difficile sentire differenze con l'originale su iOS con un bitrate di 256 kbps; con una codifica singola, ad esempio da MP3 320 kbps a AAC 256 kbps, le perdite possono essere trascurate.
Come con altri codec Bluetooth, tutta la musica viene prima decodificata e poi codificata dal codec. Quando si ascolta la musica in formato AAC, questa viene prima decodificata dal sistema operativo, quindi nuovamente codificata in AAC per la trasmissione tramite Bluetooth. Ciò è necessario per mixare più flussi audio, come musica e notifiche di nuovi messaggi. iOS non fa eccezione. Su Internet puoi trovare molte affermazioni secondo cui su iOS la musica in formato AAC non viene transcodificata quando trasmessa tramite Bluetooth, il che non è vero.

MP1/2/3

I codec della famiglia MPEG-1/2 Parte 3 sono costituiti dal noto e ampiamente utilizzato MP3, dal meno comune MP2 (utilizzato principalmente nella TV e radio digitale) e dal completamente sconosciuto MP1.

I vecchi codec MP1 e MP2 non sono affatto supportati: non sono riuscito a trovare cuffie o stack Bluetooth in grado di codificarli o decodificarli.
La decodifica MP3 è supportata da alcune cuffie, ma la codifica non è supportata su nessuno stack di sistemi operativi moderni. Sembra che lo stack BlueSoleil di terze parti per Windows possa codificare in MP3 se si modifica manualmente il file di configurazione, ma per me l'installazione porta a BSoD su Windows 10. Conclusione: il codec in realtà non può essere utilizzato per l'audio Bluetooth.
In precedenza, nel 2006-2008, prima della diffusione dello standard A2DP nei dispositivi, le persone ascoltavano musica MP3 sull'auricolare Nokia BH-501 tramite il programma MSI BluePlayer, disponibile su Symbian e Windows Mobile. A quel tempo, l'architettura del sistema operativo degli smartphone consentiva l'accesso a molte funzioni di basso livello e su Windows Mobile era persino possibile installare stack Bluetooth di terze parti.

L'ultimo brevetto del codec MP3 è scaduto, l'utilizzo del codec non richiede costi di licenza dal 23 aprile 2017.

Se si prende come misura il brevetto più longevo menzionato nei riferimenti sopra menzionati, la tecnologia MP3 è diventata esente da brevetto negli Stati Uniti il ​​16 aprile 2017 quando è scaduto il brevetto statunitense 6,009,399, detenuto e gestito da Technicolor.

Fonte: www.iis.fraunhofer.de/en/ff/amm/prod/audiocodec/audiocodecs/mp3.html

Frequenza di campionamento
Velocità in bit
Supporto per la codifica
Supporto per la decodifica

16 - 48kHz
8 - 320 kbps
Non supportato da nessuna parte
Alcuni dispositivi audio (hardware)

LDAC

Un nuovo codec "Hi-Res" attivamente promosso da Sony, che supporta frequenze di campionamento fino a 96 kHz e bitrate a 24 bit, con bitrate fino a 990 kbps. È pubblicizzato come codec audiofilo, in sostituzione dei codec Bluetooth esistenti. Ha la funzione di regolazione adattiva del bitrate, a seconda delle condizioni di trasmissione radio.

Codificatore LDAC (libldac) è incluso nel pacchetto Android standard, quindi la codifica è supportata su qualsiasi smartphone Android a partire dalla versione 8 del sistema operativo. Non esistono decoder software disponibili gratuitamente, le specifiche del codec non sono accessibili al grande pubblico, tuttavia, a prima vista l'encoder, la struttura interna del codec è simile a ATRAC9 - Codec Sony utilizzato su PlayStation 4 e Vita: entrambi funzionano nel dominio della frequenza, utilizzano una trasformata discreta del coseno modificata (MDCT) e la compressione utilizzando l'algoritmo di Huffman.

Il supporto LDAC è fornito quasi esclusivamente dalle cuffie Sony. La capacità di decodificare LDAC si trova talvolta su cuffie e DAC di altri produttori, ma molto raramente.

Frequenza di campionamento
Velocità in bit
Supporto per la codifica
Supporto per la decodifica

44.1 - 96kHz
303/606/909 kbit/s (per 44.1 e 88.2 kHz), 330/660/990 kbit/s (per 48 e 96 kHz)
Android 8 +
Alcune cuffie Sony e alcuni dispositivi di altri produttori (hardware)

Commercializzare LDAC come codec ad alta risoluzione danneggia la sua componente tecnica: è stupido spendere bitrate per trasmettere frequenze non udibili dall'orecchio umano e aumentare la profondità di bit, mentre non è sufficiente trasmettere senza perdite la qualità CD (44.1/16). . Fortunatamente, il codec ha due modalità operative: trasmissione audio CD e trasmissione audio ad alta risoluzione. Nel primo caso vengono trasmessi via etere solo 44.1 kHz/16 bit.

Poiché un decodificatore software LDAC non è disponibile gratuitamente, è impossibile testare il codec senza dispositivi aggiuntivi che decodificano LDAC. Secondo i risultati del test LDAC su un DAC con il suo supporto, che gli ingegneri di SoundGuys.com hanno collegato tramite un'uscita digitale e hanno registrato il suono in uscita sui segnali di test, LDAC 660 e 990 kbps in modalità qualità CD forniscono un segnale-a- rapporto di rumore leggermente migliore di quello di aptX HD.

Audio via Bluetooth: massimi dettagli su profili, codec e dispositivi
Fonte: www.soundguys.com/ldac-ultimate-bluetooth-guide-20026

LDAC supporta anche bitrate dinamici al di fuori dei profili stabiliti - da 138 kbps a 990 kbps, ma per quanto ne so, Android utilizza solo i profili standardizzati 303/606/909 e 330/660/990 kbps.

Altri codec

Altri codec A2DP non sono ampiamente utilizzati. Il loro supporto è quasi del tutto assente oppure disponibile solo su alcuni modelli di cuffie e smartphone.
Il codec ATRAC standardizzato in A2DP non è mai stato utilizzato come codec Bluetooth nemmeno dalla stessa Sony, i codec Samsung HD, Samsung Scalable e Samsung UHQ-BT hanno un supporto molto limitato dai dispositivi di trasmissione e ricezione e HWA LHDC è troppo nuovo e ne supporta solo tre (?) dispositivi.

Supporto codec per dispositivi audio

Non tutti i produttori pubblicano informazioni accurate sui codec supportati da determinate cuffie, altoparlanti, ricevitori o trasmettitori wireless. A volte capita che il supporto per un determinato codec sia solo per la trasmissione, ma non per la ricezione (rilevante per i trasmettitori-ricevitori combinati), sebbene il produttore dichiari semplicemente "supporto", senza note (suppongo che la licenza separata di codificatori e decoder di alcuni la colpa è dei codec). Nei dispositivi più economici potresti non trovare affatto il supporto aptX dichiarato.

Sfortunatamente, le interfacce della maggior parte dei sistemi operativi non mostrano da nessuna parte il codec utilizzato. Informazioni a riguardo sono disponibili solo in Android, a partire dalla versione 8, e macOS. Tuttavia, anche in questi sistemi operativi verranno visualizzati solo i codec supportati sia dal telefono/computer che dalle cuffie.

Come puoi scoprire quali codec supporta il tuo dispositivo? Registra e analizza il dump del traffico con i parametri di negoziazione A2DP!
Questo può essere fatto su Linux, macOS e Android. Su Linux puoi utilizzare Wireshark o hcidump, su macOS puoi utilizzare Bluetooth Explorer e su Android puoi utilizzare la funzione standard di salvataggio del dump Bluetooth HCI, disponibile negli strumenti per sviluppatori. Riceverai un dump in formato btsnoop, che può essere caricato nell'analizzatore Wireshark.
Nota: un dump corretto può essere ottenuto solo collegando il tuo telefono/computer alle cuffie/altoparlanti (non importa quanto possa sembrare divertente)! Le cuffie possono stabilire autonomamente una connessione con il telefono, nel qual caso richiederanno un elenco di codec al telefono e non viceversa. Per garantire che venga registrato il dump corretto, prima disaccoppiare il dispositivo, quindi accoppiare il telefono con le cuffie durante la registrazione del dump.

Utilizza il seguente filtro di visualizzazione per filtrare il traffico non pertinente:

btavdtp.signal_id

Di conseguenza, dovresti vedere qualcosa di simile a questo:
Audio via Bluetooth: massimi dettagli su profili, codec e dispositivi

È possibile fare clic su ciascun elemento nel comando GetCapabilities per visualizzare le caratteristiche dettagliate del codec.
Audio via Bluetooth: massimi dettagli su profili, codec e dispositivi

Wireshark non conosce tutti gli identificatori dei codec, quindi alcuni codec dovranno essere decrittografati manualmente, guardando la tabella degli identificatori di seguito:

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

Per non analizzare manualmente i dump, ho creato un servizio che analizzerà tutto automaticamente: btcodecs.valdikss.org.ru

Confronto di codec. Quale codec è migliore?

Ogni codec ha i suoi vantaggi e svantaggi.
aptX e aptX HD utilizzano profili hardcoded che non possono essere modificati senza modificare il codificatore e il decodificatore. Né il produttore del telefono né quello delle cuffie possono modificare il bitrate o i fattori di codifica aptX. Il proprietario del codec, Qualcomm, fornisce un codificatore di riferimento sotto forma di libreria. Questi fatti sono la forza di aptX: sai in anticipo quale qualità del suono otterrai, senza “ma”.

SBC, al contrario, ha molti parametri configurabili, bitrate dinamico (l'encoder può ridurre il parametro bitpool se le onde radio sono occupate) e non ha profili hardcoded, solo la "qualità media" e l'"alta qualità" consigliate che erano aggiunto alla specifica A2DP nell'anno 2003. L'"alta qualità" non è più così elevata per gli standard odierni e la maggior parte degli stack Bluetooth non consente di utilizzare parametri migliori rispetto al profilo "alta qualità", sebbene non vi siano restrizioni tecniche per questo.
Bluetooth SIG non dispone di un codificatore SBC di riferimento come libreria e i produttori lo implementano autonomamente.
Questi sono i punti deboli di SBC: non è mai chiaro in anticipo quale qualità del suono aspettarsi da un particolare dispositivo. SBC può produrre audio di qualità sia bassa che molto alta, ma quest'ultima è irraggiungibile senza disabilitare o aggirare le limitazioni artificiali degli stack Bluetooth.

La situazione con AAC è ambigua: da un lato, teoricamente il codec dovrebbe produrre una qualità indistinguibile dall'originale, ma in pratica, a giudicare dai test del laboratorio SoundGuys su diversi dispositivi Android, ciò non è confermato. Molto probabilmente, la colpa è dei codificatori audio hardware di bassa qualità integrati in vari chipset del telefono. È opportuno utilizzare AAC solo sui dispositivi Apple e su Android limitarlo ad aptX e LDAC.

L'hardware che supporta codec alternativi tende ad essere di qualità superiore, semplicemente perché per dispositivi molto economici e di bassa qualità non ha senso pagare costi di licenza per utilizzare tali codec. Nei miei test, l'SBC suona molto bene su apparecchiature di qualità.

Ho creato un servizio web che codifica l'audio in SBC, aptX e aptX HD in tempo reale, direttamente nel browser. Con esso, puoi testare questi codec audio senza effettivamente trasmettere l'audio tramite Bluetooth, su cuffie cablate, altoparlanti e la tua musica preferita, e anche modificare i parametri di codifica direttamente durante la riproduzione dell'audio:
btcodecs.valdikss.org.ru/sbc-encoder
Il servizio utilizza le librerie di codifica SBC del progetto BlueZ e libopenaptx di ffmpeg, che vengono compilate in WebAssembly e JavaScript da C, tramite emscripten, per essere eseguite nel browser. Chi potrebbe sognare un futuro del genere!

Ecco come appare:

Nota come cambia il livello di rumore dopo 20 kHz per diversi codec. Il file MP3 originale non contiene frequenze superiori a 20 kHz.

Prova a cambiare codec e vedi se senti la differenza tra l'originale, SBC 53 Joint Stereo (il profilo standard e più comune) e aptX/aptX HD.

Riesco a sentire la differenza tra i codec in cuffia!

Le persone che non sentono la differenza tra i codec durante i test tramite un servizio web affermano di sentirla quando ascoltano musica con le cuffie wireless. Ahimè, non è uno scherzo né un effetto placebo: la differenza è davvero udibile, ma non è causata da differenze codec.

La stragrande maggioranza dei chipset audio Bluetooth utilizzati nei dispositivi di ricezione wireless è dotata di un processore di segnale digitale (DSP), che implementa un equalizzatore, un compander, un espansore stereo e altre cose progettate per migliorare (o modificare) il suono. I produttori di apparecchiature Bluetooth possono configurare DSP per ciascun codec separatamentee quando si passa da un codec all'altro, l'ascoltatore penserà di sentire una differenza nel funzionamento dei codec, quando in realtà stanno ascoltando impostazioni DSP diverse.

Audio via Bluetooth: massimi dettagli su profili, codec e dispositivi
Pipeline di elaborazione audio DSP Kalimba in chip prodotti da CSR/Qualcomm

Audio via Bluetooth: massimi dettagli su profili, codec e dispositivi
Attiva diverse funzioni DSP per ciascun codec ed emetti separatamente

Alcuni dispositivi premium sono dotati di software che consente di personalizzare le impostazioni DSP, ma la maggior parte delle cuffie più economiche no e gli utenti non possono disattivare manualmente la post-elaborazione audio.

Caratteristiche funzionali dei dispositivi

La versione moderna dello standard A2DP ha funzione “controllo assoluto del volume”. — controllo del volume del dispositivo tramite comandi speciali del protocollo AVRCP, che regola il guadagno dello stadio di uscita, invece di ridurre a livello di codice il volume del flusso audio. Se quando modifichi il volume sulle cuffie, la modifica non si sincronizza con il volume sul telefono, le cuffie o il telefono non supportano questa funzionalità. In questo caso, ha senso ascoltare sempre la musica sul telefono con il volume massimo, regolando il volume effettivo con i pulsanti delle cuffie: in questo caso il rapporto segnale-rumore sarà migliore e la qualità audio deve essere sopra.
In realtà ci sono situazioni tristi. Sulle mie cuffie RealForce OverDrive D1 per SBC, è acceso un potente compander e l'aumento del volume porta ad un aumento del livello dei suoni bassi, mentre il volume dei suoni forti non cambia (il segnale è compresso). Per questo motivo è necessario impostare il volume del computer a circa la metà, in questo caso non si verifica praticamente alcun effetto di compressione.
Secondo le mie osservazioni, tutte le cuffie con codec aggiuntivi supportano la funzione di controllo assoluto del volume, apparentemente questo è uno dei requisiti per la certificazione del codec.

Alcune cuffie supportano collegando due dispositivi contemporaneamente. Ciò ti consente, ad esempio, di ascoltare musica dal tuo computer e ricevere chiamate dal tuo telefono. Tuttavia, dovresti essere consapevole che in questa modalità i codec alternativi sono disabilitati e viene utilizzato solo SBC.

Funzione di segnalazione ritardo AVDTP 1.3 consente alle cuffie di comunicare al dispositivo di trasmissione il ritardo con cui il suono viene effettivamente riprodotto. Ciò consente di regolare la sincronizzazione dell'audio con il video durante la visualizzazione dei file video: se ci sono problemi con la trasmissione radio, l'audio non rimarrà indietro rispetto al video, ma al contrario, il video verrà rallentato dal lettore video fino al audio e video vengono nuovamente sincronizzati.
La funzione è supportata da molte cuffie, Android 9+ e Linux con PulseAudio 12.0+. Non sono a conoscenza del supporto per questa funzionalità su altre piattaforme.

Comunicazione bidirezionale tramite Bluetooth. Trasmissione vocale.

Per la trasmissione vocale in Bluetooth viene utilizzata la Synchronous Connection Oriented (SCO): trasmissione sincrona con negoziazione preliminare della connessione. La modalità consente di trasmettere suono e voce rigorosamente in ordine, con velocità di invio e ricezione simmetriche, senza attendere la conferma della trasmissione e il reinvio dei pacchetti. Ciò riduce il ritardo complessivo della trasmissione audio sul canale radio, ma impone gravi restrizioni alla quantità di dati trasmessi per unità di tempo e influisce negativamente sulla qualità.
Quando viene utilizzata questa modalità, sia la voce che l'audio vengono trasmessi con la stessa qualità.
Sfortunatamente, nel 2019, la qualità della voce tramite Bluetooth è ancora scarsa e non è chiaro il motivo per cui Bluetooth SIG non stia facendo nulla al riguardo.

CVSD

Il codec vocale CVSD di base è stato standardizzato nel 2002 ed è supportato da tutti i dispositivi di comunicazione Bluetooth bidirezionali. Fornisce la trasmissione audio con una frequenza di campionamento di 8 kHz, che corrisponde alla qualità della telefonia cablata convenzionale.

Un esempio di registrazione con questo codec.

mSBC

Il codec aggiuntivo mSBC è stato standardizzato nel 2009 e nel 2010 sono già comparsi i chip che lo utilizzano per la trasmissione vocale. mSBC è ampiamente supportato da vari dispositivi.
Non si tratta di un codec indipendente, ma di un normale SBC dello standard A2DP, con un profilo di codifica fisso: 16 kHz, mono, bitpool 26.

Un esempio di registrazione con questo codec.

Non brillante, ma molto migliore di CVSD, ma è comunque fastidioso da usare per la comunicazione online, soprattutto quando usi le cuffie per comunicare nel gioco: anche l'audio del gioco verrà trasmesso con una frequenza di campionamento di 16 kHz.

La società FastStreamCSR ha deciso di sviluppare l'idea di utilizzare SBC. Per aggirare i limiti del protocollo SCO e utilizzare bitrate più elevati, CSR ha intrapreso una strada diversa: ha introdotto il supporto per l'audio SBC bidirezionale nello standard di trasmissione audio unidirezionale A2DP, profili di codifica standardizzati e lo ha chiamato "FastStream".

FastStream trasmette audio stereo a 44.1 o 48 kHz con un bitrate di 212 kbps agli altoparlanti e mono, 16 kHz, con un bitrate di 72 kbps viene utilizzato per trasmettere l'audio dal microfono (leggermente migliore di mSBC). Tali parametri sono molto più adatti per la comunicazione nei giochi online: il suono del gioco e degli interlocutori sarà di alta qualità.

Un esempio di registrazione con questo codec (+ suono dal microfono, come mSBC).

L'azienda ha ideato un interessante strumento, ma poiché contraddice lo standard A2DP, è supportato solo in alcuni trasmettitori dell'azienda (che funzionano come una scheda audio USB, non come un dispositivo Bluetooth), ma non lo fa. ricevono il supporto negli stack Bluetooth, anche se il numero di cuffie con supporto FastStream non è così piccolo.

Al momento, il supporto FastStream nel sistema operativo è solo come patch per Linux PulseAudio dallo sviluppatore Pali Rohár, che non è incluso nel ramo principale del programma.

aptX a bassa latenza

Con tua grande sorpresa, aptX Low Latency supporta anche l'audio bidirezionale, implementando lo stesso principio di FastStream.
Non è possibile utilizzare questa funzionalità del codec da nessuna parte: non c'è supporto per la decodifica a bassa latenza in nessun sistema operativo o in nessuno stack Bluetooth a me noto.

Bluetooth 5, classico e a basso consumo energetico

C'è stata molta confusione sulle specifiche e sulle versioni Bluetooth a causa della presenza di due standard incompatibili sotto lo stesso marchio, entrambi ampiamente utilizzati per scopi diversi.

Esistono due protocolli Bluetooth diversi e incompatibili: Bluetooth Classic e Bluetooth Low Energy (LE, noto anche come Bluetooth Smart). Esiste anche un terzo protocollo, Bluetooth High Speed, ma non è molto diffuso e non viene utilizzato nei dispositivi domestici.

A partire dal Bluetooth 4.0, i cambiamenti nelle specifiche hanno riguardato principalmente il Bluetooth Low Energy, e la versione Classic ha ricevuto solo piccoli miglioramenti.

Elenco delle modifiche tra Bluetooth 4.2 e Bluetooth 5:

9 MODIFICHE DA v4.2 A 5.0

9.1 NUOVE FUNZIONALITÀ

Nella versione Bluetooth Core Specifica 5.0 sono state introdotte numerose nuove funzionalità. Le principali aree di miglioramento sono:
• Maschera di disponibilità slot (SAM)
• 2 Msym/s PHY per LE
•LE Lungo Raggio
• Pubblicità non collegabile con ciclo di lavoro elevato
• Estensioni pubblicitarie LE
• Algoritmo n. 2 di selezione del canale LE
9.1.1 Funzionalità aggiunte in CSA5 - Integrato in v5.0
•Maggiore potenza di uscita

Fonte: www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=421043 (Pagina 291)

Solo una modifica ha interessato la versione Classic nell'ambito delle specifiche Bluetooth 5: è stato aggiunto il supporto per la tecnologia Slot Availability Mask (SAM), progettata per migliorare la separazione delle trasmissioni radio. Tutte le altre modifiche riguardano solo Bluetooth LE (e anche una maggiore potenza di uscita).

tutto I dispositivi audio utilizzano solo Bluetooth Classic. È impossibile collegare cuffie e altoparlanti tramite Bluetooth Low Energy: non esiste uno standard per la trasmissione dell'audio tramite LE. Lo standard A2DP, utilizzato per la trasmissione di audio di alta qualità, funziona solo tramite Bluetooth Classic e non esiste un analogo in LE.

Conclusione: acquistare dispositivi audio con Bluetooth 5 solo a causa della nuova versione del protocollo è inutile. Bluetooth 4.0/4.1/4.2 nel contesto della trasmissione audio funzionerà esattamente allo stesso modo.
Se nell'annuncio delle nuove cuffie si parla di raggio d'azione raddoppiato e di consumi ridotti grazie al Bluetooth 5, allora sappiate che loro stessi non lo capiscono oppure vi ingannano. Non c'è da stupirsi, perché anche i produttori di chip Bluetooth nei loro annunci sono confusi sulle differenze tra la nuova versione dello standard, e alcuni chip Bluetooth 5 supportano la quinta versione solo per LE e utilizzano 4.2 per Classic.

Ritardo nella trasmissione audio

La quantità di ritardo (lag) nell'audio dipende da molti fattori: la dimensione del buffer nello stack audio, nello stack Bluetooth e nel dispositivo di riproduzione wireless stesso, nonché il ritardo algoritmico del codec.

La latenza di codec semplici come SBC, aptX e aptX HD è molto piccola, 3-6 ms, il che può essere trascurato, ma codec complessi come AAC e LDAC possono causare un ritardo notevole. La latenza algoritmica AAC per 44.1 kHz è 60 ms. LDAC - circa 30 ms (basato su un'analisi approssimativa del codice sorgente. Potrei sbagliarmi, ma non molto.)

La latenza risultante dipende in gran parte dal dispositivo di riproduzione, dal suo chipset e dal buffer. Durante i test ho riscontrato uno spread compreso tra 150 e 250 ms su diversi dispositivi (con il codec SBC). Se assumiamo che i dispositivi che supportano codec aggiuntivi aptX, AAC e LDAC utilizzino componenti di alta qualità e dimensioni del buffer ridotte, otteniamo le seguenti latenze tipiche:

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

Te lo ricordo: aptX Low Latency non è supportato nei sistemi operativi, motivo per cui una latenza inferiore può essere ottenuta solo con una combinazione trasmettitore+ricevitore o trasmettitore+cuffie/altoparlante e tutti i dispositivi devono supportare questo codec.

Problemi relativi al dispositivo Bluetooth, alla certificazione e al logo

Come distinguere un dispositivo audio di alta qualità da un mestiere economico? Nell'apparenza, prima di tutto!

Per cuffie, altoparlanti e ricevitori cinesi economici:

  1. La parola "Bluetooth" manca sulla confezione e sul dispositivo, più spesso vengono utilizzati "Wireless" e "BT".
  2. Manca il logo Bluetooth Audio via Bluetooth: massimi dettagli su profili, codec e dispositivi sulla scatola o sul dispositivo
  3. Nessun LED blu lampeggiante

L'assenza di questi elementi indica che il dispositivo non è stato certificato, il che significa che è potenzialmente di bassa qualità e problematico. Ad esempio, le cuffie Bluedio non sono certificate Bluetooth e non rispettano pienamente la specifica A2DP. Non avrebbero superato la certificazione.

Consideriamo diversi dispositivi e scatole da essi:
Audio via Bluetooth: massimi dettagli su profili, codec e dispositivi

Audio via Bluetooth: massimi dettagli su profili, codec e dispositivi

Audio via Bluetooth: massimi dettagli su profili, codec e dispositivi

Questi sono tutti dispositivi non certificati. Le istruzioni possono contenere un logo e il nome della tecnologia Bluetooth, ma la cosa più importante è che siano sulla scatola e/o sul dispositivo stesso.

Se le tue cuffie o il tuo altoparlante dicono "Ze bluetooth dewise è connesso con successo", anche questo non indica la loro qualità:

conclusione

Il Bluetooth può sostituire completamente cuffie e auricolari cablati? È capace, ma al prezzo di una scarsa qualità delle chiamate, di una maggiore latenza audio che può essere fastidiosa nei giochi e di una serie di codec proprietari che richiedono costi di licenza e aumentano il costo finale sia degli smartphone che delle cuffie.

La commercializzazione di codec alternativi è molto forte: aptX e LDAC vengono presentati come il tanto atteso sostituto del “vecchio e cattivo” SBC, che non è così male come si pensa.

Come si è scoperto, i limiti artificiali degli stack Bluetooth sul bitrate SBC possono essere aggirati, in modo che SBC non sia inferiore ad aptX HD. Ho preso in mano l'iniziativa e ho realizzato una patch per il firmware LineageOS: Modifichiamo lo stack Bluetooth per migliorare il suono sulle cuffie senza codec AAC, aptX e LDAC

Maggiori informazioni possono essere trovate sui siti web Ragazzi del suono и SoundExpert.

Bonus: Codificatore di riferimento SBC, informazioni sul flusso di bit A2DP e file di test. Questo file veniva pubblicato pubblicamente sul sito Web Bluetooth, ma ora è disponibile solo per i membri di Bluetooth SIG.

Fonte: habr.com

Aggiungi un commento