
Devido ao lançamento em massa de smartphones sem conector de áudio de 3.5 mm, os fones de ouvido Bluetooth sem fio tornaram-se o principal meio de ouvir música e comunicar-se em modo de headset para muitos.
Os fabricantes de dispositivos sem fio nem sempre fornecem especificações detalhadas dos produtos, e os artigos sobre áudio Bluetooth na internet são contraditórios, em alguns casos incorretos, não abordam todas as características e muitas vezes copiam as mesmas informações que não correspondem à realidade.
Vamos tentar entender o protocolo, as capacidades das pilhas Bluetooth dos sistemas operacionais, dos fones de ouvido e alto-falantes, os codecs Bluetooth para música e fala, descobrir o que influencia na qualidade do som transmitido e na latência, e aprender a coletar e decodificar informações sobre codecs suportados e outras capacidades dos dispositivos.
TL;DR:
- SBC — um codec padrão
- Os fones de ouvido possuem seu próprio equalizador e pós-processamento para cada codec separadamente
- aptX não é tão bom quanto afirmam os anúncios publicitários
- LDAC — marketing enganoso
- A qualidade do som durante as chamadas ainda é baixa
- É possível embutir codificadores de áudio no navegador usando C, compilando para WebAssembly através do emscripten, e isso não causará grandes lentidões.
Música via Bluetooth
O componente funcional do Bluetooth é determinado pelos perfis — especificações de funções específicas. A transmissão de música via Bluetooth utiliza o perfil de transmissão de áudio de alta qualidade A2DP. O padrão A2DP foi adotado em 2003, e desde então não sofreu mudanças drásticas.
Dentro do perfil, um codec obrigatório de baixa complexidade computacional, o SBC, criado especificamente para Bluetooth, é padronizado, junto com 3 adicionais. O uso de codecs não documentados de implementação própria também é permitido.
Em junho de 2019, estamos com 14 codecs A2DP:
- SBC ← padronizado no A2DP, suportado por todos os dispositivos
- MPEG-1/2 Layer 1/2/3 ← padronizados no A2DP: o famoso , usado na TV digital , e desconhecido
- MPEG-2/4 AAC ← padronizado no A2DP
- ATRAC ← um codec antigo da Sony, padronizado no A2DP
- LDAC ← um novo codec da Sony
- aptX ← codec de 1988
- aptX HD ← o mesmo que aptX, mas com parâmetros de codificação diferentes
- aptX Low Latency ← um codec totalmente diferente, sem implementação de software
- aptX Adaptive ← mais um codec da Qualcomm
- FastStream ← um pseudo-codec, uma modificação bidirecional do SBC
- HWA LHDC ← novo codec da Huawei
- Samsung HD ← suportado por 2 dispositivos
- Samsung Scalable ← suportado por 2 dispositivos
- Samsung UHQ-BT ← suportado por 3 dispositivos
Você pode se perguntar por que precisamos de codecs, quando o Bluetooth já possui EDR, que permite a transmissão de dados a velocidades de 2 e 3 Mbps, e para PCM não comprimido de dois canais de 16 bits, basta 1,4 Mbps?
Transmissão de dados via Bluetooth
Existem dois tipos de transmissão de dados no Bluetooth: Asynchronous Connection Less (ACL) para transmissão assíncrona sem estabelecimento de conexão, e Synchronous Connection Oriented (SCO), para transmissão síncrona com acordo prévio de conexão.
A transmissão ocorre utilizando um esquema de divisão de tempo e seleção de canal para cada pacote individualmente (Frequency-Hop/Time-Division-Duplex, FH/TDD), onde o tempo é dividido em intervalos de 625 microssegundos, chamados de slots. Um dos dispositivos transmite em números de slots pares, enquanto o outro o faz em ímpares. O pacote enviado pode ocupar 1, 3 ou 5 slots, dependendo do tamanho dos dados e do tipo de transmissão estabelecido; nesse caso, a transmissão de um dispositivo é realizada em slots pares e ímpares até o fim da transmissão. No total, podem ser recebidos e enviados até 1600 pacotes por segundo, se cada um ocupa 1 slot, e ambos os dispositivos transmitem e recebem sem parar.
As velocidades de 2 e 3 Mbps para EDR, que podem ser encontradas em anúncios e no site do Bluetooth, são a velocidade máxima de canal para transmissão de todos os dados em totalidade (incluindo os cabeçalhos técnicos de todos os protocolos dos quais os dados precisam ser encapsulados), em ambas as direções simultaneamente. A velocidade real de transmissão de dados será bastante diferente.
Para a transmissão de música, utiliza-se o método assíncrono, quase sempre com pacotes do tipo 2-DH5 e 3-DH5, que transportam a maior quantidade de dados em modo EDR a 2 Mbps e 3 Mbps, respectivamente, e ocupam 5 slots de divisão de tempo do espectro.
Representação esquemática da transmissão usando 5 slots por um dispositivo e 1 slot pelo outro (DH5/DH1):

