Este artigo também está disponível em russo / Este artigo também está disponível em russoO mercado de massa de smartphones sem a tomada de áudio de 3,5 mm mudou a indústria dos fones de ouvido; os fones de ouvido sem fio Bluetooth se tornaram a principal maneira de ouvir música e se comunicar no modo de fone de ouvido para muitos usuários.
Os fabricantes de dispositivos Bluetooth raramente divulgam especificações detalhadas do produto, e os artigos de áudio Bluetooth na Internet são contraditórios e às vezes incorretos. Eles não informam sobre todos os recursos e geralmente publicam as mesmas informações falsas.
Vamos tentar entender o protocolo, os recursos das pilhas Bluetooth, fones de ouvido e alto-falantes, codecs Bluetooth para música e fala, descobrir o que afeta a qualidade do áudio transmitido e o atraso, aprender a capturar e decodificar informações sobre codecs suportados e outros recursos do dispositivo.
TL; DR :
- O codec SBC está OK
- Os fones de ouvido têm seu próprio equalizador por codec e configuração de pós-processamento
- O aptX não é tão bom quanto os anúncios dizem
- LDAC é uma falha de marketing
- A qualidade do áudio da voz ainda é baixa
- Os navegadores são capazes de executar codificadores de áudio compilados no WebAssembly a partir do C usando o emscripten, e eles nem ficam para trás.
Música via Bluetooth
Os componentes funcionais do Bluetooth são definidos por perfis - recursos documentados formalizados nas especificações. A música Bluetooth é transmitida usando um perfil de transmissão A2DP de áudio de alta qualidade. O padrão A2DP foi adotado em 2003 e não mudou drasticamente desde então.
O perfil padroniza um codec obrigatório - SBC, um codec de baixa complexidade computacional criado especificamente para Bluetooth e 3 codecs adicionais. Também é possível usar codecs específicos de fornecedor de sua própria implementação, não incluídos no A2DP.
Em junho de 2019, vivemos
nos quadrinhos XKCD com 14 codecs A2DP:
- SBC ← incluído no A2DP, suportado por todos os dispositivos
- MPEG-1/2 Layer 1/2/3 ← incluído no A2DP: MP3 amplamente conhecido, comum na TV digital MP2 e obsoleto MP1
- MPEG-2/4 AAC ← incluído no A2DP
- ← ATRAC ← codec antigo da Sony, incluído no A2DP
- ← Novo codec da Sony
- codec aptX ← de 1988
- aptX HD ← o mesmo que o aptX, mas com um perfil de codificação diferente
- aptX Low Latency ←
codec totalmente diferente, sem implementação de software aptX com buffer menor - aptX Adaptive ← outro codec da Qualcomm
- FastStream ← pseudo-codec, 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 um codec em primeiro lugar, se o Bluetooth possui
EDR , que permite transferir dados a 2 ou 3 Mb / s, enquanto o PCM de dois canais sem compressão de 16 canais requer apenas 1,4 Mb / s?
Transferência de dados Bluetooth
Existem dois tipos de transferência de dados no Bluetooth: Conexão Assíncrona Menos (ACL) para transferência assíncrona sem estabelecer uma conexão, e Conexão Síncrona Orientada (SCO), para transferência síncrona com o estabelecimento da conexão.
A transmissão de dados usa o esquema de divisão de tempo e altera o canal de frequência para cada pacote de dados transmitidos (Frequency-Hop / Time-Division-Duplex, FH / TDD). O tempo é dividido em intervalos de 625 microssegundos, chamados slots. Um dos dispositivos transmite em números pares de slots, o outro - em números ímpares. Um pacote transmitido pode ocupar 1, 3 ou 5 slots, dependendo do tamanho dos dados e do modo de transmissão. Se o pacote for grande o suficiente e mais de um modo de transmissão de slot for usado, os dados serão executados em slots pares e ímpares até o final da transmissão. Em um segundo, você pode receber e enviar até 1600 pacotes se cada um deles ocupar um slot e os dois dispositivos transmitirem e receberem dados continuamente.
As taxas de transferência de 2 ou 3 Mbps para EDR encontradas nos anúncios e no site da Bluetooth são a taxa máxima de transferência de dados de canal de todos os dados no total (incluindo os cabeçalhos técnicos de todos os protocolos para os dados a serem encapsulados) em duas direções simultaneamente. A taxa real de transferência de dados variará bastante.
O método assíncrono é usado para streaming de música, quase sempre usando pacotes do tipo 2-DH5 e 3-DH5, que transportam a quantidade máxima de dados nos modos EDR de 2 Mb / se 3 Mb / s respectivamente e ocupam 5 slots de divisão de tempo.
Representação esquemática da transmissão usando 5 slots por um dispositivo e 1 slot por outro (DH5 / DH1):

