Áudio via Bluetooth: detalhes máximos sobre perfis, codecs e dispositivos

Áudio via Bluetooth: detalhes máximos sobre perfis, codecs e dispositivos

Devido à produção em massa de smartphones sem entrada de áudio de 3.5 mm, os fones de ouvido Bluetooth sem fio se tornaram a principal forma de ouvir música e se comunicar no modo fone de ouvido.
Os fabricantes de dispositivos sem fio nem sempre escrevem especificações detalhadas dos produtos, e os artigos sobre áudio Bluetooth na Internet são contraditórios, às vezes incorretos, não falam sobre todos os recursos e muitas vezes copiam as mesmas informações que não correspondem à realidade.
Vamos tentar entender o protocolo, os recursos das pilhas de sistema operacional Bluetooth, fones de ouvido e alto-falantes, codecs Bluetooth para música e fala, descobrir o que afeta a qualidade do som transmitido e a latência, aprender como coletar e decodificar informações sobre codecs suportados e outros dispositivos capacidades.

TL, DR:

  • SBC - codec normal
  • Os fones de ouvido possuem seu próprio equalizador e pós-processamento para cada codec separadamente
  • aptX não é tão bom quanto anunciado
  • LDAC é uma besteira de marketing
  • A qualidade da chamada ainda é ruim
  • Você pode incorporar codificadores de áudio C em seu navegador compilando-os no WebAssembly via emscripten, e eles não ficarão muito lentos.

Música via Bluetooth

O componente funcional do Bluetooth é determinado por perfis - especificações de funções específicas. O streaming de música Bluetooth usa um perfil de transmissão de áudio unidirecional A2DP de alta qualidade. O padrão A2DP foi adotado em 2003 e não mudou significativamente desde então.
Dentro do perfil, são padronizados 1 codec obrigatório de baixa complexidade computacional SBC, criado especificamente para Bluetooth, e 3 adicionais. Também é possível usar codecs não documentados de sua própria implementação.

Em junho de 2019, estamos na história em quadrinhos do xkcd com 14 codecs A2DP:

  • SBC ← padronizado em A2DP, compatível com todos os dispositivos
  • MPEG-1/2 Layer 1/2/3 ← padronizado em A2DP: bem conhecido MP3, usado em TV digital MP2e desconhecido MP1
  • MPEG-2/4 AAC ← padronizado em A2DP
  • ATRAIR ← codec antigo da Sony, padronizado em A2DP
  • LDAC ← novo codec da Sony
  • aptX ← codec de 1988
  • aptX HD ← igual ao aptX, apenas com opções de codificação diferentes
  • aptX Baixa Latência ← codec completamente diferente, sem implementação de software
  • aptX Adaptive ← outro codec da Qualcomm
  • FastStream ← pseudo codec, modificação SBC bidirecional
  • HWA LHDC ← novo codec da Huawei
  • HDSamsung ← suportado por 2 dispositivos
  • Samsung escalável ← suportado por 2 dispositivos
  • Samsung UHQ-BT ← suportado por 3 dispositivos

Por que precisamos de codecs, você pergunta, quando o Bluetooth tem EDR, que permite transferir dados a velocidades de 2 e 3 Mbit/s, e para PCM de 16 bits de dois canais não compactados, 1.4 Mbit/s é suficiente?

Transferência de dados via Bluetooth

Existem dois tipos de transferência de dados no Bluetooth: Asynchronous Connection Less (ACL) para transferência assíncrona sem estabelecimento de conexão, e Synchronous Connection Oriented (SCO), para transferência síncrona com negociação preliminar de conexão.
A transmissão é realizada usando um esquema de divisão de tempo e selecionando um canal de transmissão para cada pacote separadamente (Frequency-Hop/Time-Division-Duplex, FH/TDD), para o qual o tempo é dividido em intervalos de 625 microssegundos chamados slots. Um dos dispositivos transmite em slots pares e o outro em slots ímpares. O pacote transmitido pode ocupar 1, 3 ou 5 slots, dependendo do tamanho dos dados e do tipo de transmissão configurado, neste caso a transmissão por um dispositivo é realizada em slots pares e ímpares até o final da transmissão. No total, podem ser recebidos e enviados até 1600 pacotes por segundo, se cada um deles ocupar 1 slot, e ambos os dispositivos transmitirem e receberem algo sem parar.

2 e 3 Mbit/s para EDR, que podem ser encontrados em anúncios e no site do Bluetooth, são a taxa máxima de transferência de canal de todos os dados no total (incluindo cabeçalhos técnicos de todos os protocolos nos quais os dados devem ser encapsulados), em duas direções simultaneamente. A velocidade real de transferência de dados irá variar muito.

Para transmitir música, utiliza-se um método assíncrono, quase sempre utilizando pacotes como 2-DH5 e 3-DH5, que transportam uma quantidade máxima de dados em modo EDR de 2 Mbit/s e 3 Mbit/s, respectivamente, e ocupam 5 tempos. -compartilhando slots.

Representação esquemática da transmissão usando 5 slots por um dispositivo e 1 slot por outro (DH5/DH1):
Áudio via Bluetooth: detalhes máximos sobre perfis, codecs e dispositivos

Devido ao princípio da divisão de tempo das ondas aéreas, somos forçados a esperar 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 transmitir em pacotes grandes. Se mais de um dispositivo estiver conectado ao telefone (por exemplo, fones de ouvido, relógios e pulseira de fitness), o tempo de transferência será compartilhado entre todos eles.

A necessidade de encapsular áudio em protocolos de transporte especiais L2CAP e AVDTP ocupa 16 bytes da quantidade máxima possível de carga útil de áudio transmitida.