Devido ao princípio de separação do espectro por tempo, somos obrigados a aguardar um slot de 625 microsegundos após a transmissão de um pacote, se o segundo dispositivo não estiver transmitindo nada ou enviando um pacote pequeno, e um período de tempo maior se o segundo dispositivo estiver transmitindo pacotes grandes. Se mais de um dispositivo estiver conectado ao telefone (por exemplo, fones de ouvido, relógios e pulseiras de fitness), o tempo de transmissão é dividido entre todos eles.
A necessidade de encapsular áudio em protocolos de transporte L2CAP e AVDTP consome 16 bytes do máximo teórico de carga útil de áudio que pode ser transmitida.
Tipo de pacote
Quantidade de slots
Máx. quantidade de bytes por pacote
Máx. quantidade de bytes de carga útil A2DP
Máx. taxa de bits de carga útil A2DP
2-DH3
3
367
351
936 kbit/s
3-DH3
3
552
536
1429 kbit/s
2-DH5
5
679
663
1414 kbit/s
3-DH5
5
1021
1005
2143 kbit/s
1414 e 1429 kbit/s são definitivamente insuficientes para transmitir áudio não compactado em condições reais, com a faixa ruidosa de 2.4 GHz e a necessidade de transmitir dados auxiliares. EDR 3 mbit/s é exigente em termos de potência de transmissão e ruídos no ar, portanto, mesmo no modo 3-DH5, a transmissão confortável de PCM é impossível, haverá interrupções curtas e tudo funcionará apenas a uma distância de alguns metros.
Na prática, até mesmo um fluxo de áudio de 990 kbit/s (LDAC 990 kbit/s) é transmitido com dificuldade.
Voltando aos codecs.
SBC
Codec obrigatório para todos os dispositivos que suportam o padrão A2DP. O melhor e o pior codec ao mesmo tempo.
Frequência de amostragem
Resolução
Taxa de bits
Suporte à codificação
Suporte à decodificação
16, 32, 44.1, 48 kHz
16 bits
10-1500 kbit/s
Por todos os dispositivos
Por todos os dispositivos
SBC é um codec simples e computacionalmente rápido, com um modelo psicoacústico primitivo (apenas máscara de sons suaves), usando modulação por impulso adaptativa (APCM).
A especificação A2DP recomenda o uso de dois perfis: Qualidade Média e Alta Qualidade.

