Áudio via Bluetooth: maximize detalhes sobre perfis, codecs e dispositivos

Comic XKCD sobre 14 padrões concorrentes: Legenda: SITUAÇÃO: existem 14 padrões concorrentes.  Geek: 14 ?!  Absurdo!  Precisamos desenvolver um padrão universal para todas as ocasiões.  Companheiro de Geek: Sim!  Legenda: Em breve: SITUAÇÃO: Existem 15 padrões concorrentes.

Este artigo também está disponível em inglês

Devido à produção em massa de smartphones sem uma tomada de áudio de 3,5 mm, os fones de ouvido sem fio Bluetooth tornaram-se o principal caminho para muitos ouvirem música e se comunicarem no modo fone de ouvido.
Os fabricantes de dispositivos sem fio nem sempre escrevem especificações detalhadas do produto, e os artigos sobre áudio Bluetooth na Internet são contraditórios, às vezes incorretos, não falam sobre todos os recursos e geralmente copiam as mesmas informações que não correspondem à realidade.
Vamos tentar descobrir o protocolo, os recursos das pilhas do Bluetooth OS, fones de ouvido e alto-falantes, codecs Bluetooth para música e fala, descobrir o que afeta a qualidade do som e atraso transmitidos, aprender a coletar e decodificar informações sobre codecs suportados e outros recursos do dispositivo.

TL; DR :
  • SBC - Codec Normal
  • Os fones de ouvido têm seu próprio equalizador e pós-processamento para cada codec separadamente
  • O aptX não é tão bom quanto os anúncios falam sobre isso
  • LDAC - besteira de marketing
  • A qualidade da conversa ainda é ruim
  • Você pode incorporar codificadores de áudio em C no navegador compilando-os no WebAssembly via emscripten, e eles não diminuirão muito a velocidade.





Música Bluetooth

O componente funcional do Bluetooth é definido por perfis - especificações de funções específicas. A música Bluetooth é transmitida usando o perfil de transmissão de áudio unidirecional A2DP de alta qualidade. O padrão A2DP foi adotado em 2003 e não mudou drasticamente desde então.
Na estrutura do perfil, 1 codec obrigatório de SBC de baixa complexidade computacional, criado especificamente para Bluetooth, e 3 adicionais são padronizados. O uso de codecs não documentados de nossa própria implementação também é permitido.

Em junho de 2019, estamos no quadrinho xkcd com 14 codecs A2DP:

  • SBC ← padronizado em A2DP, suportado por todos os dispositivos
  • MPEG-1/2 Layer 1/2/3 ← padronizado em A2DP: o conhecido MP3 usado na TV digital MP2 e o desconhecido MP1
  • MPEG-2/4 AAC ← padronizado em A2DP
  • ATRAC ← codec Sony antigo padronizado em A2DP
  • ← Novo codec da Sony
  • codec aptX ← de 1988
  • aptX HD ← O mesmo que o aptX, mas com diferentes opções de codificação
  • aptX Low Latency ← um codec completamente diferente, sem implementação de software aptX com um buffer reduzido
  • aptX Adaptive ← outro codec da Qualcomm
  • FastStream ← pseudo codec , modificação bidirecional da SBC
  • HWA LHDC ← Novo codec da Huawei
  • Dispositivos Samsung HD ← 2 suportados
  • Dispositivos Samsung Scalable ← 2 suportados
  • Samsung UHQ-BT ← 3 dispositivos suportados


Por que os codecs são necessários, você pergunta, quando o EDR está disponível no Bluetooth, que permite transferir dados nas velocidades de 2 e 3 Mbps, e 1,4 Mbps é suficiente para um PCM de 16 bits e dois canais não compactados?


Transferência de dados Bluetooth

Existem dois tipos de transferência de dados no Bluetooth: Conexão Assíncrona Menos (ACL) para transmissão assíncrona sem estabelecer uma conexão, e Conexão Síncrona Orientada (SCO) para transmissão síncrona com negociação preliminar da conexão.
A transmissão é realizada usando um esquema de compartilhamento de tempo e a escolha de um canal de transmissão para cada pacote separadamente (Frequency-Hop / Time-Division-Duplex, FH / TDD), cujo tempo é dividido em intervalos de 625 microssegundos, chamados slots. Um dos dispositivos transmite em números de slot pares e o outro em números ímpares. O pacote transmitido pode ocupar 1, 3 ou 5 slots, dependendo do tamanho dos dados e do tipo de conjunto de transmissão. Nesse caso, um dispositivo transfere os slots pares e ímpares até o final da transferência. No total, até 1600 pacotes podem ser recebidos e enviados por segundo, se cada um deles ocupar 1 slot, e ambos os dispositivos transmitirem e receberem algo sem parar.