Devido ao princípio de compartilhamento de tempo, temos que aguardar um intervalo de tempo de 625 microssegundos após a transmissão de um pacote se o segundo dispositivo não nos transmitir nada ou transmitir um pacote pequeno e mais tempo se o segundo dispositivo executar a transmissão em pacotes grandes. Se mais de um dispositivo estiver conectado ao telefone (por exemplo, fones de ouvido, relógio inteligente e uma pulseira de fitness), o tempo de transmissão será compartilhado entre todos.
O fluxo de áudio A2DP requer encapsulamento em protocolos de transporte especiais L2CAP e AVDTP, que deduzem 16 bytes da quantidade máxima possível de carga útil de áudio no pacote.
1414 e 1429 kbps não são suficientes para transmitir áudio não compactado em condições reais, com uma banda barulhenta de 2,4 GHz e dados de serviço ocasionais. O EDR 3 Mbps exige a potência de transmissão e a relação sinal / ruído, portanto, mesmo no modo 3-DH5, nenhuma transmissão PCM confortável é possível, pois sempre haverá interrupções de curto prazo e tudo funcionará mais ou menos confiável apenas a uma distância de alguns metros.
Na prática, mesmo o fluxo de áudio de 990 kb / s (LDAC 990 kb / s) não é trivial para transmitir de forma confiável.
Vamos voltar aos codecs.
Sbc
Este codec é obrigatório para todos os dispositivos que suportam o padrão A2DP. O melhor e o pior codec ao mesmo tempo.
O SBC é um codec simples e computacionalmente rápido, com um modelo psicoacústico primitivo (com mascaramento auditivo simples) usando modulação por código de pulso adaptável (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 o atraso algorítmico, o número de amostras no algoritmo de alocação de blocos e bits, mas quase sempre os parâmetros usados na especificação são usados em todos os lugares:
Stereo comum , 8 bandas de frequência, 16 blocos no áudio frame, método de alocação de bits
Loudness .
O SBC pode ajustar o parâmetro de pool de bits dinamicamente, o que afeta diretamente a taxa de bits. Se o rádio estiver entupido, os pacotes forem perdidos ou os dispositivos estiverem distantes, a fonte de áudio poderá reduzir o pool de bits para evitar interrupções no áudio até que a conexão esteja estável novamente.
Os fabricantes da maioria dos fones de ouvido definem o valor máximo do parâmetro bitpool como 53, o que limita a taxa de bits a 328 kilobits por segundo ao usar o perfil recomendado.
Mesmo que o fabricante do fone de ouvido tenha definido o valor máximo de bitpool acima de 53 (o que é verdade, por exemplo, para Beats Solo³, JBL Everest Elite 750NC, Apple AirPods e também para alguns receptores e unidades de cabeça de carro), a maioria dos sistemas operacionais não permitirá o uso. taxas de bits mais altas devido a limites internos nas pilhas Bluetooth.
Além disso, alguns fabricantes definem um valor máximo baixo de bitpool para alguns dispositivos. Por exemplo, no Bluedio T é igual a 39, no Samsung Gear IconX é 37, o que fornece uma qualidade de som ruim.
As limitações artificiais foram introduzidas nas pilhas Bluetooth, provavelmente devido à quantidade insuficiente de testes de certificação e à incompatibilidade de alguns dispositivos com grandes valores de Bitpool ou perfis atípicos, mesmo que eles se reportem a apoiá-los. Era mais fácil para os desenvolvedores restringir as opções a valores conhecidos de um perfil recomendado, em vez de criar um banco de dados de dispositivos incompatíveis. Embora agora eles façam isso para outras funções que funcionam incorretamente.
O SBC aloca dinamicamente bits de quantização para bandas de frequência, atuando de baixo para cima, com diferentes pesos. Se toda a taxa de bits foi usada para frequências baixas e médias, as frequências superiores serão cortadas (substituídas pelo silêncio).
Exemplo de SBC 328 kbps. O áudio original está na parte superior, o áudio codificado em SBC está na parte inferior. As faixas são trocadas para comparação. O fluxo de áudio no arquivo de vídeo é compactado usando o codec FLAC sem perdas. O uso do FLAC no contêiner mp4 não é oficialmente padronizado, por isso o áudio pode não ser reproduzido no seu navegador (deve funcionar nas versões mais recentes do Chrome e Firefox da área de trabalho). Se você não tiver som, poderá fazer o download do arquivo e abri-lo em qualquer player de vídeo.
ZZ Top - Homem Vestido AfiadoO momento da comutação é visível no espectrograma: o SBC corta periodicamente sons baixos acima de 17,5 kHz e não aloca bits para uma banda acima de 20 kHz. O espectrograma é clicável (1,7 MB).

Não consigo ouvir a diferença entre o original e o SBC nesta faixa.
Vamos pegar algo mais novo e simular a qualidade de áudio dos fones de ouvido Samsung Gear IconX com Bitpool 37 (o topo é o fluxo original, o fundo é SBC 239 kbps, o FLAC é usado para áudio).
Auto-indulgência irracional - TestemunhaOuço crepitar, um efeito estéreo menor e um desagradável "barulho" de vocais em altas frequências.
Resumindo, o SBC é um codec muito flexível: pode ser configurado para baixa latência, oferece excelente qualidade de áudio em altas taxas de bits (452+ kb / s) e é bastante bom para a maioria das pessoas em alta qualidade padrão (328 kb / s) . No entanto, existem algumas razões pelas quais o codec é famoso por sua baixa qualidade de som: o padrão A2DP não define perfis fixos (apenas fornece recomendações), os desenvolvedores de pilhas Bluetooth definem limites artificiais no Bitpool, os parâmetros do áudio transmitido não são exibidos na interface do usuário, os fabricantes de fones de ouvido são livres para definir suas configurações e nunca especificar o valor do Bitpool nas características técnicas do produto.
O parâmetro bitpool afeta diretamente a taxa de bits somente em um perfil. O mesmo valor de bitpool de 53 pode produzir a taxa de bits de 328 kbps com o perfil de alta qualidade recomendado e 1212 kbps no modo
Dual Channel e 4 bandas de frequência, e é por isso que os autores do SO também definem limites na taxa de bits além do bitpool. Suponho que a situação surgiu devido à falha no padrão A2DP: era necessário negociar a taxa de bits, não o bitpool.
Tabela de recursos do SBC suportados em diferentes sistemas operacionais:
* O Bitpool diminui, mas não aumenta automaticamente em caso de condições de transmissão variáveis. Para restaurar o pool de bits, é necessário interromper a reprodução, aguardar alguns segundos e reiniciar o áudio.
** O valor padrão depende das configurações da pilha especificadas ao compilar o firmware. No Android 8 / 8.1, a frequência é de 44,1 kHz ou 48 kHz, dependendo das configurações durante a compilação, outras versões suportam 44,1 kHz e 48 kHz simultaneamente.
*** O valor do Bitpool pode ser ajustado usando o software Bluetooth Explorer.aptX e aptX HD
O aptX é um codec simples e computacionalmente rápido, sem psicoacústica, que usa modulação por código de pulso diferencial adaptativo (
ADPCM ). Apareceu por volta de 1988 (a data de depósito da
patente é fevereiro de 1988). Antes do Bluetooth, era usado principalmente para equipamentos de áudio sem fio profissionais. Atualmente de propriedade da Qualcomm, exige taxas de licenciamento e licença. Em 2014: pagamento único de $ 6.000 e 1 $ 1 por dispositivo, para lotes de até 10.000 dispositivos (
fonte , página 16).
O codec possui apenas um parâmetro - taxa de amostragem. Embora também haja opção de configuração de número / modo de canal, todos os dispositivos que conheço suportam apenas estéreo (mais de 70 modelos).
* Versões até 7 requerem modificação da pilha Bluetooth. O codec é suportado apenas se o fabricante do dispositivo Android tiver licenciado o uso de codec da Qualcomm (se o SO tiver bibliotecas de codificação incluídas).O aptX divide o áudio em 4 bandas de frequência e os quantifica com o mesmo número de bits continuamente: 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 ( valores para a taxa de amostragem de 44,1 kHz).
Exemplo de áudio do aptX (áudio superior - original, inferior - áudio codificado pelo aptX, espectrogramas apenas dos canais esquerdos, som em FLAC):
As frequências superiores são um pouco mais vermelhas, mas a diferença não é audível.
Devido à distribuição fixa de bits de quantização, o codec não pode "transferir os bits" para as frequências que mais precisam deles. Diferentemente do SBC, o aptX não "cortará" as frequências, mas adicionará ruído de quantização a elas, reduzindo a faixa dinâmica do áudio.
Não devemos assumir que o uso, por exemplo, de 2 bits para uma banda reduza a faixa dinâmica para 12 dB: o ADPCM permite que até 96 dB de faixa dinâmica sejam utilizados, mesmo com 2 bits de quantização, mas apenas com um certo tipo de sinal .
O ADPCM armazena a diferença entre o valor atual e o próximo na representação numérica, em vez de usar o valor absoluto, como no PCM. Isso reduz os requisitos para o número de bits necessários para armazenar as mesmas informações (sem perda) ou quase as mesmas (com erro de arredondamento relativamente pequeno). Para reduzir erros de arredondamento, são aplicadas tabelas de fatores.
Ao criar o codec, os autores calcularam os coeficientes ADPCM em um conjunto de arquivos de áudio de música. Quanto mais próximo o sinal de áudio do conjunto de músicas em que as tabelas foram construídas, menos erros de quantização (ruído) são gerados pelo aptX.
Por esse motivo, os testes sintéticos sempre produzem resultados piores que a música. Fiz um exemplo sintético especial no qual o aptX apresenta um desempenho ruim - uma onda senoidal de 12,4 kHz (sinal original superior, inferior - aptX. Som no FLAC. Estupro na orelha, diminua o volume!):
Gráfico de espectro:

O barulho é claramente audível.
No entanto, se você gerar uma onda senoidal com uma amplitude menor para que fique mais silenciosa, o ruído também se tornará mais silencioso, o que indica uma ampla faixa dinâmica:

Para ouvir a diferença entre uma faixa de música original e uma compactada, você pode inverter um dos sinais e adicionar faixas aos respectivos canais. Essa abordagem é incorreta em geral e não daria resultados adequados com codecs mais complexos, mas para o uso de codecs da classe ADPCM desse método é razoável.
A diferença entre o áudio original e o codificado por aptXA diferença da raiz quadrada média dos sinais está no nível de -37,4 dB, o que não é muito para essa música compactada.
aptX HD
O aptX HD não é um codec independente - é um perfil de codificação aprimorado do aptX. As alterações afetam o número de bits alocados para a codificação de bandas 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 (valores para 44,1 kHz) .
* Versões até 7 requerem modificação da pilha Bluetooth. O codec é suportado apenas se o fabricante do dispositivo Android tiver licenciado o uso de codec da Qualcomm (se o SO tiver bibliotecas de codificação incluídas).Esse codec é menos comum que o aptX: parece exigir licenciamento separado da Qualcomm e taxas de licenciamento separadas.
Vamos repetir o exemplo com uma onda senoidal de 12,4 kHz:

Muito melhor do que com o aptX, mas ainda barulhento.
Latência baixa do aptX
A versão de baixa latência do aptX não é um codec independente. Difere apenas nas configurações de latência e buffers aplicados no lado da unidade de áudio. Além disso, esse é um aptX comum.
Foi projetado para transmissão de áudio interativa com baixa latência (filmes, jogos), onde o atraso do som não pode ser ajustado programaticamente. Há
implementação de software de driver Dell disponível para chips Intel Bluetooth . Também é suportado por transmissores, receptores, fones de ouvido e alto-falantes, mas não por smartphones.
Aac
AAC, ou Advanced Audio Coding, é um codec computacionalmente sofisticado com um modelo psicoacústico complexo. É amplamente utilizado para áudio na Internet, o segundo codec mais popular depois do MP3. Requer taxas de licenciamento e licença: pagamento único de US $ 15.000 (ou US $ 1000 para empresas com menos de 15 funcionários) + US $ 0,98 para os primeiros 500.000 dispositivos (
fonte ).
O codec é padronizado dentro das especificações MPEG-2 e MPEG-4 e, apesar de frequentes descrenças, não pertence à Apple.
* apenas em dispositivos cujos fabricantes pagaram royaltiesO iOS e o macOS contêm o melhor codificador Apple AAC disponível até o momento, produzindo a mais alta qualidade de áudio possível. O Android usa o segundo melhor codificador Fraunhofer FDK AAC, mas também pode usar vários codificadores de hardware incorporados na plataforma (SoC) com uma qualidade de codificação desconhecida.
De acordo com testes recentes publicados no site SoundGuys , a qualidade da codificação AAC em diferentes telefones Android varia muito:

A maioria dos dispositivos de áudio sem fio tem uma taxa de bits máxima de 320 kbps para o AAC, alguns suportam apenas 256 kbps. Outras taxas de bits são extremamente raras.
O AAC oferece excelente qualidade nas taxas de bits de 320 e 256 kb / s, mas é propenso a
perda de geração em conteúdo já compactado, no entanto, é difícil ouvir diferenças entre o original e o AAC de 256 kb / s no iOS, mesmo com várias codificações consecutivas. Para MP3 320 kbps codificados em AAC 256 kbps, a perda pode ser negligenciada.
Assim como em qualquer outro codec Bluetooth, qualquer música é decodificada e depois codificada com um codec. Ao ouvir música no formato AAC, ele é decodificado pelo sistema operacional e depois codificado no AAC novamente, para transmissão via Bluetooth. Isso é necessário para misturar vários fluxos de áudio, como músicas e notificações de novas mensagens. iOS não é excepção. Você pode encontrar muitas instruções de que o iOS não transcodifica músicas no formato AAC para transmissão via Bluetooth, o que está incorreto.
O AAC tem muitas extensões para o método de codificação padrão. Um deles - Scalable to Lossless (SLS) - é padronizado para Bluetooth e permite transferir áudio sem perdas. Infelizmente, nenhum suporte SLS foi encontrado em dispositivos existentes. Uma extensão para reduzir o atraso da transmissão AAC-LD (Atraso baixo) não é padronizada para Bluetooth.
MP1 / 2/3
Os codecs MPEG-1/2 Parte 3 consistem em MP3 bem conhecido e amplamente usado, o MP2 menos comum (usado principalmente em TV e rádio digital) e o MP1 completamente desconhecido.
Os codecs MP1 e MP2 antigos não são compatíveis, não encontrei 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 em nenhuma pilha moderna de sistema operacional. Parece que a pilha BlueSoleil de terceiros para Windows pode codificar MP3 se você editar manualmente o arquivo de configuração, mas na minha instalação ele leva ao BSoD no Windows 10. O resultado: você não pode realmente usar um codec para áudio Bluetooth.
Anteriormente, em 2006-2008, antes que o padrão A2DP fosse amplamente usado em dispositivos, as pessoas ouviam música MP3 no fone de ouvido Nokia BH-501 por meio do programa MSI BluePlayer, disponível no Symbian e no Windows Mobile. Naquela época, a arquitetura do sistema operacional dos smartphones permitia o acesso a muitas funções de baixo nível; era possível instalar a pilha Bluetooth de terceiros no Windows Mobile.
A patente mais recente do codec MP3 expirou. O uso do codec não exige taxas de licença desde 23 de abril de 2017.
Se a patente mais antiga mencionada nas referências mencionadas for tomada como medida, a tecnologia MP3 se tornará livre de patentes nos Estados Unidos em 16 de abril de 2017, quando a patente US 6.009.399, mantida e administrada pela Technicolor, expirou.
Fonte: www.iis.fraunhofer.de/en/ff/amm/prod/audiocodec/audiocodecs/mp3.htmlLDAC
Codec "Hi-Res" novo e promovido ativamente da Sony que suporta taxas de amostragem de até 96 kHz e profundidade de 24 bits, com uma taxa de bits de até 990 kbps. É anunciado como um codec audiófilo, como um substituto para os codecs Bluetooth existentes. Possui uma função de taxa de bits adaptável que sintoniza a taxa de bits dependendo das condições de transmissão do rádio.
O codificador LDAC (
libldac ) está incluído na distribuição padrão do Android, a codificação é suportada em qualquer smartphone Android a partir da versão 8. do sistema operacional. Os decodificadores de software não estão disponíveis gratuitamente e a especificação do codec não está disponível para o público em geral, no entanto, à primeira vista no codificador, os internos são semelhantes ao codec
ATRAC9 da Sony usado no PlayStation 4 e Vita: ambos trabalham no domínio da frequência, usam uma transformada discreta de co-seno modificada (MDCT) e compressão Huffman.
O LDAC divide o áudio em 12 ou 16 bandas de frequência: 12 são usados para 44,1 e 48 kHz, 16 para 88,2 e 96 kHz.
O LDAC é suportado quase exclusivamente apenas pelos fones de ouvido da Sony. Às vezes, a decodificação LDAC é encontrada em fones de ouvido e DACs de outros fabricantes, mas muito raramente.
O marketing do codec LDAC Hi-Res prejudica suas propriedades técnicas: não é aconselhável gastar a taxa de bits para codificar e transmitir frequências que não são audíveis para o ouvido humano e uma profundidade de bits mais alta quando ainda não é possível comprimir sem perdas áudio com qualidade de CD. Felizmente, o codec possui dois modos de operação: transmissão de áudio por CD e transmissão de áudio em alta resolução. No primeiro caso, apenas 44,1 kHz / 16 bits são transmitidos pelo ar.
Como o decodificador de software LDAC não está disponível gratuitamente, não é possível testar o codec sem dispositivos adicionais que decodifiquem o LDAC. De acordo com os resultados do teste LDAC no DAC com seu suporte, que os engenheiros do SoundGuys.com conectaram via saída digital e gravaram o som de saída dos sinais de teste, o LDAC 660 e 990 kbit / s no modo de qualidade de CD fornece um sinal relação ruído / ruído um pouco melhor que a do aptX HD. Este é um bom resultado.
Fonte: www.soundguys.com/ldac-ultimate-bluetooth-guide-20026O LDAC também suporta taxa de bits dinâmica fora dos perfis estabelecidos - de 138 kbps a 990 kbps, mas até onde eu sei, o Android usa apenas perfis padronizados de 303/606/909 e 330/660/990 kbps.
Outros codecs
Outros codecs A2DP não são amplamente utilizados. Seu suporte está quase completamente ausente ou está disponível apenas em alguns modelos de fones de ouvido e smartphones.
O codec ATRAC padronizado 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 dos dispositivos de transmissão e recepção. O HWA LHDC é muito novo e suporta apenas três (?) Dispositivos.
Suporte de codec para dispositivos de áudio
Nem todos os fabricantes publicam informações precisas sobre codecs suportados em determinados fones de ouvido, alto-falantes, receptores ou transmissores sem fio. Às vezes acontece que determinado codec é suportado apenas para transmissão, mas não para recepção (relevante para transmissores-receptores combinados), embora o fabricante simplesmente declare "suporte", sem anotações (presumo que seja o culpado o licenciamento separado de codificadores e decodificadores) . Nos dispositivos mais baratos, você nunca encontra o suporte declarado para o aptX.
Infelizmente, os codecs suportados não são exibidos em nenhum lugar na maioria das interfaces do sistema operacional. As informações sobre o codec usado atualmente estão presentes apenas no Android, começando na versão 8 e no macOS. No entanto, mesmo nesses sistemas operacionais, apenas os codecs suportados pelo telefone / computador e fones de ouvido serão exibidos.
Como descobrir quais codecs o dispositivo suporta? Captura e análise de despejo de tráfego com opções de negociação A2DP!
Isso pode ser feito no Linux, macOS e Android. No Linux, você pode usar o Wireshark ou o hcidump, no macOS, o Bluetooth Explorer pode ser usado e, no Android, o recurso Bluetooth HCI dump save disponível nas ferramentas do desenvolvedor. Você receberá um despejo no formato btsnoop, que pode ser aberto no analisador Wireshark.
NOTA : você precisará conectar-se do smartphone / computador aos fones de ouvido para capturar o dump correto, e não vice-versa (não importa o quão bobo pareça)! Os fones de ouvido também podem estabelecer uma conexão com o smartphone ou PC; nesse caso, solicitarão uma lista de codecs do telefone e não divulgarão seu próprio conjunto de codecs. Para garantir que você capture um dump correto, primeiro pare o dispositivo e, enquanto grava o dump, emparelhe o telefone com os fones de ouvido.
Use o seguinte filtro de exibição para ocultar tráfego irrelevante:
btavdtp.signal_id
Como resultado, você deve ver algo semelhante:

Ao clicar no comando GetCapabilities, você pode obter informações detalhadas do codec.

O Wireshark não conhece todos os identificadores de codec; portanto, alguns codecs precisarão ser descriptografados manualmente, dependendo da tabela de identificadores abaixo:
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
Você pode descobrir se o seu dispositivo suporta EDR 3 Mbps usando o seguinte filtro:
bthci_evt.code==0x0b

Para não analisar os despejos manualmente,
criei um serviço que analisará tudo automaticamente:
btcodecs.valdikss.org.ruO software Windows
Bluetooth Tweaker simples, mas útil, mostra codecs suportados e atualmente usados, além de outras funcionalidades.
Os usuários do Linux também podem usar o utilitário avinfo do pacote BlueZ.
Comparação de codec. Qual codec é melhor?
Cada codec tem suas vantagens e desvantagens.
O aptX e o aptX HD usam perfis codificados que não podem ser alterados sem modificar o codificador e o decodificador. Nem o smartphone nem o fabricante do fone de ouvido podem alterar a taxa de bits ou os fatores de codificação do aptX. A Qualcomm, proprietária do codec, distribui o codificador de referência como uma biblioteca para os licenciados. Esses fatos são o forte do aptX - você sabe com antecedência que qualidade de som obterá, mas nada.
A SBC, pelo contrário, possui muitos parâmetros ajustáveis, taxa de bits dinâmica (o codificador pode reduzir o parâmetro bitpool se o rádio estiver congestionado) e não possui perfis codificados, mas apenas a "qualidade média" e a "alta qualidade" recomendadas. que foram adicionados à especificação A2DP em 2003. “Alta qualidade” não é mais tão alto para os padrões modernos, e a maioria das pilhas Bluetooth não permite o uso de parâmetros melhores do que no perfil “alta qualidade”, embora não haja técnicos limitações para isso.
O Bluetooth SIG não fornece o codificador de referência SBC na forma de uma biblioteca e os fabricantes os implementam eles mesmos.
Essas são as fraquezas da SBC - nunca é claro antecipadamente qual a qualidade do som que se espera de um dispositivo específico. O SBC pode produzir qualidade de som baixa e muito alta, mas o último é 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 produzir uma qualidade indistinguível do original, mas a prática, a julgar pelos testes do laboratório SoundGuys em diferentes dispositivos Android, não é confirmada. Provavelmente, a falha está nos codificadores de áudio de hardware de baixa qualidade incorporados em vários chipsets de telefone. Faz sentido usar o AAC apenas em dispositivos Apple; com o Android, é melhor ficar com o aptX / HD e LDAC.
Dispositivos que oferecem suporte a codecs alternativos geralmente são de qualidade superior, simplesmente porque não faz sentido pagar royalties por dispositivos muito baratos e de baixa qualidade para usar esses codecs. De acordo com meus testes, a SBC parece muito boa em hardware de alta qualidade.
Eu criei um serviço da web que codifica áudio para SBC, aptX e aptX HD em tempo real, diretamente no seu navegador. Você pode usá-lo para testar esses codecs de áudio sem realmente transmitir áudio via Bluetooth, em qualquer fone de ouvido, alto-falante e sua música favorita, além de alterar os parâmetros de codificação diretamente durante a reprodução de áudio:
btcodecs.valdikss.org.ru/sbc-encoderO serviço usa bibliotecas de codificação SBC do projeto BlueZ e libopenaptx do ffmpeg, que são compiladas no WebAssembly e JavaScript do C via emscripten, para execução em um navegador. Quem poderia sonhar com esse futuro!
Aqui está o que parece:
Observe como o nível de ruído muda após 20 kHz para diferentes codecs. Nenhuma frequência acima de 20 kHz está presente no arquivo MP3 original.
Tente alternar codecs e veja se você consegue ouvir a diferença entre o SBC 53 Joint Stereo original (o perfil padrão e o mais comum) e o aptX / aptX HD.
Mas eu posso ouvir a diferença entre codecs em fones de ouvido !
As pessoas que não ouvem a diferença entre codecs enquanto testam por meio de um serviço da Web afirmam ouvir quando ouvem música com fones de ouvido Bluetooth. Infelizmente, isso não é uma piada ou um efeito placebo: a diferença é realmente audível, mas não é causada pela diferença
nos codecs .
A grande maioria dos chipsets de áudio Bluetooth usados no recebimento de dispositivos sem fio está equipada com um processador de sinal digital (DSP) que implementa um equalizador,
compander , extensor estéreo e outras coisas projetadas para melhorar (ou alterar) o som. Os fabricantes de hardware Bluetooth podem configurar o DSP
para cada codec separadamente e, ao alternar entre codecs, o ouvinte sentirá que pode ouvir a diferença no desempenho dos codecs quando, na realidade, estiver ouvindo diferentes configurações do DSP.
Pipeline de processamento de áudio Kalimba DSP nos SoCs da CSR / Qualcomm
Ativação de várias funções DSP para cada codec e saída separadamenteAlguns dispositivos de segmento premium estão equipados com software que permite ajustar os parâmetros DSP, mas a maioria dos fones de ouvido mais baratos não possui esse recurso, e os usuários não podem desativar o pós-processamento de som usando ferramentas padrão.
Recursos funcionais dos dispositivos
A versão atual do padrão A2DP possui uma função
absoluta de controle de volume , permitindo controlar o ganho de saída com comandos especiais usando o protocolo AVRCP, em vez de reduzir programaticamente o volume do próprio fluxo de áudio. Se você alterar o volume dos fones de ouvido e a alteração não estiver sincronizada com o volume do telefone, isso significa que seus fones de ouvido ou telefone não suportam esta função. Nesse caso, faz sentido ouvir sempre a música no volume máximo do telefone, ajustando o volume real com os botões do fone de ouvido - a relação sinal / ruído será melhor e a qualidade do áudio
deverá ser mais alta.
Na realidade, existem situações tristes. Pelo RealForce OverDrive, os fones de ouvido D1 usam um compander forte para SBC e um aumento no volume leva a um aumento no nível de sons baixos, e o volume dos sons altos não muda (ocorre a compressão do sinal). Por esse motivo, é necessário definir o volume no computador para cerca da metade; nesse caso, praticamente não há efeito de compactação.
De acordo com minhas observações, todos os fones de ouvido com codecs adicionais suportam a função de controle de volume absoluto, que é provavelmente um dos requisitos para a certificação de codecs.
Alguns fones de ouvido suportam a
conexão de dois dispositivos ao mesmo tempo . Isso permite, por exemplo, ouvir música de um computador e receber chamadas de um telefone. No entanto, você deve estar ciente de que codecs alternativos estão desabilitados nesse modo e apenas o SBC é usado.
O recurso
Relatório de atraso do AVDTP 1.3 permite que os fones de ouvido relatem um atraso a um dispositivo de envio que realmente reproduz o som. Isso ajuda a ajustar a sincronização do áudio com o vídeo enquanto assiste aos arquivos de vídeo: se ocorrer um congestionamento de rádio, o áudio não ficará atrás do vídeo, mas, pelo contrário, o vídeo será mais lento pelo player de vídeo até que o áudio e o vídeo sejam sincronizado novamente.
O recurso é suportado por muitos fones de ouvido, Android 9+ e Linux com PulseAudio 12.0+. Não estou ciente do suporte em outro sistema operacional.
Comunicação duplex por Bluetooth. Transmissão de voz.
Conexão Síncrona Orientada (SCO) e sua versão aprimorada Conexão Síncrona Avançada Orientada (eSCO) são os modos usados para a transmissão de voz Bluetooth. O modo permite transmitir som e voz estritamente em ordem, com uma velocidade simétrica de envio e recebimento, sem aguardar a confirmação da transmissão e reenvio de pacotes. Isso reduz o atraso geral na transmissão de áudio pelo canal de rádio, mas impõe sérias restrições à quantidade de dados transmitidos por unidade de tempo e afeta adversamente a qualidade do áudio.
Quando esse modo é usado, a voz do microfone e o áudio são transmitidos para os fones de ouvido com a mesma qualidade.
A transferência dos dados em si é padronizada pelo perfil HSP, que também descreve funções adicionais, como operação dos botões de controle de volume, a retirada do fone e a desconexão.
Infelizmente, a partir de 2019, a qualidade da transmissão de voz via Bluetooth ainda é baixa e não está claro por que o Bluetooth SIG não está fazendo nada a respeito.
CVSD
O codec básico de transferência de fala
CVSD foi padronizado em 2002 e é suportado por todos os dispositivos Bluetooth bidirecionais. Ele fornece transmissão de áudio com uma frequência de amostragem de 8 kHz, que corresponde à qualidade da telefonia convencional com fio.
Um exemplo de gravação neste codec .
mSBC
O codec mSBC adicional foi padronizado em 2009 e, em 2010, havia chips que já o usavam para transmissão de voz. O mSBC é amplamente suportado por vários dispositivos.
Este não é um codec independente, mas o SBC usual do padrão A2DP, com um perfil de codificação fixo: 16 kHz, mono, bitpool 26.
Um exemplo de gravação neste codec .
Não é brilhante, mas muito melhor que o CVSD, embora ainda seja desagradável usá-lo para se comunicar via Internet, especialmente quando você usa fones de ouvido para se comunicar no jogo - o som do jogo também será transmitido a uma frequência de amostragem de 16 kHz .
Faststream
A RSC decidiu desenvolver ainda mais a idéia de reutilizar a SBC. Para contornar as limitações do protocolo SCO e usar taxas de bits mais altas, o CSR seguiu o outro caminho - eles adicionaram suporte para áudio SBC bidirecional ao padrão A2DP de transmissão de áudio unidirecional e o chamaram de "FastStream".
O FastStream transmite som estéreo de 44,1 ou 48 kHz para os alto-falantes com uma taxa de bits de 212 kbps. 16 kHz com uma taxa de bits de 72 kbps (um pouco melhor que a do mSBC) é usado para transmitir áudio de um microfone. Tais parâmetros são muito mais adequados para a comunicação em jogos online - o som do jogo e os companheiros de equipe serão de alta qualidade.
Um exemplo de gravação neste codec (+
áudio do microfone, o mesmo que no mSBC ).
A empresa apresentou um hack interessante, mas devido ao fato de que ela contradiz o padrão A2DP, apenas alguns dos transmissores da empresa o suportam (que funcionam como uma placa de áudio USB e não como um dispositivo Bluetooth), mas não receberam suporte na pilha Bluetooth. O número de fones de ouvido com suporte ao FastStream não é tão pequeno.
No momento, o suporte ao FastStream está disponível apenas
na forma de um patch para Linux PulseAudio da Pali Rohár, que não está incluído na ramificação do programa principal.
Latência baixa do aptX
Para a surpresa, o aptX Low Latency também suporta áudio bidirecional, implementando o mesmo princípio do FastStream.
Não há como usar esse recurso do codec em nenhum lugar - não há suporte para decodificação de baixa latência em qualquer sistema operacional e em qualquer pilha Bluetooth que eu conheça.
Bluetooth 5, clássico e baixa energia
Há muita confusão em torno das especificações e versões do Bluetooth devido à presença de dois padrões incompatíveis sob uma marca, ambos amplamente utilizados para propósitos diferentes.
Existem dois protocolos Bluetooth diferentes e incompatíveis: Bluetooth Classic e Bluetooth Low Energy (LE, também conhecido como Bluetooth Smart). Há também um terceiro protocolo, o Bluetooth High Speed, mas não é comum e não é usado em eletrodomésticos.
A partir do Bluetooth 4.0, as alterações nas especificações se concentraram principalmente no Bluetooth Low Energy, enquanto a versão Classic recebeu apenas pequenas melhorias.
Lista de alterações entre o Bluetooth 4.2 e o Bluetooth 5:
9 ALTERAÇÕES DA v4.2 PARA 5.0
9.1 NOVOS RECURSOS
Vários novos recursos foram introduzidos no Bluetooth Core Specification 5.0 Release. As principais áreas de melhoria são:
• Máscara de disponibilidade de slot (SAM)
• 2 ms / s PHY para LE
• Longo alcance LE
• Publicidade não conectável de ciclo de serviço alto
• Extensões de publicidade LE
• Algoritmo de seleção de canal LE # 2
9.1.1 Recursos adicionados no CSA5 - Integrado na v5.0
• Maior potência de saída
Fonte: www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=421043 (página 291)Somente uma alteração afetou a versão Classic dentro da especificação do Bluetooth 5: suporte para a tecnologia Slot Availability Mask (SAM), projetada para melhorar o compartilhamento de radiofrequência. Todas as outras alterações afetam apenas o Bluetooth LE (o mesmo se aplica à maior potência de saída).
Todos os dispositivos de áudio usam apenas o Bluetooth Classic. Fones de ouvido e alto-falantes não podem ser conectados via Bluetooth Low Energy. Não há um padrão para transmitir áudio usando LE. O padrão A2DP, usado para transmitir áudio de alta qualidade, funciona apenas através do Bluetooth Classic, e não há equivalente no LE.
Resumindo: a compra de dispositivos de áudio com Bluetooth 5 somente por causa da nova versão do protocolo não faz sentido. O Bluetooth 4.0 / 4.1 / 4.2 no contexto da transmissão de áudio funcionará da mesma maneira.
Se o anúncio do novo fone de ouvido mencionar um raio dobrado e reduzir o consumo de energia graças ao Bluetooth 5, você deve saber que eles não entendem a si mesmos ou o enganam. Não é de admirar que até os fabricantes de chips Bluetooth confundam a diferença nos dois padrões, e alguns chips Bluetooth 5 suportam a quinta versão apenas para LE e usam o 4.2 para Classic.
Latência de transmissão de áudio
A quantidade de latência (atraso) no áudio depende de muitos fatores: o tamanho do buffer na biblioteca de áudio, na pilha Bluetooth e no próprio dispositivo de reprodução, o atraso algorítmico do codec.
O atraso de codecs simples, como SBC, aptX e aptX HD, é bastante pequeno, cerca de 3-6 ms, o que pode ser negligenciado, mas codecs complexos, como AAC e LDAC, podem causar um atraso perceptível. O atraso algorítmico AAC para 44,1 kHz é 60 ms. LDAC - cerca de 30 ms (por uma análise aproximada do código fonte. Posso estar errado, mas não muito.)
O atraso total é altamente dependente do dispositivo de reprodução, seu chipset e buffer. Durante os testes, obtive uma propagação de 150 a 250 ms em diferentes dispositivos (com o codec SBC). Se assumirmos que os dispositivos com suporte para codecs adicionais aptX, AAC e LDAC usam componentes de melhor qualidade e um pequeno tamanho de buffer, obtemos os seguintes valores típicos de latência:
SBC: 150-250 ms
aptX: 130-180 ms
AAC: 190-240 ms
LDAC: 160-210 ms
Deixe-me lembrá-lo: o aptX Low Latency não é suportado em sistemas operacionais, e é por isso que um atraso menor pode ser obtido apenas com um pacote de transmissor + receptor ou transmissor + fone de ouvido / alto-falante, e todos os dispositivos devem suportar esse codec.
Os problemas com certificações, logotipos e dispositivos
Como distinguir um dispositivo de áudio de alta qualidade de artesanato barato? Pela aparência, em primeiro lugar!
Auscultadores, alto-falantes e receptores chineses baratos têm:
- Nenhuma palavra "Bluetooth" na caixa e no dispositivo, geralmente substituída por "Sem fio" e "BT"
- Nenhum logotipo Bluetooth
na caixa ou dispositivo - Nenhum LED azul piscando
A ausência desses elementos indica que o dispositivo não foi certificado, o que significa que é potencialmente problemático ou de baixa qualidade. Por exemplo, os fones de ouvido Bluedio não são certificados por Bluetooth e não estão totalmente de acordo com a especificação A2DP. Eles não teriam passado no processo de certificação.
Vejamos vários dispositivos e caixas a partir deles:



Estes são todos os dispositivos não certificados. As instruções podem ter o logotipo e o nome "Bluetooth", mas o mais importante - esses elementos devem estar presentes no dispositivo ou na própria caixa.
Se seus fones de ouvido ou alto-falante disserem que "o bluetooth Ze está conectado com êxito", isso também não diz respeito à qualidade:
Conclusão
O Bluetooth pode substituir completamente os fones de ouvido e fones de ouvido com fio? Provavelmente, mas ao custo da voz de baixa qualidade, maior latência na transmissão de som, o que pode ser irritante nos jogos, e uma infinidade de codecs proprietários que exigem taxas de licença e aumentam o custo final de smartphones e fones de ouvido.
O marketing de codecs alternativos é muito forte: o aptX e o LDAC são apresentados como uma substituição esperada da SBC “desatualizada e ruim”, que está longe de ser tão ruim quanto se pensa.
Como se viu, as limitações artificiais das pilhas Bluetooth na SBC podem ser contornadas, de modo que a SBC fique a par do aptX HD. Tomei a iniciativa e fiz um patch para o firmware LineageOS:
Modificando a pilha Bluetooth para melhorar o som em fones de ouvido sem codecs AAC, aptX e LDACMais informações sobre codecs podem ser encontradas nos sites
SoundGuys e
SoundExpert .
Bônus: codificador de referência SBC, informações de fluxo de bits A2DP e arquivos de teste . Este arquivo foi publicado anteriormente no site da Bluetooth publicamente, mas agora está disponível apenas para aqueles que aderiram ao Bluetooth SIG.