Tipo de pacote
Número de vagas
Máx. número de bytes no pacote
Máx. número de bytes de carga útil A2DP
Máx. Taxa de bits de carga útil 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 definitivamente não são suficientes para transmitir áudio não compactado em condições reais, com a faixa ruidosa de 2.4 GHz e a necessidade de transmissão de dados de serviço. EDR 3 Mbit/s exige potência de transmissão e ruído no ar, portanto, mesmo no modo 3-DH5, a transmissão PCM confortável é impossível, sempre haverá interrupções de curto prazo e tudo funcionará apenas a uma distância de um alguns metros.
Na prática, mesmo um fluxo de áudio de 990 kbit/s (LDAC 990 kbit/s) é difícil de transmitir.

Voltemos aos codecs.

SBC

Codec necessário para todos os dispositivos que suportam o padrão A2DP. O melhor e o pior codec ao mesmo tempo.

Frequência de amostragem
Capacidade
Taxa de bits
Suporte de codificação
Suporte de decodificação

16, 32, 44.1, 48kHz
Bit 16
10-1500kbps
Todos os dispositivos
Todos os dispositivos

O SBC é um codec simples e computacionalmente rápido, com um modelo psicoacústico primitivo (é aplicado apenas mascaramento de sons baixos), utilizando modulação adaptativa por código de pulso (APCM).
A especificação A2DP recomenda dois perfis de uso: Qualidade Média e Alta Qualidade.
Áudio via Bluetooth: detalhes máximos sobre perfis, codecs e dispositivos

O codec possui muitas configurações que permitem controlar o atraso algorítmico, o número de amostras em um 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 bandas de frequência, 16 blocos em um quadro de áudio, método de distribuição de bits Loudness.
O SBC oferece suporte à alteração dinâmica do parâmetro Bitpool, que afeta diretamente a taxa de bits. Se as ondas de rádio estiverem obstruídas, os pacotes forem perdidos ou os dispositivos estiverem localizados a grandes distâncias, a fonte de áudio poderá reduzir o Bitpool até que a comunicação retorne ao normal.

A maioria dos fabricantes de fones de ouvido define o valor máximo do 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 do Bitpool acima de 53 (tais modelos são encontrados, por exemplo: Beats Solo³, JBL Everest Elite 750NC, Apple AirPods, também encontrados em alguns receptores e unidades principais de automóveis), a maioria dos sistemas operacionais não permitirá o uso de taxas de bits aumentadas devido ao limite de valor interno definido nas pilhas Bluetooth.
Além disso, alguns fabricantes definem o valor máximo do Bitpool como baixo para alguns dispositivos. Por exemplo, para Bluedio T é 39, para Samsung Gear IconX é 37, o que proporciona uma qualidade de som ruim.