2 e 3 Mbps para EDR, que podem ser encontrados em anúncios e no site da Bluetooth, são a taxa máxima de transferência de dados de canal para todos os dados no total (incluindo os cabeçalhos técnicos de todos os protocolos nos quais os dados devem ser encapsulados), em duas direções ao mesmo tempo. As taxas reais de transferência de dados variam muito.

Para transferir música, é usado um método assíncrono, quase sempre com a ajuda de pacotes do tipo 2-DH5 e 3-DH5, que carregam a quantidade máxima de dados no modo EDR de 2 Mbps e 3 Mbps, respectivamente, e ocupam 5 slots da divisão de tempo no ar.

Representação esquemática de uma transmissão usando 5 slots por um dispositivo e 1 slot por outro (DH5 / DH1):
5 slots de transmissão, cada um dos quais é transmitido 625 microssegundos e um slot para recepção, também 625 microssegundos.  Sem total - 3,75 milissegundos.

Devido ao princípio do compartilhamento de tempo, somos forçados a 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 transmitir em pacotes grandes. Se mais de um dispositivo estiver conectado ao telefone (por exemplo, fones de ouvido, relógio e pulseira de fitness), o tempo de transmissão será compartilhado entre todos eles.

A necessidade de encapsular o áudio nos protocolos de transporte especiais L2CAP e AVDTP leva 16 bytes da quantidade máxima possível de áudio de carga útil transmitida.
Tipo de embalagemNúmero de slotsMáx. bytes por pacoteMáx. bytes de carga útil A2DPMáx. Taxa de bits de carga A2DP
2-dh33367351936 kbps
3-dh335525361429 kbps
2-DH556796631414 kbps
3-dh55102110052143 kbps
1414 e 1429 kbit / s definitivamente não são suficientes para transmitir som não compactado em condições reais, com uma banda barulhenta de 2,4 GHz e a necessidade de transferir dados de serviço. O EDR de 3 Mbps é exigente na potência de transmissão e no ruído do ar; portanto, mesmo no modo 3-DH5, a transmissão PCM confortável é impossível, haverá interrupções de curto prazo constantemente e tudo funcionará apenas a uma distância de alguns metros.
Na prática, mesmo o fluxo de áudio de 990 kbit / s (LDAC 990 kbit / s) é difícil de transmitir.

Voltar para os codecs.

Sbc

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

Taxa de amostragemCapacidadeTaxa de bitsSuporte de codificaçãoSuporte de decodificação
16, 32, 44,1, 48 kHz16 bit10-1500 kbpsTodos os dispositivosTodos os dispositivos


O SBC é um codec simples e computacionalmente rápido, com um modelo psicoacústico primitivo (apenas sons quietos são mascarados), usando modulação por código de pulso adaptável (APCM).
A especificação A2DP recomenda dois perfis para uso: qualidade média e alta qualidade.
Tabela de modos Qualidade média e alta qualidade.  Os valores selecionados são bitpool, comprimento do quadro e taxa de bits.  Para 44,1 Stereo comum de 44,1 kHz.  Qualidade média: bitpool = 35, comprimento do quadro = 83, taxa de bits = 229. Alta qualidade: bitpool = 53, comprimento do quadro = 119, taxa de bits = 328.

O codec possui muitas configurações que permitem controlar o atraso algorítmico, o número de amostras em um bloco, o algoritmo de alocação de bits, mas quase em toda parte os mesmos parâmetros recomendados na especificação são usados: Joint Stereo , 8 bandas de frequência, 16 blocos em um quadro de áudio, método de distribuição de bits de Loudness .
O SBC suporta a alteração dinâmica do parâmetro Bitpool, 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 Bitpool até que a conexão normalize.

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

As 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 eles relatassem seu suporte, e um número insuficiente de testes durante a certificação. Era mais fácil para os autores de pilhas Bluetooth restringir-se a concordar com um 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, operando de baixo a alto com diferentes pesos. Se toda a taxa de bits foi usada para as frequências baixa e média, as frequências mais altas serão "cortadas" (haverá um silêncio).

Exemplo SBC 328 kbps. Acima está o original, abaixo está o SBC, alternando periodicamente entre as faixas. Para áudio, o arquivo de vídeo usa o codec de compactação FLAC sem perdas. O uso do FLAC no contêiner mp4 não é oficialmente padronizado, portanto, não é fato que seu navegador o reproduza, mas deve funcionar nas versões mais recentes do Chrome e Firefox para desktop. Se você não tiver som, faça o download do arquivo e abra-o em um player de vídeo completo.
ZZ Top - Homem Vestido Afiado