O codec possui muitas configurações que permitem controlar a latência algorítmica, o número de amostras por bloco, o algoritmo de distribuição de bits, mas em quase todos os lugares são usados os mesmos parâmetros recomendados na especificação: Joint Stereo, 8 faixas de frequência, 16 blocos em um quadro de áudio, método de distribuição de bits Loudness.
O SBC suporta a alteração dinâmica do parâmetro Bitpool, que impacta diretamente a taxa de bits. Se a transmissão de rádio estiver congestionada, pacotes podem ser perdidos ou os dispositivos estiverem a uma grande distância, a fonte de áudio pode reduzir o Bitpool até que a conexão se normalize.
Os fabricantes da maioria dos fones de ouvido definem o valor máximo do parâmetro Bitpool em 53, o que limita a taxa de bits a 328 kilobits por segundo ao usar o perfil recomendado.
Mesmo que o fabricante de fones de ouvido tenha definido um valor máximo de Bitpool superior a 53 (modelos como Beats Solo³, JBL Everest Elite 750NC, Apple AirPods, além de alguns receptores e unidades centrais de automóveis), a maioria dos sistemas operacionais não permitirá o uso de taxas de bits elevadas devido a uma limitação interna nos stacks de Bluetooth.
Além disso, alguns fabricantes definem um valor máximo baixo de Bitpool para certos dispositivos. Por exemplo, para o Bluedio T, é igual a 39, e para o Samsung Gear IconX, é 37, o que resulta em qualidade de som ruim.
Restrições artificiais impostas pelos desenvolvedores dos stacks de Bluetooth provavelmente surgiram devido à incompatibilidade de alguns dispositivos com altos valores de Bitpool ou perfis não convencionais, mesmo que tenham informado suporte, e ao número insuficiente de testes durante a certificação. Para os autores dos stacks de Bluetooth, era mais fácil limitar-se ao consenso do perfil recomendado do que criar uma base de dados de dispositivos problemáticos (embora agora isso esteja sendo feito para outras funções que não funcionam corretamente).
O SBC aloca dinamicamente bits de quantização para bandas de frequência, agindo de baixo para cima, com diferentes coeficientes de peso. Se toda a taxa de bits for usada nas frequências baixas e médias, as frequências altas serão "cortadas" (em vez delas, haverá silêncio).
Exemplo SBC 328 kbit/s. No topo — o original, na parte inferior — SBC, com alternância periódica entre as faixas. Para áudio em um arquivo de vídeo, é utilizado o codec de compressão sem perdas FLAC. O uso de FLAC em um contêiner mp4 não é oficialmente padronizado, portanto, não é garantido que seu navegador consiga reproduzi-lo, mas deve funcionar nas últimas versões do Chrome e Firefox para desktop. Se você não tiver som, pode baixar o arquivo e abri-lo em um reprodutor de vídeo completo.
ZZ Top — Sharp Dressed Man
No espectro, podemos ver o momento da mudança: o SBC corta periodicamente os sons suaves acima de 17,5 kHz e não destaca bits para a faixa acima de 20 kHz. O espectro completo está disponível para clique (1,7 MB).
Não ouço diferença entre o original e o SBC nessa faixa.
Vamos pegar algo mais recente e simular o áudio que resultaria do uso dos fones Samsung Gear IconX com Bitpool 37 (na parte superior está o sinal original, na parte inferior o SBC a 239 kbps, som em FLAC).
Mindless Self Indulgence — Witness
Ouço estalos, efeito estéreo reduzido e um desagradável 'clique' na vocalização nas altas frequências.
Embora o SBC seja um codec bastante flexível, que pode ser ajustado para baixa latência, ele oferece excelente qualidade de áudio em altas taxas de bits (452+ kbps) e é razoavelmente bom para a maioria das pessoas em qualidade alta padrão (328 kbps). Como o padrão A2DP não define perfis fixos (apenas recomendações), os desenvolvedores de stacks impuseram limitações artificiais ao Bitpool, os parâmetros de áudio transmitidos não aparecem na interface do usuário, e os fabricantes de fones de ouvido são livres para definir suas próprias configurações sem nunca indicar o valor do Bitpool nas especificações do produto. O codec ganhou notoriedade pela baixa qualidade de som, embora isso não seja um problema do codec em si.
O parâmetro Bitpool afeta diretamente a taxa de bits apenas dentro de um perfil. O mesmo valor de Bitpool 53 pode fornecer tanto uma taxa de 328 kbps no perfil recomendado de alta qualidade, quanto 1212 kbps com canal duplo e 4 faixas de frequência. Por isso, os autores dos sistemas operacionais, além das limitações no Bitpool, impõem também um limite na taxa de bits. Eu vejo que essa situação surgiu devido a uma falha no padrão A2DP: deveria ter sido acordada uma taxa de bits, e não um Bitpool.
Tabela de suporte das capacidades SBC em diferentes sistemas operacionais:
sistemas operacionais
Taxas de amostragem suportadas
Limite máximo de Bitpool
Limite máximo de Bitrate
Bitrate típico
Ajuste dinâmico de Bitpool
Windows 10
44,1 kHz
53
512 kbps
328 kbps
✓*
Linux (BlueZ + PulseAudio)
16, 32, 44.1, 48 kHz
64 (em conexão recebida), 53 (em conexão enviada)
Sem limites
328 kbps
✓*
macOS High Sierra
44,1 kHz
64, por padrão 53***
Desconhecido
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 kHz
53
Sem limites
328 kbps
✗
* O Bitpool apenas diminui, mas não aumenta automaticamente, em caso de melhoria nas condições de transmissão. Para restaurar o Bitpool, é necessário parar a reprodução, esperar alguns segundos e reiniciar o áudio.
** O valor padrão depende das configurações da pilha especificadas durante a compilação do firmware. No Android 8/8.1, a frequência é apenas 44.1 kHz ou 48 kHz, dependendo das configurações na compilação; nas versões restantes, 44.1 kHz e 48 kHz são suportadas simultaneamente.
*** O valor do Bitpool pode ser elevado no programa Bluetooth Explorer.
aptX e aptX HD
aptX é um codec simples e computacionalmente rápido, sem psicoacústica, que utiliza modulação por pulsos codificados diferenciais adaptativos (). Surgiu por volta de 1988 (data de apresentação datada de fevereiro de 1988), e antes do Bluetooth era amplamente utilizado em equipamentos profissionais de áudio sem fio. Atualmente, pertence à Qualcomm, requer licenciamento e royalties. Em 2014: $6000 de pagamento único e aproximadamente $1 por dispositivo, para lotes de até 10000 dispositivos (, p. 16).
aptX e aptX HD são o mesmo codec, com diferentes perfis de codificação.
O codec possui apenas um parâmetro — a escolha da frequência de amostragem. Também existe a escolha do número/modo de canais, mas em todos os dispositivos que conheço (mais de 70) é suportado exclusivamente Stereo.
Codec
Frequência de amostragem
Resolução
Taxa de bits
Suporte à codificação
Suporte à decodificação
aptX
16, 32, 44.1, 48 kHz
16 bits
128 / 256 / 352 / 384 kbps (dependendo da frequência de amostragem)
Windows 10 (desktop e móvel), macOS, Android 4.4+/7*, Blackberry OS 10
Um amplo número de dispositivos de áudio (hardware)
* Versões anteriores a 7 requerem modificação da pilha Bluetooth. O codec é suportado apenas se o fabricante do dispositivo Android licenciou o uso do codec com a Qualcomm (se o sistema operacional tiver bibliotecas de codificação).
aptX divide o áudio em 4 faixas de frequência e quantiza-as com a mesma quantidade de bits de forma constante: 8 bits para 0-5.5 kHz, 4 bits para 5.5-11 kHz, 2 bits para 11-16.5 kHz, 2 bits para 16.5-22 kHz (números para frequência de amostragem de 44.1 kHz).
Exemplo de áudio aptX (acima — sinal original, abaixo — aptX, espectrogramas apenas dos canais esquerdo, som em FLAC):
As frequências mais altas ficaram um pouco mais quentes, mas a diferença não é audível.
Devido à distribuição fixa dos bits de quantização, o codec não pode "transferir bits" para as frequências que mais precisam deles. Ao contrário do SBC, o aptX não "cortará" frequências, mas adicionará ruídos de quantização, reduzindo a faixa dinâmica do áudio.
Não se deve pensar que usar, por exemplo, 2 bits para uma faixa reduz a faixa dinâmica para 12 dB: o ADPCM permite usar até 96 dB de faixa dinâmica mesmo utilizando 2 bits de quantização, mas apenas com um determinado sinal.
O ADPCM armazena a diferença da representação numérica entre a amostra atual e a próxima, ao invés de gravar o valor absoluto, como no PCM. Isso permite reduzir as exigências em número de bits necessários para armazenar a mesma (sem perdas) ou praticamente a mesma (com um erro de arredondamento relativamente pequeno) informação. Para diminuir erros de arredondamento, tabelas de coeficientes são utilizadas.
Na criação do codec, os autores calcularam os coeficientes do ADPCM com base em um conjunto de arquivos de áudio musical. Quanto mais próximo o sinal de áudio estiver daquele conjunto de músicas em que as tabelas foram construídas, menos erros de quantização (ruídos) o aptX cria.
Por causa disso, testes sintéticos sempre apresentarão resultados piores do que a música. Eu fiz um exemplo sintético especial, onde o aptX mostra resultados ruins — uma senoide com frequência de 12.4 kHz (acima — o sinal original, abaixo — aptX. Som em FLAC. Diminua o volume!):
Gráfico de espectro:

Os ruídos são claramente audíveis.
Entretanto, se gerar uma senoide com menor amplitude, para que fique mais silenciosa, os ruídos também ficarão mais baixos, o que indica uma ampla faixa dinâmica:

Para ouvir a diferença entre a faixa musical original e a comprimida, pode-se inverter um dos sinais e somar as faixas canal a canal. Essa abordagem, de modo geral, não é correta e não resultaria em um resultado viável com codecs mais complexos, mas especificamente para o ADPCM, é bastante adequada.
A média quadrática da diferença dos sinais está em -37.4 dB, o que não é muito para uma música tão comprimida.
aptX HD
aptX HD não é um codec independente — é um perfil de codificação melhorado do codec aptX. As alterações afetaram a quantidade de bits alocados para a codificação das faixas de frequência: 10 bits para 0-5,5 kHz, 6 bits para 5,5-11 kHz, 4 bits para 11-16,5 kHz, 4 bits para 16,5-22 kHz (números para 44,1 kHz).
Codec
Frequência de amostragem
Resolução
Taxa de bits
Suporte à codificação
Suporte à decodificação
aptX HD
16, 32, 44.1, 48 kHz
24 bits
192 / 384 / 529 / 576 kbps (dependendo da taxa de amostragem)
Android 8+*
Por alguns dispositivos de áudio (hardwares)
* Versões anteriores a 7 requerem modificação da pilha Bluetooth. O codec é suportado apenas se o fabricante do dispositivo Android licenciou o uso do codec com a Qualcomm (se o sistema operacional tiver bibliotecas de codificação).
Menos comum do que aptX: aparentemente exige licenciamento separado da Qualcomm e taxas de licença individuais.
Repetindo o exemplo com um senoide a 12,4 kHz:

Muito melhor do que com aptX, mas ainda assim barulhento.
aptX Low Latency
Codec da Qualcomm, que não tem relação com os padrões aptX e aptX HD, de acordo com as informações escassas de pessoas envolvidas em seu desenvolvimento. Destina-se à transmissão interativa de áudio com baixa latência (filmes, jogos), onde a latência do som não pode ser ajustada programaticamente. Implementações conhecidas de software para codificadores e decodificadores estão ausentes, suportado exclusivamente por transmissores, receptores, fones de ouvido e alto-falantes, mas não por smartphones e computadores.
Frequência de amostragem
Taxa de bits
Suporte à codificação
Suporte à decodificação
44,1 kHz
276/420 kbps
Por alguns transmissores (hardwares)
Por alguns dispositivos de áudio (hardwares)
AAC
AAC, ou Advanced Audio Coding — é um codec computacionalmente complexo, com um modelo psicoacústico robusto. Tornou-se amplamente utilizado para áudio na internet, sendo o segundo mais popular após o MP3. Exige licenciamento e taxas de licença: $15000 uma única vez (ou $1000 para empresas com menos de 15 funcionários) + $0,98 pelos primeiros 500000 dispositivos ().
O codec está padronizado dentro das especificações MPEG-2 e MPEG-4, e ao contrário da crença comum, não pertence à Apple.
Frequência de amostragem
Taxa de bits
Suporte à codificação
Suporte à decodificação
8 — 96 kHz
8 — 576 kbps (para estéreo), 256 — 320 kbps (típico para Bluetooth)
macOS, Android 7+*, iOS
Um amplo número de dispositivos de áudio (hardware)
* apenas em dispositivos cujos fabricantes pagaram as taxas de licença
No iOS e macOS, a melhor codificação atualmente é realizada pelo codificador Apple AAC, que fornece a melhor qualidade de áudio possível. No Android, utiliza-se um codificador de qualidade inferior, o Fraunhofer FDK AAC, mas diferentes implementações de hardware integradas na plataforma (SoC) podem ser usadas, com qualidade de codificação desconhecida. , a qualidade da codificação AAC em diferentes telefones Android varia significativamente:
A maioria dos dispositivos de áudio sem fio para AAC tem uma taxa de bits máxima de 320 kbps, alguns suportam apenas 256 kbps. Outras taxas de bits são extremamente raras.
AAC oferece excelente qualidade em taxas de bits de 320 e 256 kbps, mas é suscetível , no entanto, é difícil ouvir qualquer diferença em comparação com o original no iOS a uma taxa de 256 kbps, mesmo após várias codificações sequenciais; em uma única codificação, por exemplo, de MP3 320 kbps para AAC 256 kbps, as perdas podem ser ignoradas.
Assim como acontece com outros codecs Bluetooth, qualquer música é primeiro decodificada e, em seguida, codificada pelo codec. Ao ouvir música em formato AAC, ela é primeiro decodificada pelos recursos do sistema operacional, e depois codificada em AAC novamente, para transmissão via Bluetooth. Isso é necessário para misturar vários fluxos de áudio, como música e notificações de novas mensagens. O iOS não é exceção. Há muitas alegações na internet de que a música em formato AAC não é transcodificada no iOS durante a transmissão via Bluetooth, o que é falso.
MP1/2/3
Os codecs da família MPEG-1/2 Parte 3 consistem no conhecido e amplamente utilizado MP3, no menos comum MP2 (usado principalmente em TV digital e rádio) e no totalmente desconhecido MP1.
Os antigos codecs MP1 e MP2 não são mais suportados: não consegui encontrar nenhum fone de ouvido ou pilha Bluetooth que os codificasse ou decodificasse.
A decodificação de MP3 é suportada por alguns fones de ouvido, mas a codificação não é suportada por nenhuma pilha dos sistemas operacionais modernos. Por exemplo, a pilha de terceiros BlueSoleil para Windows pode codificar em MP3 se o arquivo de configuração for alterado manualmente, mas a instalação dela leva a um BSoD no Windows 10. A conclusão é que o codec não é realmente utilizável para áudio Bluetooth.
No passado, de 2006 a 2008, antes da disseminação do padrão A2DP em dispositivos, as pessoas ouviam música MP3 com o fone de ouvido Nokia BH-501 através do aplicativo MSI BluePlayer, que estava disponível para Symbian e Windows Mobile. Naquela época, a arquitetura do sistema operacional dos smartphones permitia acesso a muitas funções de baixo nível, e no Windows Mobile era possível até instalar pilhas Bluetooth de terceiros.
A última patente do codec MP3 expirou, e o uso do codec não requer pagamento de royalties desde 23 de abril de 2017.
Se a patente de maior duração mencionada nas referências acima for considerada como medida, então a tecnologia MP3 tornou-se livre de patentes nos Estados Unidos em 16 de abril de 2017, quando a Patente U.S. 6,009,399, detida e administrada pela Technicolor, expirou.
Fonte:
Frequência de amostragem
Taxa de bits
Suporte à codificação
Suporte à decodificação
16 — 48 kHz
8 — 320 kbps
Não suportado em nenhum lugar
Por alguns dispositivos de áudio (hardwares)
LDAC
Novo codec 'Hi-Res' da Sony, promovido ativamente, que suporta taxas de amostragem de até 96 kHz e profundidade de bits de 24, com taxa de bits de até 990 kbps. É promovido como um codec para audiófilos, como substituto para os codecs Bluetooth existentes. Possui função de ajuste adaptativo da taxa de bits, dependendo das condições da transmissão.
O codificador LDAC () vem de fábrica no Android, portanto a codificação é suportada em qualquer smartphone Android a partir da versão 8 do SO. Não há decodificadores de software disponíveis publicamente, a especificação do codec não está amplamente disponível ao público, no entanto, à primeira vista, o design interno do codec é semelhante ao — codec da Sony usado no PlayStation 4 e Vita: ambos operam na mesma faixa de frequência, usam a transformada discreta de cossenos modificada (MDCT) e compressão com o algoritmo de Huffman.
O suporte ao LDAC está disponível praticamente apenas em fones de ouvido da Sony. A capacidade de decodificação LDAC às vezes é encontrada em fones de ouvido e DACs de outros fabricantes, mas é muito rara.
Frequência de amostragem
Taxa de bits
Suporte à codificação
Suporte à decodificação
44.1 — 96 kHz
303/606/909 kbps (para 44.1 e 88.2 kHz), 330/660/990 kbps (para 48 e 96 kHz)
Android 8+
Por alguns fones de ouvido da Sony e poucos dispositivos de outros fabricantes (hardware)
O marketing do LDAC como um codec Hi-Res prejudica sua base técnica: é insensato usar a taxa de bits para transmitir frequências inaudíveis ao ouvido humano e uma profundidade maior de bits, quando não é suficiente para transmitir qualidade de CD (44.1/16) sem perdas. Felizmente, o codec tem dois modos de operação: transmissão de áudio CD e transmissão de áudio Hi-Res. No primeiro caso, apenas 44.1 kHz/16 bits são transmitidos sem fio.
Como não há decodificador de software do LDAC disponível publicamente, é impossível testar o codec sem dispositivos adicionais que decodifiquem LDAC. Nos testes do LDAC em um DAC com suporte, que os engenheiros do site SoundGuys.com conectaram através da saída digital e gravaram o som gerado em sinais de teste, o LDAC 660 e 990 kbps em modo de qualidade CD oferece uma relação sinal/ruído apenas um pouco melhor do que o aptX HD.
Fonte:
O LDAC também suporta taxas de bits dinâmicas fora dos perfis estabelecidos — de 138 kbps a 990 kbps, mas, pelo que posso perceber, no Android são usados apenas os perfis padronizados de 303/606/909 e 330/660/990 kbps.
Outros codecs
Outros codecs A2DP não ganharam ampla adoção. Seu suporte está praticamente ausente ou é limitado a determinados modelos de fones de ouvido e smartphones.
O codec ATRAC, padronizado no A2DP, nunca foi usado como codec Bluetooth nem mesmo pela Sony. Os codecs Samsung HD, Samsung Scalable e Samsung UHQ-BT têm suporte muito limitado por dispositivos de transmissão e recepção, enquanto o HWA LHDC é muito novo e é suportado por apenas três(?) dispositivos.
Suporte a codecs pelos dispositivos de áudio
Nem todos os fabricantes publicam informações precisas sobre os codecs suportados por determinados fones de ouvido sem fio, caixas de som, receptores ou transmissores. Às vezes, o suporte a um determinado codec está disponível apenas para transmissão, mas não para recepção (o que é relevante para transmissores-receptores combinados), embora o fabricante indique simplesmente 'suporte', sem notas adicionais (presumo que isso se deva ao licenciamento separado de codificadores e decodificadores de alguns codecs). Nos dispositivos mais baratos, pode-se não encontrar o suporte declarado ao aptX.
Infelizmente, nas interfaces da maioria dos sistemas operacionais, não é exibido o codec utilizado. Essa informação está disponível apenas no Android, a partir da versão 8, e no macOS. No entanto, mesmo nesses sistemas operacionais, serão exibidos apenas os codecs que são suportados tanto pelo telefone/computador quanto pelos fones de ouvido.
Como saber quais codecs um dispositivo suporta? Registrar e analisar o dump de tráfego com os parâmetros de negociação A2DP!
Isso pode ser feito no Linux, macOS e Android. No Linux, pode-se usar Wireshark ou hcidump, no macOS — Bluetooth Explorer, e no Android — a função padrão de salvar o dump HCI Bluetooth, disponível nas ferramentas de desenvolvedor. Você obterá um dump no formato btsnoop, que pode ser carregado no analisador Wireshark.
Note que: um dump correto só pode ser obtido conectando-se com um telefone/computador aos fones de ouvido/alto-falantes (por mais curioso que isso pareça)! Os fones de ouvido podem estabelecer a conexão com o telefone por conta própria, e nesse caso, eles solicitarão a lista de codecs ao telefone, e não o contrário. Para garantir a gravação de um dump correto, primeiro desconecte-se do dispositivo e, em seguida, durante a gravação do dump, pareie o telefone com os fones de ouvido.
Use o seguinte filtro de exibição para filtrar o tráfego irrelevante:
btavdtp.signal_idComo resultado, você deve ver algo parecido com:
Em cada item do comando GetCapabilities, você pode clicar e ver as especificações detalhadas do codec.
O Wireshark não conhece todos os identificadores de codecs, portanto, alguns codecs terão que ser decifrados manualmente, consultando a tabela de identificadores abaixo:
Obrigatório:
0x00 - SBC
Opcional:
0x01 - MPEG-1,2 (também conhecido como MP3)
0x02 - MPEG-2,4 (também conhecido como AAC)
0x04 - ATRAC
Específico do fornecedor:
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 - O ID do Codec CSR True Wireless Stereo v3 para AAC
0xFF 0x000A 0x0105 - O ID do Codec CSR True Wireless Stereo v3 para MP3
0xFF 0x000A 0x0106 - O ID do Codec CSR True Wireless Stereo v3 para aptXPara não analisar dumps manualmente, criei um serviço que analisa tudo automaticamente:
Comparação de codecs. Qual codec é melhor?
Cada codec tem suas próprias vantagens e desvantagens.
aptX e aptX HD usam perfis rigidamente definidos, que não podem ser alterados sem modificar o codificador e o decodificador. Nem o fabricante do telefone nem o fabricante dos fones de ouvido podem alterar a taxa de bits ou os coeficientes de codificação do aptX. O proprietário do codec, a Qualcomm, fornece um codificador de referência na forma de biblioteca. Esses fatos são um forte ponto a favor do aptX - você sabe com antecedência qual qualidade de som receberá, sem quaisquer “mas”.
O SBC, por outro lado, possui várias opções personalizáveis, taxa de bits dinâmica (o codificador pode diminuir o parâmetro bitpool se o espectro de rádio estiver congestionado) e não tem perfis fixos, apenas os recomendados de "qualidade média" e "alta qualidade", que foram adicionados à especificação A2DP em 2003. A "alta qualidade" não é mais tão alta pelos padrões modernos, e a maioria das pilhas Bluetooth não permite opções melhores do que o perfil de "alta qualidade", embora não haja limitações técnicas para isso.
O Bluetooth SIG não possui um codificador de referência SBC na forma de uma biblioteca, e os fabricantes o implementam de forma independente.
Essas são as fraquezas do SBC — nunca se sabe previamente que qualidade de som esperar de um dispositivo específico. O SBC pode fornecer qualidade de som tanto baixa quanto muito alta, mas a última é inatingível sem desativar ou contornar as limitações artificiais das pilhas Bluetooth.
A situação com o AAC é ambígua: por um lado, teoricamente o codec deve fornecer qualidade indistinguível do original, mas a prática, de acordo com os testes do laboratório SoundGuys em vários dispositivos Android, não confirma isso. É mais provável que a culpa seja dos codificadores de áudio de baixa qualidade embutidos nos diferentes chipsets dos telefones. Faz sentido usar AAC apenas em dispositivos Apple, enquanto nos Android é melhor se limitar ao aptX e LDAC.
Dispositivos que suportam codecs alternativos geralmente são de qualidade superior, simplesmente porque não faz sentido para dispositivos muito baratos e de baixa qualidade pagar royalties para usar esses codecs. Nos meus testes, o SBC soa muito bem em equipamentos de qualidade.
Eu criei um serviço web que codifica áudio em SBC, aptX e aptX HD em tempo real, diretamente no navegador. Com ele, você poderá testar esses audiocodecs sem realmente transmitir áudio via Bluetooth, usando quaisquer fones de ouvido com fio, alto-falantes e sua música favorita, além de mudar os parâmetros de codificação durante a reprodução de áudio:
O serviço utiliza bibliotecas de codificação SBC do projeto BlueZ e libopenaptx do ffmpeg, que são compiladas em WebAssembly e JavaScript a partir do C, através do emscripten, para execução no navegador. Quem poderia sonhar com um futuro assim!
Aqui está como isso se parece:
Observe como o nível de ruído muda após 20 kHz em diferentes codecs. No arquivo MP3 original, as frequências acima de 20 kHz estão ausentes.
Tente alternar entre os codecs e veja se consegue perceber a diferença entre o original, SBC 53 Joint Stereo (o perfil padrão e mais comum), e aptX/aptX HD.
Eu percebo a diferença entre os codecs em fones de ouvido!
Pessoas que não notam diferença entre os codecs durante o teste via serviço web afirmam que conseguem percebê-la ao ouvir música em fones de ouvido sem fio. Infelizmente, isso não é uma piada ou um efeito placebo: a diferença realmente é audível, mas é causada não por diferenças entre os codecs.
A grande maioria dos chipsets de áudio Bluetooth usados em dispositivos receptores sem fio vem equipada com um processador digital de sinais (DSP), que implementa equalizador, compandor, expansor estéreo e outras funções destinadas a melhorar (ou alterar) o som. Fabricantes de equipamentos Bluetooth podem programar o DSP para cada codec separadamente, e ao alternar entre codecs, o ouvinte pode achar que ouve diferenças de desempenho entre os codecs, quando na realidade está ouvindo configurações diferentes do DSP.
O pipeline de processamento de som DSP Kalimba em chips da CSR/Qualcomm