Restrições artificiais por parte dos desenvolvedores de pilhas Bluetooth provavelmente surgiram devido à incompatibilidade de alguns dispositivos com grandes valores de Bitpool ou perfis atípicos, mesmo que relatassem suporte para eles, e testes insuficientes durante a certificação. Foi mais fácil para os autores de pilhas Bluetooth limitarem-se a concordar com o perfil recomendado, em vez de criar bancos de dados de dispositivos incorretos (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 de baixo para alto, com pesos diferentes. Se toda a taxa de bits for usada para as frequências baixas e médias, as frequências altas serão “cortadas” (em vez disso, haverá silêncio).

Exemplo SBC 328 kbps. Acima está o original, abaixo está o SBC, alternando periodicamente entre as faixas. O áudio do arquivo de vídeo usa o codec de compactação sem perdas FLAC. O uso de FLAC em um contêiner mp4 não é oficialmente padronizado, portanto não é garantido que seu navegador o reproduza, mas deve funcionar nas versões mais recentes do Chrome e Firefox para desktop. Se não houver som, você pode baixar o arquivo e abri-lo em um reprodutor de vídeo completo.
ZZ Top - Homem bem vestido

O espectrograma mostra o momento da comutação: o SBC corta periodicamente sons baixos acima de 17.5 kHz e não aloca nenhum bit para a banda acima de 20 kHz. O espectrograma completo está disponível clicando em (1.7 MB).
Áudio via Bluetooth: detalhes máximos sobre perfis, codecs e dispositivos

Não ouço nenhuma diferença entre o original e o SBC nesta faixa.

Vamos pegar algo mais novo e simular o áudio que seria obtido usando fones de ouvido Samsung Gear IconX com Bitpool 37 (acima - o sinal original, abaixo - SBC 239 kbps, áudio em FLAC).
Auto-indulgência estúpida - Testemunha

Ouço estalidos, menos efeito estéreo e um som desagradável de "estalo" nas altas frequências dos vocais.

Embora o SBC seja um codec muito flexível, ele pode ser configurado para baixa latência, oferece excelente qualidade de áudio em altas taxas de bits (452+ kbps) e é bastante bom para a maioria das pessoas no padrão de alta qualidade (328 kbps), devido ao fato de que isso o padrão A2DP não especifica perfis fixos (mas apenas fornece recomendações), os desenvolvedores de pilha definiram restrições artificiais no Bitpool, os parâmetros do áudio transmitido não são exibidos na interface do usuário e os fabricantes de fones de ouvido são livres para definir suas próprias configurações e nunca indicar o valor do Bitpool nas especificações técnicas do produto, o codec ficou famoso por sua baixa qualidade de som, embora isso não seja um problema do codec como tal.
O parâmetro Bitpool afeta diretamente a taxa de bits apenas dentro de um perfil. O mesmo valor do Bitpool 53 pode fornecer uma taxa de bits de 328 kbps com o perfil de alta qualidade recomendado e 1212 kbps com Dual Channel e 4 bandas de frequência, razão pela qual os autores do SO, além das restrições ao Bitpool, estabelecem um limite e em Taxa de bits. A meu ver, essa situação surgiu devido a uma falha no padrão A2DP: era preciso negociar o bitrate e não o Bitpool.

Tabela de suporte para recursos SBC em diferentes sistemas operacionais:

SO
Taxas de amostragem suportadas
Limite máx. Pool de bits
Limite máx. Taxa de bits
Taxa de bits típica
Ajuste dinâmico do Bitpool

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

Linux (BlueZ + PulseAudio)
16, 32, 44.1, 48kHz
64 (para conexões de entrada), 53 (para conexões de saída)
Sem limite
328 kbps
✓*

MacOS High Sierra
44.1 кГц
64, padrão 53***
Desconhecido
328 kbps

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

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

Blackberry OS 10
48 кГц
53
Sem limite
328 kbps

* O Bitpool apenas diminui, mas não aumenta automaticamente, se as condições de transferência melhorarem. Para restaurar o Bitpool você precisa parar a reprodução, esperar alguns segundos e iniciar o áudio novamente.
** O valor padrão depende das configurações de pilha especificadas ao compilar o firmware. No Android 8/8.1 a frequência é de apenas 44.1 kHz ou 48 kHz, dependendo das configurações durante a compilação, em outras versões 44.1 kHz e 48 kHz são suportados simultaneamente.
*** O valor do Bitpool pode ser aumentado no programa Bluetooth Explorer.

aptX e aptX HD

aptX é um codec simples e computacionalmente rápido, sem psicoacústica, usando modulação de código de pulso diferencial adaptativo (ADPCM). Apareceu por volta de 1988 (data de depósito patente datado de fevereiro de 1988), antes do Bluetooth, era usado principalmente em equipamentos profissionais de áudio sem fio. Atualmente propriedade da Qualcomm, requer licenciamento e royalties. A partir de 2014: US$ 6000 únicos e ≈US$ 1 por dispositivo, para lotes de até 10000 dispositivos (fonte, p. 16).
aptX e aptX HD são o mesmo codec, com perfis de codificação diferentes.

O codec possui apenas um parâmetro - seleção da frequência de amostragem. Existe, no entanto, uma escolha do número/modo de canais, mas em todos os dispositivos que conheço (mais de 70 peças) apenas o estéreo é suportado.

Codec
Frequência de amostragem
Capacidade
Taxa de bits
Suporte de codificação
Suporte de decodificação

aptX
16, 32, 44.1, 48kHz
Bit 16
128/256/352/384 kbps (dependendo da taxa de amostragem)
Windows 10 (desktop e dispositivos móveis), macOS, Android 4.4+/7*, Blackberry OS 10
Ampla gama de dispositivos de áudio (hardware)

* Versões até 7 requerem modificação da pilha Bluetooth. O codec só é compatível se o fabricante do dispositivo Android tiver licenciado o codec da Qualcomm (se o sistema operacional tiver bibliotecas de codificação).

O aptX divide o áudio em 4 bandas de frequência e quantiza-as com o mesmo número de bits constantemente: 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 taxa de amostragem de 44.1 kHz).

Exemplo de áudio aptX (acima - o sinal original, abaixo - aptX, espectrogramas apenas dos canais esquerdos, som em FLAC):

Os agudos ficaram um pouco mais vermelhos, mas não dava para ouvir a diferença.

Devido à distribuição fixa dos bits de quantização, o codec não pode “deslocar os bits” para as frequências que mais necessitam deles. Ao contrário do SBC, o aptX não “corta” frequências, mas adiciona ruído de quantização a elas, reduzindo a faixa dinâmica do áudio.

Não se deve presumir que o uso, por exemplo, de 2 bits por banda reduz a faixa dinâmica para 12 dB: o ADPCM permite até 96 dB de faixa dinâmica mesmo ao usar 2 bits de quantização, mas apenas para um determinado sinal.
O ADPCM armazena a diferença numérica entre a amostra atual e a próxima amostra, em vez de armazenar o valor absoluto como no PCM. Isso permite reduzir os requisitos para o número de bits necessários para armazenar as mesmas informações (sem perda) ou quase as mesmas (com um erro de arredondamento relativamente pequeno). Para reduzir erros de arredondamento, são utilizadas tabelas de coeficientes.
Ao criar o codec, os autores calcularam os coeficientes ADPCM em um conjunto de arquivos de áudio musical. Quanto mais próximo o sinal de áudio estiver do conjunto de músicas sobre o qual as mesas foram construídas, menos erros de quantização (ruído) o aptX cria.

Por causa disso, os testes sintéticos sempre produzirão resultados piores que os da música. Fiz um exemplo sintético especial em que o aptX mostra resultados ruins - uma onda senoidal com frequência de 12.4 kHz (acima - o sinal original, abaixo - aptX. Áudio em FLAC. Abaixe o volume!):

Gráfico de espectro:
Áudio via Bluetooth: detalhes máximos sobre perfis, codecs e dispositivos

Os ruídos são claramente audíveis.

Porém, se você gerar uma onda senoidal com amplitude menor para que seja mais silenciosa, o ruído também ficará mais silencioso, indicando uma ampla faixa dinâmica:

Áudio via Bluetooth: detalhes máximos sobre perfis, codecs e dispositivos

Para ouvir a diferença entre a faixa de música original e a compactada, você pode inverter um dos sinais e adicionar as faixas canal por canal. Esta abordagem é, em geral, incorreta e não daria resultados sensatos com codecs mais complexos, mas especificamente para ADPCM é bastante adequada.
Diferença entre original e aptX
A diferença quadrática média dos sinais está no nível de -37.4 dB, o que não é muito para essa música comprimida.