O momento de comutação é visível no espectrograma: o SBC corta periodicamente sons baixos acima de 17,5 kHz e não emite bits para a banda acima de 20 kHz. O espectrograma completo está disponível por clique (1,7 MB).
imagem

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

Vamos pegar algo mais novo e simular o áudio que sairia usando os fones de ouvido Samsung Gear IconX com Bitpool 37 (na parte superior é o sinal original, na parte inferior é SBC 239 kbit / s, o som está em FLAC).
Auto-indulgência irracional - Testemunha

Ouço crepitar, menos efeito estéreo e um desagradável "ruído" de vocais em altas frequências.

Embora o SBC seja um codec muito flexível, ele pode ser configurado para baixas latências, fornece 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), porque que o padrão A2DP não especifica perfis fixos (e fornece apenas recomendações), os desenvolvedores das pilhas estabelecem 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 indicam tecnicamente o valor do Bitpool Devido às características do produto, o codec é famoso por sua baixa qualidade de som, embora isso não seja um problema para o codec.
O parâmetro Bitpool afeta diretamente a taxa de bits em um único perfil. O mesmo valor do Bitpool 53 pode fornecer uma taxa de bits de 328 kbit / s com o perfil de alta qualidade recomendado ou 1212 kbit / s com um canal duplo e 4 bandas de frequência, e é por isso que os autores de SO, além das restrições no Bitpool, definem uma restrição e na taxa de bits. A meu ver, essa situação surgiu devido a uma falha no padrão A2DP: era necessário coordenar a taxa de bits, não o Bitpool.

Tabela de suporte para recursos do SBC em diferentes sistemas operacionais:
OSTaxas de amostra suportadasLimite máx. BitpoolLimite máx. Taxa de bitsTaxa de bits típicaAjuste Dinâmico de Bitpool
Windows 1044,1 kHz53512 kbps328 kbps✓ *
Linux (BlueZ + PulseAudio)16, 32, 44,1, 48 kHz64 (para entrada), 53 (para saída)Sem limite328 kbps✓ *
macOS High Sierra44,1 kHz64, padrão 53 ***Desconhecido328 kbps
Android 4.4-944,1 / 48 kHz **53328 kbps328 kbps
Android 4.1-4.3.144,1, 48 kHz **53229 kbps229 kbps
Blackberry OS 1048 kHz53Sem limite328 kbps
* O Bitpool diminui apenas, mas não aumenta automaticamente, em caso de melhoria das condições de transmissão. Para restaurar o Bitpool, você precisa 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. Em outras versões, 44,1 kHz e 48 kHz são suportados ao mesmo tempo.
*** O valor do Bitpool pode ser aumentado no Bluetooth Explorer.

aptX e aptX HD

O aptX é um codec simples e computacionalmente rápido, sem psicoacústica, usando modulação por código de pulso diferencial adaptativo ( ADPCM ). Apareceu por volta de 1988 (a data de registro da patente é de fevereiro de 1988), antes do Bluetooth ser usado principalmente em equipamentos de áudio sem fio profissionais, ISDN , cinemas. Atualmente de propriedade da Qualcomm, requer licenciamento e royalties. Em 2014: US $ 6.000 por vez e US $ 1 para cada dispositivo, para lotes de até 10.000 dispositivos ( fonte , p. 16).
O aptX e o aptX HD são o mesmo codec, com perfis de codificação diferentes.

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

CodecTaxa de amostragemCapacidadeTaxa de bitsSuporte de codificaçãoSuporte de decodificação
aptX16, 32, 44,1, 48 kHz16 bit128/256/352/384 kbps (dependendo da taxa de amostragem)Windows 10 (desktop e móvel), macOS, Android 4.4 + / 7 *, Blackberry OS 10Uma ampla variedade de dispositivos de áudio (hardware)
* As versões anteriores a 7 requerem modificação da pilha Bluetooth. O codec é suportado apenas se o fabricante do dispositivo Android tiver licenciado a Qualcomm para usar o codec (se o SO tiver bibliotecas de codificação).

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 ( dígitos para uma frequência de amostragem de 44,1 kHz).

Exemplo de áudio aptX (na parte superior está o sinal da fonte, na parte inferior está o aptX, espectrogramas apenas dos canais esquerdos, som em FLAC):

As frequências superiores ficaram um pouco mais vermelhas, mas nenhuma diferença é ouvida.