Ativação de diferentes funções do DSP para cada codec e saída separadamente
Alguns dispositivos de alta gama vêm com um software que permite ajustar os parâmetros do DSP, mas a maioria dos fones de ouvido mais baratos não tem essa possibilidade, e os usuários não conseguem desativar o pós-processamento do som por meio de configurações básicas.
Características funcionais dos dispositivos
A versão moderna do padrão A2DP possui a função de "controle absoluto de volume" — controle de volume do dispositivo por comandos especiais do protocolo AVRCP, que ajusta a amplificação do estágio de saída, ao invés de reduzir o volume do fluxo de áudio programaticamente. Se, ao alterar o volume nos fones de ouvido, a alteração não se sincroniza com o volume do telefone, isso significa que seus fones de ouvido ou telefone não suportam essa função. Nesse caso, é aconselhável ouvir música sempre com o volume máximo no telefone, ajustando o volume real com os botões dos fones — assim, a relação sinal/ruído será melhor e a qualidade do áudio. deveria ser acima.
Na realidade, há situações tristes. Nos meus fones de ouvido RealForce OverDrive D1, um forte compressor está ativado para SBC, e aumentar o volume faz com que o nível dos sons baixos aumente, enquanto o volume dos sons altos permanece o mesmo (ocorre compressão do sinal). Por causa disso, preciso ajustar o volume no computador para cerca da metade, caso contrário, não há praticamente nenhum efeito de compressão.
De acordo com minhas observações, todos os fones de ouvido com codecs adicionais suportam a função de ajuste absoluto de volume; aparentemente, isso é um dos requisitos para a certificação dos codecs.
Alguns fones de ouvido suportam conexão de dois dispositivos simultaneamente. Isso permite, por exemplo, ouvir música no computador e atender chamadas no telefone. No entanto, deve-se saber que, nesse modo, codecs alternativos são desativados, e apenas SBC é utilizado.
A função AVDTP 1.3 Delay Reporting permite que os fones de ouvido informem ao dispositivo transmissor a latência com a qual o som está sendo realmente reproduzido. Isso ajuda a ajustar a sincronização do áudio com o vídeo ao assistir arquivos de vídeo: em caso de problemas de transmissão pelo rádio, o áudio não ficará atrasado em relação ao vídeo; pelo contrário, o vídeo irá travar até que áudio e vídeo estejam novamente sincronizados.
Essa função é suportada por muitos fones de ouvido, Android 9+ e Linux com PulseAudio 12.0+. Não tenho informação sobre o suporte da função em outras plataformas.
Comunicação bidirecional via Bluetooth. Transmissão de voz.
Para a transmissão de voz via Bluetooth utiliza-se a Synchronous Connection Oriented (SCO) — uma transmissão síncrona com pré-estabelecimento de conexão. Esse modo permite transmitir som e voz de forma estrita e sequencial, com uma taxa simétrica de envio e recebimento, sem esperar pela confirmação da transmissão e reenvio de pacotes. Isso reduz a latência total na transmissão de áudio pelo canal de rádio, mas impõe sérias limitações à quantidade de dados transmitidos por unidade de tempo, afetando negativamente a qualidade.
Quando este modo é utilizado, tanto a voz quanto o áudio são transmitidos com a mesma qualidade.
Infelizmente, até 2019, a qualidade da transmissão de voz via Bluetooth ainda é baixa, e não está claro por que a Bluetooth SIG não toma providências a respeito.
CVSD
O codec básico de transmissão de voz CVSD foi padronizado em 2002 e é suportado por todos os dispositivos de comunicação bidirecional via Bluetooth. Ele proporciona a transmissão de áudio com uma taxa de amostragem de 8 kHz, correspondente à qualidade da telefonia convencional com fio.
.
mSBC
O codec adicional mSBC foi padronizado em 2009, e em 2010 já surgiram chips utilizando-o para transmissão de voz. O mSBC é amplamente suportado por diversos dispositivos.
Não é um codec independente, mas sim o SBC comum do padrão A2DP, com um perfil de codificação fixo: 16 kHz, mono, bitpool 26.
.
Não é excelente, mas muito melhor que o CVSD, ainda assim é desconfortável utilizá-lo para comunicação pela internet, especialmente ao usar fones de ouvido em jogos — o som do jogo também será transmitido com uma taxa de amostragem de 16 kHz.
FastStreamA empresa CSR decidiu desenvolver a ideia de reaproveitamento do SBC. Para contornar as limitações do protocolo SCO e utilizar taxas de bits mais altas, a CSR adotou uma abordagem diferente — integraram o suporte de áudio SBC bidirecional ao padrão de transmissão de áudio unidirecional A2DP, padronizando perfis de codificação e nomeando-o como 'FastStream'.
O FastStream transmite em alto-falantes som estéreo a 44.1 ou 48 kHz com uma taxa de bits de 212 kbit/s, e para a transmissão de áudio do microfone utiliza mono, 16 kHz, com uma taxa de bits de 72 kbit/s (um pouco melhor que o mSBC). Esses parâmetros se adequam muito melhor à comunicação em jogos online — o som do jogo e dos interlocutores será de qualidade.
(+ ).
A empresa criou uma solução interessante, mas devido à sua contrariedade ao padrão A2DP, seu suporte existe apenas em alguns transmissores da empresa (que funcionam como uma placa de som USB, e não como dispositivos Bluetooth), mas não recebeu suporte nas pilhas Bluetooth, embora o número de fones de ouvido com suporte ao FastStream não seja tão pequeno.
Atualmente, o suporte ao FastStream no sistema operacional existe apenas do desenvolvedor Pali Rohár, que não está incluído na versão principal do software.
aptX Low Latency
Para grande surpresa, o aptX Low Latency também suporta áudio bidirecional, implementando o mesmo princípio que o FastStream.
Não será possível utilizar essa característica do codec em lugar algum – não há suporte para decodificação Low Latency em nenhum sistema operacional e em nenhuma das pilhas Bluetooth conhecidas para mim.
Bluetooth 5, Classic e Low Energy
A grande confusão em torno das especificações e versões do Bluetooth se deve à existência de dois padrões incompatíveis sob uma mesma marca, ambos amplamente utilizados para diferentes finalidades.
Existem dois protocolos Bluetooth distintos e incompatíveis: Bluetooth Classic e Bluetooth Low Energy (LE, também conhecido como Bluetooth Smart). Existe também um terceiro protocolo, Bluetooth High Speed, mas ele não é amplamente utilizado e não é utilizado em dispositivos domésticos.
A partir do Bluetooth 4.0, as mudanças na especificação se concentraram predominantemente no Bluetooth Low Energy, enquanto a versão Classic recebeu apenas melhorias pequenas.
Lista de mudanças entre Bluetooth 4.2 e Bluetooth 5:
9 ALTERAÇÕES DA V4.2 PARA A 5.0
9.1 NOVAS FUNCIONALIDADES
Várias novas funcionalidades são introduzidas na Especificação Central do Bluetooth 5.0. As principais áreas de melhoria são:
• Máscara de Disponibilidade de Slots (SAM)
• PHY de 2 Msym/s para LE
• LE Long Range
• Publicidade de Alto Ciclo de Trabalho Não Conectável
• Extensões de Publicidade LE
• Algoritmo de Seleção de Canal LE #2
9.1.1 Funcionalidades Adicionadas no CSA5 — Integradas na v5.0
• Maior Potência de Saída
Fonte: (página 291)
Apenas uma alteração se referiu à versão Classic no âmbito da especificação Bluetooth 5: foi adicionada a tecnologia de suporte à Máscara de Disponibilidade de Slots (SAM), destinada a melhorar a segmentação do espectro de rádio. Todas as outras mudanças afetam apenas o Bluetooth LE (e também a Maior Potência de Saída).
Todos os dispositivos de áudio utilizam apenas Bluetooth Classic. Fones de ouvido e alto-falantes não podem ser conectados via Bluetooth Low Energy: não existe um padrão para transmissão de áudio utilizando LE. O padrão A2DP, usado para transmissão de áudio de alta qualidade, funciona apenas através do Bluetooth Classic, e não há um equivalente no LE.
A aquisição de dispositivos de áudio com Bluetooth 5 apenas por causa da nova versão do protocolo é desnecessária. O Bluetooth 4.0/4.1/4.2 funcionará da mesma forma em termos de transmissão de áudio.
Se o anúncio de novos fones de ouvido menciona um raio de ação dobrado e menor consumo de energia graças ao Bluetooth 5, saiba que eles estão, ou não têm conhecimento, ou estão te enganando. Não é surpreendente, já que até os fabricantes de chips Bluetooth se confundem nas suas comunicações sobre as diferenças da nova versão do padrão, e alguns chips Bluetooth 5 suportam a quinta versão apenas para LE, mas utilizam 4.2 para Classic.
Atraso na transmissão de áudio
A quantidade de atraso (latência) no áudio depende de muitos fatores: do tamanho do buffer na pilha de áudio, na pilha Bluetooth e no próprio dispositivo de reprodução sem fio, além da latência algorítmica do codec.
A latência de codecs simples, como SBC, aptX e aptX HD, é bem baixa, variando de 3 a 6 ms, o que pode ser desprezado, mas codecs complexos, como AAC e LDAC, podem apresentar um atraso perceptível. A latência algorítmica do AAC para 44.1 kHz é de 60 ms. O LDAC, por sua vez, é em torno de 30 ms (com base em uma análise preliminar do código-fonte. Posso estar errado, mas não muito).
A latência final depende fortemente do dispositivo de reprodução, seu chipset e buffer. Durante os testes, obtive variações de 150 a 250 ms em diferentes dispositivos (usando o codec SBC). Se presumirmos que dispositivos que suportam codecs adicionais como aptX, AAC e LDAC utilizam componentes de qualidade e tamanhos de buffer pequenos, teríamos os seguintes atrasos típicos:
SBC: 150-250 ms
aptX: 130-180 ms
AAC: 190-240 ms
LDAC: 160-210 ms
Lembro que o aptX Low Latency não é suportado em sistemas operacionais, portanto, uma latência menor só pode ser alcançada com a combinação de transmissor + receptor ou transmissor + fones de ouvido/caixa de som, sendo que todos os dispositivos devem suportar esse codec.
Problemas com dispositivos, certificações e logotipos Bluetooth
Como distinguir um dispositivo de áudio de qualidade de uma imitação barata? Pela aparência, antes de tudo!
Nos fones de ouvido, alto-falantes e receptores baratos chineses:
- Falta da palavra “Bluetooth” na caixa e no dispositivo, frequentemente se usa “Wireless” e “BT”
- Falta do logotipo Bluetooth
na caixa ou no dispositivo - Não há um LED azul piscando
A ausência desses elementos indica que o dispositivo não foi certificado, o que significa que é potencialmente de baixa qualidade e problemático. Por exemplo, os fones de ouvido da Bluedio não são certificados pelo Bluetooth e não estão totalmente em conformidade com a especificação A2DP. Eles não conseguiriam passar na certificação.
Vamos considerar alguns dispositivos e suas caixas:
Todos esses são dispositivos não certificados. O manual pode ter o logotipo e o nome da tecnologia Bluetooth, mas o mais importante é que eles estejam na caixa e/ou no próprio dispositivo.
Se seus fones de ouvido ou caixa falarem "Ze bluetooth dewise is connecteda successfulle", isso também não indica sua qualidade:

Conclusão
O Bluetooth é capaz de substituir completamente os fones e headsets com fio? É, mas a um custo de qualidade inferior na conversação, maior latência na transmissão de áudio, que pode ser irritante em jogos, e uma infinidade de codecs proprietários que exigem royalties e aumentam o custo final tanto dos smartphones quanto dos fones de ouvido.
O marketing de codecs alternativos é muito forte: aptX e LDAC são apresentados como uma substituição tão esperada para o "antiquado e ruim" SBC, que está longe de ser tão ruim quanto é frequentemente considerado.
Descobriu-se que as limitações artificiais dos stacks Bluetooth em relação à taxa de bits do SBC podem ser contornadas, de modo que o SBC não fica atrás do aptX HD. Eu assumi a iniciativa e fiz um patch para o firmware do LineageOS:
Mais informações podem ser encontradas nos sites e .
Bônus: . Este arquivo costumava ser disponibilizado no site do Bluetooth publicamente, mas agora está acessível apenas para aqueles que ingressaram no Bluetooth SIG.
Fonte: habr.com

na caixa ou no dispositivo