aptX HD

aptX HD não é um codec independente - é um perfil de codificação aprimorado do codec aptX. As mudanças afetaram o número de bits alocados para faixas de frequência de codificação: 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 (dígitos para 44.1 kHz) .

Codec
Frequência de amostragem
Capacidade
Taxa de bits
Suporte de codificação
Suporte de decodificação

aptX HD
16, 32, 44.1, 48kHz
24 bits
192/384/529/576 kbps (dependendo da taxa de amostragem)
Android 8 + *
Alguns dispositivos de áudio (hardware)

* Versões até 7 requerem modificação da pilha Bluetooth. O codec só é compatível se o fabricante do dispositivo Android tiver licenciado o codec da Qualcomm (se o sistema operacional tiver bibliotecas de codificação).

Menos comum que o aptX: aparentemente requer licenciamento separado da Qualcomm e taxas de licença separadas.

Vamos repetir o exemplo com uma onda senoidal de 12.4 kHz:
Áudio via Bluetooth: detalhes máximos sobre perfis, codecs e dispositivos

Muito melhor que o aptX, mas ainda um pouco barulhento.

aptX Baixa Latência

Um codec da Qualcomm que nada tem em comum com o aptX e o aptX HD padrão, a julgar pelas informações limitadas das pessoas envolvidas em seu desenvolvimento. Projetado para transmissão interativa de áudio de baixa latência (filmes, jogos), onde o atraso de áudio não pode ser ajustado por software. Não existem implementações de software conhecidas de codificadores e decodificadores; eles são suportados 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 de codificação
Suporte de decodificação

44.1 кГц
276/420kbps
Alguns transmissores (hardware)
Alguns dispositivos de áudio (hardware)

AAC

AAC, ou Advanced Audio Coding, é um codec computacionalmente complexo com um modelo psicoacústico sério. Amplamente utilizado para áudio na Internet, o segundo em popularidade depois do MP3. Requer licenciamento e royalties: US$ 15000 únicos (ou US$ 1000 para empresas com menos de 15 funcionários) + US$ 0.98 para os primeiros 500000 dispositivos (fonte).
O codec é padronizado dentro das especificações MPEG-2 e MPEG-4 e, ao contrário do equívoco comum, não pertence à Apple.

Frequência de amostragem
Taxa de bits
Suporte de codificação
Suporte de decodificação

8 - 96 kHz
8 - 576 kbps (para estéreo), 256 - 320 kbps (típico para Bluetooth)
macOS, Android 7+*, iOS
Ampla gama de dispositivos de áudio (hardware)

* apenas em dispositivos cujos fabricantes pagaram taxas de licenciamento

iOS e macOS usam o melhor codificador AAC atual da Apple para fornecer a mais alta qualidade de áudio possível. O Android usa o codificador Fraunhofer FDK AAC de segunda mais alta qualidade, mas pode usar vários hardwares integrados à plataforma (SoC) com qualidade de codificação desconhecida. De acordo com testes recentes no site SoundGuys, a qualidade da codificação AAC de diferentes telefones Android varia muito:
Áudio via Bluetooth: detalhes máximos sobre perfis, codecs e dispositivos

A maioria dos dispositivos de áudio sem fio tem uma taxa de bits máxima de 320 kbps para AAC, alguns suportam apenas 256 kbps. Outras taxas de bits são extremamente raras.
O AAC oferece excelente qualidade em taxas de bits de 320 e 256 kbps, mas está sujeito a perda de codificação sequencial de conteúdo já compactado, no entanto, é difícil ouvir quaisquer diferenças com o original no iOS a uma taxa de bits de 256 kbps, mesmo com várias codificações sequenciais; com codificação única, por exemplo, MP3 320 kbps para AAC 256 kbps, as perdas podem ser negligenciadas.
Tal como acontece com outros codecs Bluetooth, qualquer música é primeiro decodificada e depois codificada pelo codec. Ao ouvir música no formato AAC, ela é primeiro decodificada pelo sistema operacional e depois codificada novamente em AAC para transmissão via Bluetooth. Isso é necessário para mixar vários fluxos de áudio, como música e notificações de novas mensagens. iOS não é exceção. Na Internet você pode encontrar muitas afirmações de que no iOS a música no formato AAC não é transcodificada quando transmitida via Bluetooth, o que não é verdade.

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 e rádio digitais) e no completamente desconhecido MP1.

Os antigos codecs MP1 e MP2 não são suportados: não consegui encontrar nenhum fone de ouvido ou pilha Bluetooth que pudesse codificá-los ou decodificá-los.
A decodificação de MP3 é compatível com alguns fones de ouvido, mas a codificação não é compatível com nenhuma pilha de sistema operacional moderno. Parece que a pilha BlueSoleil de terceiros para Windows pode codificar para MP3 se você alterar manualmente o arquivo de configuração, mas para mim instalá-lo leva ao BSoD no Windows 10. Conclusão - o codec na verdade não pode ser usado para áudio Bluetooth.
Anteriormente, em 2006-2008, antes da disseminação do padrão A2DP nos aparelhos, as pessoas ouviam música MP3 no fone de ouvido Nokia BH-501 por meio do programa MSI BluePlayer, que estava disponível em Symbian e Windows Mobile. Naquela época, a arquitetura do sistema operacional dos smartphones permitia o acesso a muitas funções de baixo nível, e no Windows Mobile era até possível instalar pilhas Bluetooth de terceiros.

A última patente do codec MP3 expirou, o uso do codec não exige taxas de licenciamento desde 23 de abril de 2017.