Devido à distribuição fixa de bits de quantização, o codec não pode "transferir bits" para as frequências que mais precisam deles. Diferentemente do SBC, o aptX não "corta" as frequências, mas adiciona ruído de quantização a elas, reduzindo a faixa dinâmica do áudio.

Não se deve considerar que o uso, por exemplo, de 2 bits para uma banda reduz a faixa dinâmica para 12 dB: o ADPCM permite que você use até 96 dB de faixa dinâmica, mesmo ao usar 2 bits de quantização, mas apenas com um sinal específico.
O ADPCM armazena a diferença na representação numérica entre a amostra atual e a próxima, em vez de escrever 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 usadas tabelas de coeficientes.
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) o aptX cria.

Por esse motivo, os testes sintéticos sempre produzem resultados piores que a música. Fiz um exemplo sintético especial em que o aptX mostra resultados ruins - uma onda senoidal de 12,4 kHz (acima é o sinal original, abaixo é o aptX. Som no FLAC. Abaixe o volume!):

Gráfico de espectro:
Gráfico de espectro, nível máximo de ruído - -55 dB

Ruídos são claramente audíveis.

No entanto, se um sinusóide com uma amplitude menor for gerado para ficar mais silencioso, o ruído também ficará mais silencioso, o que indica uma ampla faixa dinâmica:

Gráfico de espectro, nível máximo de ruído - -75 dB

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. Essa abordagem, em geral, é incorreta e não daria um resultado sadio com codecs mais complexos, mas especificamente para o ADPCM é bastante adequado.
A diferença entre o original e o aptX
A diferença entre a raiz quadrada e a média dos sinais está no nível de -37,4 dB, o que não é muito para música compactada.

aptX HD

O aptX HD não é um codec independente - é um perfil de codificação de codec aptX aprimorado. As alterações afetaram o número 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 (dígitos para 44,1 kHz).

CodecTaxa de amostragemCapacidadeTaxa de bitsSuporte de codificaçãoSuporte de decodificação
aptX HD16, 32, 44,1, 48 kHz24 bits192/384/529/576 kbps (dependendo da taxa de amostragem)Android 8 + *Alguns dispositivos de áudio (hardware)
* As versões anteriores a 7 requerem modificação da pilha Bluetooth. O codec é suportado apenas se o fabricante do dispositivo Android tiver licenciado a Qualcomm para usar o codec (se o SO tiver bibliotecas de codificação).

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

Vamos repetir o exemplo com uma onda senoidal de 12,4 kHz:
Gráfico de espectro, nível máximo de ruído - -72 dB

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, mas difere apenas nas configurações de atraso e buffer usadas no lado do dispositivo de áudio. O resto é apenas o aptX.
O codec foi projetado para transmissão interativa de áudio com baixa latência (filmes, jogos), onde o atraso do áudio não pode ser ajustado programaticamente. A implementação do software está disponível como um driver Dell para chips Intel Bluetooth . Também suportado por transmissores, receptores, fones de ouvido e alto-falantes, mas não smartphones.

Taxa de amostragemTaxa de bitsSuporte de codificaçãoSuporte de decodificação
44,1 kHz352 kbpsWindows 10 com driver Dell e 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 mais popular depois do MP3. Requer licenciamento e royalties: US $ 15.000 por vez (ou US $ 1.000 para empresas com menos de 15 funcionários) + US $ 0,98 para os primeiros 500.000 dispositivos ( fonte ).
O codec é padronizado como parte das especificações MPEG-2 e MPEG-4 e, ao contrário do equívoco, não pertence à Apple.

Taxa de amostragemTaxa de bitsSuporte de codificaçãoSuporte de decodificação
8 - 96 kHz8 - 576 kbps (para estéreo), 256 - 320 kbps (típico para Bluetooth)macOS, Android 7+ *, iOSUma ampla variedade de dispositivos de áudio (hardware)
* Somente em dispositivos cujos fabricantes pagaram royalties:

iOS e macOS usam o melhor codificador Apple AAC até o momento, fornecendo a mais alta qualidade de áudio possível. O Android usa o codificador Fraunhofer FDK AAC da segunda mais alta qualidade, mas vários hardwares embutidos na plataforma (SoC) podem ser usados, com qualidade de codificação desconhecida.De acordo com testes recentes do SoundGuys, a qualidade da codificação AAC por diferentes telefones Android é muito diferente: amaioria 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.O AAC oferece excelente qualidade em 320 e 256 kbps, mas está sujeito a
Gráfico de espectro de codificação AAC de vários dispositivos móveis.  O Huawei P20 Pro tem um declínio acentuado em torno de 14 kHz, LG V30 - em torno de 16 kHz, Samsung Note 8 - 17 kHz, Apple iPhone 7 - 19 kHz.


perda de codificação seqüencial 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 consecutivas, com codificação única, por exemplo, MP3 320 kbps em AAC 256 kbps pode ser negligenciado.
Como em outros codecs Bluetooth, qualquer música é decodificada primeiro e depois codificada pelo codec. Ao ouvir música no formato AAC, ela é decodificada primeiro pelo sistema operacional e depois codificada no AAC novamente, para transmissão via Bluetooth. Isso é necessário para misturar vários fluxos de áudio, por exemplo, música e notificação de uma nova mensagem. iOS não é excepção. Na Internet, você pode encontrar muitas alegações de que, no iOS, a música AAC não é transcodificada quando transmitida via Bluetooth, o que está incorreto.

O padrã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 (sem perdas). Infelizmente, em dispositivos reais, o suporte à expansão não foi encontrado. A extensão para reduzir o atraso de transmissão AAC-LD (Atraso baixo) não é padronizada para Bluetooth.


MP1 / 2/3

Os codecs da família MPEG-1/2 Parte 3 consistem em MP3s conhecidos e amplamente utilizados, MP2 menos comum (usado principalmente em TV e rádio digital) e MP1 completamente desconhecido.

Os codecs MP1 e MP2 antigos não são compatíveis: não encontrei fones de ouvido e nem uma única 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 de sistemas operacionais modernos. Parece que a pilha BlueSoleil de terceiros para Windows pode codificar para MP3 se você alterar manualmente o arquivo de configuração, mas minha instalação leva ao BSoD no Windows 10. Conclusão - o codec não pode realmente ser usado para áudio Bluetooth.
Antes, em 2006-2008, antes da distribuição do padrão A2DP nos 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 do smartphone permitia o acesso a muitas funções de baixo nível e, no Windows Mobile, era completamente possível instalar pilhas Bluetooth de terceiros.

A patente mais recente do codec MP3 expirou. O uso do codec não exige royalties a partir de 23 de abril de 2017.

Se a patente mais antiga mencionada nas referências mencionadas for tomada como medida, a tecnologia MP3 ficará livre de patentes nos Estados Unidos em 16 de abril de 2017, quando a patente US 6.009.399, mantida e administrada pela Technicolor, expirará.
: www.iis.fraunhofer.de/en/ff/amm/prod/audiocodec/audiocodecs/mp3.html

16 — 488 — 320 /()


LDAC

O novo e avançado codec de alta resolução da Sony, que suporta taxas de amostragem de até 96 kHz e resolução 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. Tem a função de ajuste adaptativo da taxa de bits, dependendo das condições do rádio.

O codificador LDAC ( libldac ) está incluído no pacote padrão do Android, portanto, a codificação é suportada em qualquer smartphone Android, começando com a versão 8 do sistema operacional. Os decodificadores de software não estão disponíveis gratuitamente, a especificação do codec não é acessível ao público em geral, no entanto, à primeira vista no codificador, o dispositivo interno é semelhante ao ATRAC9- Codec da Sony usado no PlayStation 4 e Vita: ambos trabalham na faixa de frequências, usam a transformada discreta de cosseno modificada (MDCT) e a compressão usando o algoritmo Huffman.
O LDAC usa a divisão em 12 ou 16 bandas de frequência: 12 são usadas para 44,1 e 48 kHz, 16 para 88,2 e 96 kHz.

O suporte ao LDAC é representado quase exclusivamente pelos fones de ouvido da Sony. Às vezes, a capacidade de decodificar LDAC é encontrada em fones de ouvido e DACs de outros fabricantes, mas muito raramente.

Taxa de amostragemTaxa de bitsSuporte de codificaçãoSuporte de decodificação
44,1 - 96 kHz303/606/909 kbit / s (para 44,1 e 88,2 kHz), 330/660/990 kbit / s (para 48 e 96 kHz)Android 8 ou superiorAlguns fones de ouvido e dispositivos únicos da Sony de outros fabricantes (hardware)


O marketing do LDAC como codec de alta resolução prejudica seu componente técnico: é estúpido gastar taxa de bits na transmissão de frequências inaudíveis pelo ouvido humano e aumentar a profundidade de bits, desde que não seja suficiente transmitir a qualidade do CD (44,1 / 16) sem perda. 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 é transmitido pelo ar.