Se a patente mais antiga mencionada nas referências acima mencionadas for tomada como medida, então a tecnologia MP3 tornou-se livre de patente nos Estados Unidos em 16 de abril de 2017, quando a patente US 6,009,399, detida e administrada pela Technicolor, expirou.

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

Frequência de amostragem
Taxa de bits
Suporte de codificação
Suporte de decodificação

16 - 48 kHz
8 - 320kbps
Não suportado em nenhum lugar
Alguns dispositivos de áudio (hardware)

LDAC

Um codec de “alta resolução” novo e ativamente promovido da Sony, que suporta taxas de amostragem de até 96 kHz e taxa de bits de 24 bits, com taxas de bits de até 990 kbps. É anunciado como um codec audiófilo, como um substituto para os codecs Bluetooth existentes. Tem a função de ajuste adaptativo da taxa de bits, dependendo das condições de transmissão de rádio.

Codificador LDAC (libldac) está incluído no pacote padrão do Android, portanto, a codificação é compatível com qualquer smartphone Android a partir da versão 8 do sistema operacional. Não existem decodificadores de software disponíveis gratuitamente, a especificação do codec não está disponível ao público em geral, porém, à primeira vista no codificador, a estrutura interna do codec é semelhante a ATRAC9 - Codec da Sony usado no PlayStation 4 e Vita: ambos funcionam no domínio da frequência, usam transformada discreta de cosseno modificada (MDCT) e compressão usando o algoritmo de Huffman.

O suporte LDAC é fornecido quase exclusivamente por fones de ouvido da Sony. A capacidade de decodificar LDAC às vezes é encontrada em fones de ouvido e DACs de outros fabricantes, mas muito raramente.

Frequência de amostragem
Taxa de bits
Suporte de codificação
Suporte de decodificação

44.1 - 96 kHz
303/606/909 kbit/s (para 44.1 e 88.2 kHz), 330/660/990 kbit/s (para 48 e 96 kHz)
Android 8+
Alguns fones de ouvido Sony e alguns dispositivos de outros fabricantes (hardware)

Comercializar o LDAC como um codec de alta resolução prejudica seu componente técnico: é estúpido gastar taxa de bits na transmissão de frequências inaudíveis ao ouvido humano e aumentar a profundidade de bits, enquanto não é suficiente para transmitir qualidade de CD (44.1/16) sem perda . Felizmente, o codec possui dois modos de operação: transmissão de áudio de CD e transmissão de áudio de alta resolução. No primeiro caso, apenas 44.1 kHz/16 bits são transmitidos pelo ar.

Como um decodificador LDAC de software não está disponível gratuitamente, é impossível testar o codec sem dispositivos adicionais que decodificam o LDAC. De acordo com os resultados do teste LDAC em um DAC com seu suporte, que os engenheiros da SoundGuys.com conectaram por meio de uma saída digital e gravaram o som de saída nos sinais de teste, LDAC 660 e 990 kbps no modo de qualidade de CD fornece um sinal para- relação de ruído ligeiramente melhor que a do aptX HD.

Áudio via Bluetooth: detalhes máximos sobre perfis, codecs e dispositivos
Fonte: www.soundguys.com/ldac-ultimate-bluetooth-guide-20026

O LDAC também suporta taxas de bits dinâmicas fora dos perfis estabelecidos - de 138 kbps a 990 kbps, mas até onde sei, o Android usa apenas os perfis padronizados 303/606/909 e 330/660/990 kbps.

Outros codecs

Outros codecs A2DP não são amplamente utilizados. Seu suporte está quase totalmente ausente ou disponível apenas em alguns modelos de fones de ouvido e smartphones.
O codec ATRAC padronizado em A2DP nunca foi usado como codec Bluetooth, mesmo pela própria Sony, os codecs Samsung HD, Samsung Scalable e Samsung UHQ-BT têm suporte muito limitado para dispositivos de transmissão e recepção, e 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 os codecs suportados por determinados fones de ouvido, alto-falantes, receptores ou transmissores sem fio. Às vezes acontece que o suporte para um determinado codec é apenas para transmissão, mas não para recepção (relevante para transmissores-receptores combinados), embora o fabricante simplesmente declare “suporte”, sem notas (presumo que o licenciamento separado de codificadores e decodificadores de alguns codecs são os culpados por isso). Nos dispositivos mais baratos, você pode não encontrar o suporte aptX declarado.

Infelizmente, as interfaces da maioria dos sistemas operacionais não exibem o codec usado em nenhum lugar. Informações sobre isso estão disponíveis apenas no Android, a partir da versão 8, e no macOS. No entanto, mesmo nesses sistemas operacionais, apenas os codecs suportados pelo telefone/computador e pelos fones de ouvido serão exibidos.

Como você pode descobrir quais codecs seu dispositivo suporta? Grave e analise dump de tráfego com parâmetros de negociação A2DP!
Isso pode ser feito em Linux, macOS e Android. No Linux você pode usar Wireshark ou hcidump, no macOS você pode usar o Bluetooth Explorer e no Android você pode usar a função padrão de salvamento de despejo Bluetooth HCI, que está disponível nas ferramentas do desenvolvedor. Você receberá um dump no formato btsnoop, que pode ser carregado no analisador Wireshark.
Nota: um despejo correto só pode ser obtido conectando seu telefone/computador a fones de ouvido/alto-falantes (não importa o quão engraçado possa parecer)! Os fones de ouvido podem estabelecer uma conexão independente com o telefone; nesse caso, solicitarão uma lista de codecs do telefone, e não vice-versa. Para garantir que o dump correto seja gravado, primeiro desemparelhe o dispositivo e, em seguida, emparelhe o telefone com os fones de ouvido enquanto grava o dump.

Use o seguinte filtro de exibição para filtrar o tráfego irrelevante:

btavdtp.signal_id

Como resultado, você deverá ver algo semelhante a isto:
Áudio via Bluetooth: detalhes máximos sobre perfis, codecs e dispositivos

Você pode clicar em cada item do comando GetCapabilities para visualizar as características detalhadas do codec.
Áudio via Bluetooth: detalhes máximos sobre perfis, codecs e dispositivos

O Wireshark não conhece todos os identificadores de codec, então alguns codecs terão que ser descriptografados manualmente, observando a 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

Para não analisar dumps manualmente, fiz um serviço que vai analisar tudo automaticamente: btcodecs.valdikss.org.ru

Comparação de codecs. Qual codec é melhor?

Cada codec tem suas próprias vantagens e desvantagens.
aptX e aptX HD usam perfis codificados 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 fatores de codificação aptX. A proprietária do codec, Qualcomm, fornece um codificador de referência na forma de uma biblioteca. Esses fatos são a força do aptX - você sabe antecipadamente qual qualidade de som obterá, sem quaisquer “mas”.

O SBC, por outro lado, possui muitos parâmetros configuráveis, taxa de bits dinâmica (o codificador pode reduzir o parâmetro do bitpool se as ondas aéreas estiverem ocupadas) e não possui perfis codificados, apenas a “qualidade média” e a “alta qualidade” recomendadas que foram adicionado à especificação A2DP no ano 2003. “Alta qualidade” não é mais tão alta para os padrões atuais, e a maioria das pilhas Bluetooth não permitem usar parâmetros melhores que o perfil de “alta qualidade”, embora não haja restrições técnicas para isso.
O Bluetooth SIG não possui um codificador SBC de referência como biblioteca e os próprios fabricantes o implementam.
Esses são os pontos fracos do SBC - nunca fica claro antecipadamente qual qualidade de som esperar de um dispositivo específico. O SBC pode produzir áudio de qualidade baixa e muito alta, mas o último é inatingível sem desabilitar ou contornar as limitações artificiais das pilhas Bluetooth.

A situação com o AAC é ambígua: por um lado, teoricamente o codec deveria produzir qualidade indistinguível do original, mas na prática, a julgar pelos testes do laboratório SoundGuys em diferentes dispositivos Android, isso não está confirmado. Provavelmente, a falha está nos codificadores de áudio de hardware de baixa qualidade integrados em vários chipsets de telefone. Faz sentido usar AAC apenas em dispositivos Apple e, no Android, limitá-lo a aptX e LDAC.

O hardware que suporta codecs alternativos tende a ser de qualidade superior, simplesmente porque, para dispositivos muito baratos e de baixa qualidade, não faz sentido pagar taxas de licenciamento para usar esses codecs. Nos meus testes, o SBC soa muito bem em equipamentos de qualidade.

Fiz um web service que codifica áudio para SBC, aptX e aptX HD em tempo real, direto no navegador. Com ele, você pode testar esses codecs de áudio sem realmente transmitir áudio via Bluetooth, em qualquer fone de ouvido com fio, alto-falante e sua música favorita, e também alterar os parâmetros de codificação diretamente durante a reprodução do áudio:
btcodecs.valdikss.org.ru/sbc-encoder
O serviço utiliza as bibliotecas de codificação SBC do projeto BlueZ e libopenaptx do ffmpeg, que são compiladas em WebAssembly e JavaScript de C, via emscripten, para rodar no navegador. Quem poderia sonhar com um futuro assim!

Aqui está o que parece:

Observe como o nível de ruído muda após 20 kHz para diferentes codecs. O arquivo MP3 original não contém frequências acima de 20 kHz.

Tente trocar de codec e veja se você ouve a diferença entre o SBC 53 Joint Stereo original (o perfil padrão e mais comum) e o aptX/aptX HD.

Eu posso ouvir a diferença entre codecs em fones de ouvido!

Pessoas que não ouvem a diferença entre os codecs durante os testes por meio de um serviço da web afirmam que a ouvem 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 não é causada por diferenças codecs.

A grande maioria dos chipsets de áudio Bluetooth usados ​​em dispositivos receptores sem fio são equipados com um Processador de Sinal Digital (DSP), que implementa um equalizador, compander, expansor estéreo e outras coisas projetadas para melhorar (ou alterar) o som. Fabricantes de equipamentos Bluetooth podem configurar DSP para cada codec separadamente, e ao alternar entre codecs, o ouvinte pensará que está ouvindo uma diferença na operação dos codecs, quando na realidade está ouvindo diferentes configurações de DSP.

Áudio via Bluetooth: detalhes máximos sobre perfis, codecs e dispositivos
Pipeline de processamento de áudio DSP Kalimba em chips fabricados pela CSR/Qualcomm

Áudio via Bluetooth: detalhes máximos sobre perfis, codecs e dispositivos
Ative diferentes funções DSP para cada codec e produza separadamente

Alguns dispositivos premium vêm com software que permite personalizar as configurações de DSP, mas a maioria dos fones de ouvido mais baratos não, e os usuários não podem desligar o pós-processamento de áudio manualmente.

Recursos funcionais dos dispositivos

A versão moderna do padrão A2DP possui função “controle de volume absoluto” — controle de volume do dispositivo usando comandos especiais do protocolo AVRCP, que regula o ganho do estágio de saída, em vez de reduzir programaticamente o volume do fluxo de áudio. Se, ao alterar o volume dos fones de ouvido, a alteração não sincronizar com o volume do telefone, os fones de ouvido ou o telefone não oferecem suporte a esse recurso. Nesse caso, faz sentido sempre ouvir música no volume máximo do celular, ajustando o volume real com os botões do fone de ouvido - nesse caso, a relação sinal-ruído será melhor e a qualidade do áudio deve ser acima.
Na realidade, existem situações tristes. Em meus fones de ouvido RealForce OverDrive D1 para SBC, um compander forte está ligado e aumentar o volume leva a um aumento no nível de sons baixos, enquanto o volume de sons altos não muda (o sinal é comprimido). Por isso, é necessário definir o volume do computador para cerca de metade, caso em que praticamente não há efeito de compressão.
De acordo com minhas observações, todos os fones de ouvido com codecs adicionais suportam a função de controle de volume absoluto, aparentemente este é um dos requisitos para certificação de codec.