Como o decodificador de software LDAC não está disponível gratuitamente, é impossível testar o codec sem dispositivos adicionais que decodifiquem o LDAC. De acordo com o teste LDAC no DAC com seu suporte, que foi conectado pelos engenheiros da SoundGuys.com por uma saída digital e gravou o som emitido nos sinais de teste, o LDAC 660 e 990 kbps no modo de qualidade de CD fornece uma relação sinal-ruído um pouco melhor que a do aptX HD Este é um bom resultado. Fonte: www.soundguys.com/ldac-ultimate-bluetooth-guide-20026 O LDAC também suporta taxa de bits dinâmica fora dos perfis estabelecidos - de 138 kbps a 990 kbps, mas, tanto quanto eu sei, o Android usa apenas perfis padronizados. / 606/909 e 330/660/990 kbit / s.

Perfil de ruído LDAC CD 990 kbit / s




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 no A2DP nunca foi usado como um codec Bluetooth, nem mesmo pela própria Sony, os codecs Samsung HD, Samsung Scalable e Samsung UHQ-BT têm suporte muito limitado de dispositivos de transmissão e recepção, e o HWA LHDC é muito novo e é suportado apenas três (?) dispositivos.


Suporte para codec de áudio

Nem todos os fabricantes publicam informações precisas sobre codecs compatíveis com determinados fones de ouvido, alto-falantes, receptores ou transmissores sem fio. Às vezes, acontece que o suporte a um determinado codec é apenas para transmissão, mas não para recepção (relevante para transmissores-receptores combinados), embora o fabricante afirme simplesmente ser "suportado", sem comentários (suponho que o licenciamento separado de codificadores e decodificadores de alguns codecs seja o responsável ) Nos dispositivos mais baratos, talvez você não encontre o suporte ao aptX declarado.

Infelizmente, nas interfaces da maioria dos sistemas operacionais, o codec usado não é exibido em nenhum lugar. As 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 compatíveis com o telefone / computador e os fones de ouvido serão exibidos.

Como descobrir quais codecs o dispositivo suporta? A opção mais confiável é registrar e analisar um despejo de tráfego com parâmetros 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 e no Android, a função padrão de salvamento de dump do Bluetooth HCI, disponível nas ferramentas do desenvolvedor. Você receberá um dump do btsnoop, que pode ser baixado no analisador Wireshark.
Preste atenção: Você pode obter o dump correto apenas conectando do telefone / computador aos fones de ouvido / alto-falante (por mais engraçado que pareça)! 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 você grave o dump correto, primeiro desconecte o emparelhamento com o dispositivo e, durante a gravação do dump, emparelhe o telefone com os fones de ouvido.

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


Como resultado, você deve ver algo semelhante:
Wireshark com um despejo e filtro carregado para exibir o comando A2DP GetCapabilities

Em cada ponto do comando GetCapabilities, você pode clicar e ver as características detalhadas do codec.
Características de um dos itens selecionados.  O identificador de codec está visível.

O Wireshark não conhece todos os identificadores de codec; portanto, alguns codecs precisarão 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 descobrir se o seu dispositivo suporta velocidades EDR de 3 Mbps, você pode filtrar:
 bthci_evt.code==0x0b 

imagem

Para não analisar os despejos manualmente, criei um serviço que analisará tudo automaticamente: btcodecs.valdikss.org.ru

Para Windows, existe um utilitário Bluetooth Tweaker simples, mas útil, que, entre outras coisas, mostra os codecs atuais e os suportados.
No Linux, você também pode usar o programa avinfo incluído no BlueZ.


Comparação de codecs. 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 fabricante do telefone nem o fabricante do fone de ouvido podem alterar a taxa de bits ou os coeficientes de codificação aptX. O proprietário do codec, Qualcomm, fornece um codificador de referência na forma de uma biblioteca. Esses fatos são o ponto forte do aptX - você sabe com antecedência qual a qualidade do som que obterá, sem nenhum "buts".

A SBC, pelo contrário, possui muitos parâmetros configuráveis, uma taxa de bits dinâmica (um codificador pode reduzir o parâmetro de pool de bits se o rádio estiver carregado) e não possui códigos físicos, mas apenas a "qualidade média" e a "alta qualidade" recomendadas, que foram adicionadas à especificação A2DP em 2003 ano. “Alta qualidade” não é tão alto para os padrões modernos, e a maioria das pilhas Bluetooth não permite usar os parâmetros melhor do que no perfil “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 os implementam.
Essas são as fraquezas da SBC - nunca é claro com antecedência 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, o codec deve teoricamente fornecer qualidade indistinguível do original, mas a prática, a julgar pelos testes do laboratório SoundGuys em diferentes dispositivos Android, não confirma isso. 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, e no Android é limitado ao aptX e LDAC.

Equipamentos que suportam codecs alternativos, em regra, são de maior qualidade, simplesmente porque, para dispositivos de baixa qualidade absolutamente baratos, não faz sentido pagar taxas de licença pelo uso desses codecs. De acordo com meus testes, a SBC parece muito boa em equipamentos de alta qualidade.

Fiz um serviço da Web codificando áudio em SBC, aptX e aptX HD em tempo real, diretamente no navegador. Com ele, você pode testar esses codecs de áudio sem realmente transmitir áudio via Bluetooth, em fones de ouvido com fio, alto-falantes e sua música favorita, além de alterar as configurações de codificação diretamente durante a reprodução de áudio:
btcodecs.valdikss.org.ru/sbc-encoder
O serviço usa as bibliotecas de codificação SBC do projeto BlueZ e a libopenaptx do ffmpeg, que são compiladas no WebAssembly e JavaScript do C, via emscripten, para executar no 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. Não há frequências acima de 20 kHz no arquivo MP3 original.

Tente alternar codecs e avaliar se você ouvir a diferença entre o original, o SBC 53 Joint Stereo (perfil padrão e mais comum) e o aptX / aptX HD.


Eu ouço a diferença entre os codecs nos fones de ouvido !

As pessoas que não ouvem a diferença entre codecs durante os testes por meio de um serviço da Web afirmam que ouvem isso 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 pelas diferenças 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 , expansor estéreo e outros itens projetados para melhorar (ou alterar) o som. Os fabricantes de equipamentos Bluetooth podem configurar o DSP para cada codec separadamente e, ao alternar entre codecs, o ouvinte pensará que ele ouve a diferença nos codecs quando realmente ouvir diferentes configurações do DSP.

Na foto: DECODER - Equalizador paramétrico - aprimoramento estéreo - compander - pós masterização - aprimoramento de saída
Transportador de processamento de som Kalimba DSP em chips CSR / Qualcomm

Na figura: caixas de seleção para ativar diferentes funções DSP ativadas para cada codec.
Ativação de várias funções DSP para cada codec e saída separadamente

Alguns dispositivos de segmento premium estão equipados com um programa que permite configurar parâmetros DSP, mas os fones de ouvido mais baratos não possuem esse recurso, e os usuários não podem desativar o som do pós-processamento usando meios regulares.


Recursos do dispositivo

A versão moderna do padrão A2DP tem a função de "controle de volume absoluto" - controle de volume do dispositivo com comandos especiais do protocolo AVRCP, que controla o ganho do estágio de saída, em vez de reduzir programaticamente o volume do fluxo de áudio. Se, ao alterar o volume nos fones de ouvido, a alteração não estiver sincronizada com o volume do telefone, significa que seus fones de ouvido ou o telefone não suportam essa função. Nesse caso, faz sentido ouvir música sempre com o volume máximo no telefone, 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 deverá ser maior.
Na realidade, existem situações tristes. Um compander forte é ativado no RealForce OverDrive D1 para fones de ouvido SBC, e aumentar o volume aumenta o nível de sons silenciosos, mas o volume dos sons altos não muda (o sinal é comprimido). 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, aparentemente esse é 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 o fone de ouvido relate um atraso ao dispositivo transmissor a partir do qual o som realmente é reproduzido. Isso permite que você ajuste a sincronização do áudio com o vídeo enquanto assiste aos arquivos de vídeo: se houver problemas com a transmissão, 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 sincronizados novamente.
O recurso é suportado por muitos fones de ouvido, Android 9+ e Linux com PulseAudio 12.0+. Não sei sobre o suporte a funções em outras plataformas.


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

Para transmissão de voz em Bluetooth, são usadas a Conexão Síncrona Orientada (SCO) e sua versão aprimorada da Conexão Síncrona Avançada Orientada (eSCO) - transmissão síncrona com coordenação preliminar da conexão. O modo permite transmitir som e voz 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 este modo é usado, a voz do microfone e o áudio para os fones de ouvido são transmitidos com a mesma qualidade.
A transferência dos dados em si é padronizada pelo perfil HSP, que também descreve funções adicionais, como a operação dos botões de volume, de atendimento e de chamada final.
Infelizmente, a partir de 2019, a qualidade da voz por Bluetooth ainda é ruim e não está claro por que o Bluetooth SIG não faz nada com ele.

CVSD
O codec de voz básico do 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 registro neste codec .

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

Um exemplo de registro neste codec .

Não brilha, mas muito melhor que o CVSD, mas ainda é 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 com uma frequência de amostragem de 16 kHz.

Faststream
A CSR decidiu desenvolver 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 implementaram o suporte para áudio SBC bidirecional no padrão para transmissão de A2DP de áudio unidirecional, perfis de codificação padronizados e o denominaram "FastStream".

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

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