Alguns fones de ouvido suportam conectando dois dispositivos ao mesmo tempo. Isto permite-lhe, por exemplo, ouvir música do seu computador e receber chamadas do seu telefone. No entanto, você deve estar ciente de que neste modo os codecs alternativos são desabilitados e apenas o SBC é usado.

Função de relatório de atraso AVDTP 1.3 permite que os fones de ouvido comuniquem o atraso ao dispositivo de transmissão no qual o som é realmente reproduzido. Isso permite ajustar a sincronização do áudio com o vídeo durante a visualização dos arquivos de vídeo: se houver problemas com a transmissão do rádio, o áudio não ficará atrás do vídeo, mas pelo contrário, o vídeo será desacelerado pelo reprodutor de vídeo até o áudio e vídeo são sincronizados novamente.
A função é suportada por muitos fones de ouvido, Android 9+ e Linux com PulseAudio 12.0+. Não tenho conhecimento do suporte para esse recurso em outras plataformas.

Comunicação bidirecional via Bluetooth. Transmissão de voz.

Para transmissão de voz em Bluetooth, utiliza-se Synchronous Connection Oriented (SCO) - transmissão síncrona com negociação preliminar da conexão. O modo permite transmitir som e voz estritamente em ordem, com velocidades de envio e recebimento simétricas, sem esperar confirmação de transmissão e reenvio de pacotes. Isto reduz o atraso geral da transmissão de áudio através do canal de rádio, mas impõe sérias restrições à quantidade de dados transmitidos por unidade de tempo e afeta negativamente a qualidade.
Quando este modo é utilizado, tanto a voz quanto o áudio são transmitidos com a mesma qualidade.
Infelizmente, em 2019, a qualidade da voz via Bluetooth ainda era ruim e não está claro por que o Bluetooth SIG não está fazendo nada a respeito.

CVSD

O codec de voz CVSD básico foi padronizado em 2002 e é compatível com todos os dispositivos de comunicação Bluetooth bidirecionais. Proporciona transmissão de áudio com frequência de amostragem de 8 kHz, que corresponde à qualidade da telefonia cabeada convencional.

Um exemplo de gravação neste codec.

MSBC

O codec mSBC adicional foi padronizado em 2009, e em 2010 já surgiram chips que o utilizam para transmissão de voz. mSBC é amplamente suportado por vários dispositivos.
Este não é um codec independente, mas um SBC regular do padrão A2DP, com perfil de codificação fixo: 16 kHz, mono, bitpool 26.

Um exemplo de gravação neste codec.

Não é brilhante, mas muito melhor que CVSD, mas ainda é irritante de usar para comunicação online, especialmente quando você usa fones de ouvido para se comunicar no jogo - o áudio do jogo também será transmitido a uma taxa de amostragem de 16 kHz.

A empresa FastStreamCSR decidiu desenvolver a ideia de reutilizar o SBC. Para contornar as limitações do protocolo SCO e usar taxas de bits mais altas, o CSR seguiu um caminho diferente - eles introduziram suporte para áudio SBC bidirecional no padrão de transmissão de áudio unidirecional A2DP, perfis de codificação padronizados e o chamaram de "FastStream".

FastStream transmite áudio estéreo a 44.1 ou 48 kHz com taxa de bits de 212 kbps para os alto-falantes, e mono, 16 kHz, com taxa de bits de 72 kbps (um pouco melhor que mSBC) é usado para transmitir áudio do microfone. Tais parâmetros são muito mais adequados para comunicação em jogos online - o som do jogo e dos interlocutores será de alta qualidade.

Um exemplo de gravação neste codec (+ som do microfone, igual ao mSBC).

A empresa surgiu com uma muleta interessante, mas por contradizer o padrão A2DP, ela é suportada apenas em alguns transmissores da empresa (que funcionam como placa de áudio USB, não como dispositivo Bluetooth), mas não funciona. receba suporte em pilhas Bluetooth, embora o número de fones de ouvido com suporte FastStream não seja tão pequeno.

No momento, o suporte FastStream no sistema operacional é apenas como um patch para Linux PulseAudio do desenvolvedor Pali Rohár, que não está incluído no ramo principal do programa.

aptX Baixa Latência

Para sua surpresa, o aptX Low Latency também suporta áudio bidirecional, implementando o mesmo princípio do FastStream.
Não é possível usar esse recurso do codec em qualquer lugar - não há suporte para decodificação de baixa latência em nenhum sistema operacional ou em qualquer pilha Bluetooth conhecida por mim.

Bluetooth 5, clássico e baixo consumo de energia

Tem havido muita confusão em torno das especificações e versões do Bluetooth devido à presença de dois padrões incompatíveis sob a mesma marca, ambos amplamente utilizados para finalidades diferentes.

Existem dois protocolos Bluetooth diferentes 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 não é muito difundido e não é usado em dispositivos domésticos.

Começando com o Bluetooth 4.0, as mudanças nas especificações diziam respeito principalmente ao Bluetooth Low Energy, e a versão Classic recebeu apenas pequenas melhorias.

Lista de alterações entre Bluetooth 4.2 e Bluetooth 5:

9 MUDANÇAS DE v4.2 PARA 5.0

9.1 NOVOS RECURSOS

Vários novos recursos são introduzidos na versão 5.0 da especificação Bluetooth Core. As principais áreas de melhoria são:
• Máscara de disponibilidade de slot (SAM)
• 2 Msym/s PHY para LE
•LE Longo Alcance
• Publicidade não conectável de alto ciclo de trabalho
• Extensões de publicidade LE
• Algoritmo de seleção de canal LE nº 2
9.1.1 Recursos adicionados no CSA5 - Integrados na v5.0
•Maior potência de saída

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

Apenas uma mudança afetou a versão Classic dentro da especificação Bluetooth 5: eles adicionaram suporte para a tecnologia Slot Availability Mask (SAM), projetada para melhorar a separação da transmissão de rádio. Todas as outras alterações afetam apenas o Bluetooth LE (e também maior potência de saída).

Todos Os dispositivos de áudio usam apenas Bluetooth Classic. É impossível conectar fones de ouvido e alto-falantes via Bluetooth Low Energy: não existe um padrão para transmissão de áudio usando 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á analógico no LE.

Conclusão - comprar dispositivos de áudio com Bluetooth 5 apenas por causa da nova versão do protocolo é inútil. Bluetooth 4.0/4.1/4.2 no contexto de transmissão de áudio funcionará exatamente da mesma forma.
Se o anúncio de novos fones de ouvido menciona o dobro do alcance operacional e a redução do consumo de energia graças ao Bluetooth 5, você deve saber que eles próprios não entendem ou estão enganando você. Não é à toa, porque até os fabricantes de chips Bluetooth em seus anúncios ficam confusos sobre as diferenças entre a nova versão do padrão, e alguns chips Bluetooth 5 suportam a quinta versão apenas para LE, e usam 4.2 para Classic.

Atraso na transmissão de áudio

A quantidade de atraso (atraso) no áudio depende de muitos fatores: o tamanho do buffer na pilha de áudio, na pilha Bluetooth e no próprio dispositivo de reprodução sem fio, e o atraso algorítmico do codec.

A latência de codecs simples como SBC, aptX e aptX HD é muito pequena, 3-6 ms, o que pode ser negligenciada, mas codecs complexos como AAC e LDAC podem causar atraso perceptível. A latência algorítmica AAC para 44.1 kHz é de 60 ms. LDAC - cerca de 30 ms (com base em uma análise aproximada do código-fonte. Posso estar errado, mas não muito).

A latência resultante depende muito do dispositivo de reprodução, do seu chipset e buffer. Durante os testes, recebi um spread de 150 a 250 ms em diferentes dispositivos (com o codec SBC). Se assumirmos que os dispositivos que suportam codecs adicionais aptX, AAC e LDAC usam componentes de alta qualidade e um tamanho de buffer pequeno, obtemos as seguintes latências típicas:

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

Deixe-me lembrá-lo: o aptX Low Latency não é compatível com sistemas operacionais, e é por isso que uma latência mais baixa só pode ser obtida com uma combinação de transmissor + receptor ou transmissor + fones de ouvido / alto-falante, e todos os dispositivos devem suportar este codec.

Problemas com dispositivos Bluetooth, certificação e logotipo

Como distinguir um dispositivo de áudio de alta qualidade de um dispositivo barato? Na aparência, antes de tudo!

Para fones de ouvido, alto-falantes e receptores chineses baratos:

  1. A palavra “Bluetooth” está faltando na caixa e no dispositivo, “Wireless” e “BT” são os mais usados
  2. Logotipo do Bluetooth ausente Áudio via Bluetooth: detalhes máximos sobre perfis, codecs e dispositivos na caixa ou dispositivo
  3. Nenhum LED azul piscando

A ausência destes 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 Bluedio não são certificados para Bluetooth e não atendem totalmente à especificação A2DP. Eles não teriam passado na certificação.

Considere vários dispositivos e caixas deles:
Áudio via Bluetooth: detalhes máximos sobre perfis, codecs e dispositivos

Áudio via Bluetooth: detalhes máximos sobre perfis, codecs e dispositivos

Áudio via Bluetooth: detalhes máximos sobre perfis, codecs e dispositivos

Todos esses são dispositivos não certificados. As instruções podem conter um logotipo e o nome da tecnologia Bluetooth, mas o mais importante é que estejam na caixa e/ou no próprio dispositivo.

Se seus fones de ouvido ou alto-falante disserem “Ze bluetooth dewise foi conectado com sucesso”, isso também não indica sua qualidade:

Conclusão

O Bluetooth pode substituir completamente os fones de ouvido e headsets com fio? É capaz, mas ao custo de chamadas de baixa qualidade, aumento da latência de áudio que pode ser irritante em jogos e uma série de codecs proprietários que exigem taxas de licenciamento 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 um substituto há muito esperado para o SBC “desatualizado e ruim”, que não é tão ruim quanto as pessoas pensam.

Acontece que as limitações artificiais das pilhas Bluetooth na taxa de bits do SBC podem ser contornadas, de modo que o SBC não será inferior ao aptX HD. Tomei a iniciativa com minhas próprias mãos e fiz um patch para o firmware do LineageOS: Modificando a pilha Bluetooth para melhorar o som em fones de ouvido sem codecs AAC, aptX e LDAC

Mais informações podem ser encontradas nos sites Caras do som и Especialista em som.

Bonus: Codificador de referência SBC, informações de fluxo de bits A2DP e arquivos de teste. Este arquivo costumava ser publicado publicamente no site do Bluetooth, mas agora está disponível apenas para membros do Bluetooth SIG.

Fonte: habr.com

Adicionar um comentário