A empresa apresentou uma muleta interessante, mas devido ao fato de contradizer o padrão A2DP, é suportada apenas em alguns dos transmissores da empresa (que funcionam como uma placa de áudio USB, não como um dispositivo 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.

No momento, o suporte ao FastStream no sistema operacional é apenas na forma de um patch para Linux PulseAudio do desenvolvedor Pali Rohár, que não está incluído na ramificação principal do programa.

Latência baixa do aptX
Para nossa surpresa, o aptX Low Latency também suporta áudio bidirecional, implementando o mesmo princípio do FastStream.
Não funcionará para usar esse recurso do codec - não há suporte para decodificação de baixa latência em nenhum sistema operacional ou em nenhuma 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 a mesma marca, os quais são amplamente utilizados para finalidades diferentes.

Existem dois protocolos Bluetooth diferentes e não compatí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 dispositivos domésticos.

A partir do Bluetooth 4.0, as alterações nas especificações envolviam principalmente o Bluetooth Low Energy, e 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 na versão Bluetooth Core Specification 5.0. 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)

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

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á padrão para transmissão de á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á analógico no LE.

Conclusão - comprar dispositivos de áudio com Bluetooth 5 apenas por causa da nova versão do protocolo é inútil. O Bluetooth 4.0 / 4.1 / 4.2 no contexto da transmissão de áudio funcionará da mesma maneira.
Se o anúncio de novos fones de ouvido mencionar um raio de operação duplo e consumo de energia reduzido 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 em seus anúncios estejam confusos sobre as diferenças na nova versão do padrão, e alguns chips Bluetooth 5 suportam a quinta versão apenas para LE e para Classic eles usam 4.2.

Atraso de áudio

A quantidade de atraso (atraso) do áudio depende de muitos fatores: o tamanho do buffer na pilha de áudio, na pilha Bluetooth e no dispositivo sem fio mais reprodutor, o atraso algorítmico do codec.

O atraso de codecs simples, como SBC, aptX e aptX HD, é muito pequeno e tem de 3 a 6 ms, o que pode ser negligenciado, mas codecs complexos, como AAC e LDAC, podem causar um atraso perceptível. O atraso algorítmico do AAC para 44,1 kHz é 60 ms. LDAC - cerca de 30 ms (de acordo com uma análise aproximada do código fonte. Posso estar enganado, mas não muito).

O atraso resultante é 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). Supondo que os dispositivos que suportam codecs aptX, AAC e LDAC adicionais usem componentes de alta qualidade e um pequeno tamanho de buffer, obtemos os seguintes atrasos típicos:

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

Lembre-se: o aptX Low Latency não é suportado em sistemas operacionais, pelo que um atraso menor pode ser obtido apenas por um monte de transmissor + receptor ou transmissor + fones de ouvido / alto-falante, e todos os dispositivos devem suportar esse codec.


Problemas com as certificações e logotipos do dispositivo Bluetooth

Como distinguir um dispositivo de áudio de alta qualidade de uma embarcação barata? Na aparência, antes de tudo!

Fones de ouvido, alto-falantes e receptores chineses baratos:
  1. A palavra "Bluetooth" está ausente na caixa e no dispositivo, mais frequentemente usada "Sem fio" e "BT"
  2. Falta o logotipo do Bluetooth Logotipo bluetooth na caixa ou dispositivo
  3. Nenhum LED azul piscando

A ausência desses elementos indica que o dispositivo não passou na certificação, o que significa que é potencialmente problemático ou de baixa qualidade. Por exemplo, os fones de ouvido Bluedio não têm certificação Bluetooth e não estão totalmente de acordo com a especificação A2DP. Eles não passariam na certificação.

Considere vários dispositivos e caixas a partir deles:






Estes são todos os dispositivos não certificados. As instruções podem incluir o 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 que “o bluetooth Ze está conectado com êxito”, isso também não significa sua qualidade:



Conclusão

O Bluetooth é capaz de substituir completamente fones de ouvido e fones de ouvido com fio? É capaz, mas com o custo do tempo de conversação de baixa qualidade, maior atraso na transmissão de áudio, o que pode ser irritante em jogos e muitos 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 um substituto há muito esperado da SBC "obsoleta e ruim", que está longe de ser tão ruim quanto é habitual pensar.

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

Mais informações podem ser encontradas no 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 do Bluetooth publicamente, mas agora está disponível apenas para aqueles que entraram no Bluetooth SIG.

Source: https://habr.com/ru/post/pt427997/


All Articles