O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Áudio Digital USB

Este artigo analisa o suporte do Android para áudio digital USB e protocolos baseados em USB relacionados.

Público

O público-alvo deste artigo são OEMs de dispositivos Android, fornecedores de SoC, fornecedores de periféricos de áudio USB, desenvolvedores de aplicativos de áudio avançados e outros que buscam uma compreensão detalhada dos componentes internos de áudio digital USB no Android.

Os usuários finais de dispositivos Nexus devem consultar o artigo Gravar e reproduzir áudio usando o modo host USB na Central de Ajuda do Nexus . Embora este artigo não seja voltado para usuários finais, certos consumidores audiófilos podem achar partes de seu interesse.

Visão geral do USB

Universal Serial Bus (USB) é descrito informalmente no artigo da Wikipedia USB e é formalmente definido pelos padrões publicados pelo USB Implementers Forum, Inc. Por conveniência, resumimos os principais conceitos de USB aqui, mas os padrões são a referência oficial.

Conceitos básicos e terminologia

USB é um barramento com um único iniciador de operações de transferência de dados, chamado de host . O host se comunica com periféricos por meio do barramento.

Nota: Os termos dispositivo e acessório são sinônimos comuns para periférico . Evitamos esses termos aqui, pois eles podem ser confundidos com dispositivo Android ou com o conceito específico do Android denominado modo acessório .

Uma função crítica do host é a enumeração : o processo de detectar quais periféricos estão conectados ao barramento e consultar suas propriedades expressas por meio de descritores .

Um periférico pode ser um objeto físico, mas na verdade implementa várias funções lógicas. Por exemplo, um periférico de webcam pode ter uma função de câmera e uma função de áudio de microfone.

Cada função periférica possui uma interface que define o protocolo para se comunicar com aquela função.

O host se comunica com um periférico por meio de um tubo até um terminal , uma fonte de dados ou coletor fornecido por uma das funções do periférico.

Existem dois tipos de canais : mensagem e fluxo . Um tubo de mensagem é usado para controle e status bidirecional. Um tubo de fluxo é usado para transferência de dados unidirecional.

O host inicia todas as transferências de dados, portanto, os termos entrada e saída são expressos em relação ao host. Uma operação de entrada transfere dados do periférico para o host, enquanto uma operação de saída transfere dados do host para o periférico.

Existem três modos principais de transferência de dados: interrupção , volume e isócrono . O modo isócrono será discutido mais adiante no contexto de áudio.

O periférico pode ter terminais que se conectam ao mundo externo, além do próprio periférico. Desta forma, o periférico serve para traduzir entre o protocolo USB e os sinais do "mundo real". Os terminais são objetos lógicos da função.

Modos Android USB

Modo de desenvolvimento

O modo de desenvolvimento está presente desde o lançamento inicial do Android. O dispositivo Android aparece como um periférico USB para um PC host executando um sistema operacional de desktop como Linux, Mac OS X ou Windows. A única função periférica visível é Android fastboot ou Android Debug Bridge (adb) . Os protocolos fastboot e adb são dispostos em camadas sobre o modo de transferência de dados em massa USB.

Modo host

O modo host é introduzido no Android 3.1 (API de nível 12).

Como o dispositivo Android deve atuar como host, e a maioria dos dispositivos Android inclui um conector micro-USB que não permite diretamente a operação do host, um adaptador on-the-go ( OTG ) como este geralmente é necessário:

OTG

Figura 1. Adaptador On-the-go (OTG)

Um dispositivo Android pode não fornecer energia suficiente para operar um periférico específico, dependendo de quanta energia o periférico precisa e de quanto o dispositivo Android é capaz de fornecer. Mesmo se a energia adequada estiver disponível, a carga da bateria do dispositivo Android pode ser significativamente reduzida. Para essas situações, use um hub alimentado como este:

Hub alimentado

Figura 2. Hub alimentado

Modo acessório

O modo acessório foi introduzido no Android 3.1 (API de nível 12) e retrocedido para o Android 2.3.4. Nesse modo, o dispositivo Android opera como um periférico USB, sob o controle de outro dispositivo, como um dock que funciona como host. A diferença entre o modo de desenvolvimento e o modo acessório é que as funções USB adicionais são visíveis para o host, além do adb. O dispositivo Android começa no modo de desenvolvimento e, em seguida, passa para o modo acessório por meio de um processo de renegociação.

O modo acessório foi estendido com recursos adicionais no Android 4.1, em particular o áudio descrito abaixo.

Áudio USB

Aulas USB

Cada função periférica tem um documento de classe de dispositivo associado que especifica o protocolo padrão para essa função. Isso permite que hosts compatíveis com a classe e funções periféricas interfiram, sem conhecimento detalhado do funcionamento um do outro. A conformidade de classe é crítica se o host e o periférico forem fornecidos por entidades diferentes.

O termo sem driver é um sinônimo comum para compatibilidade de classe , indicando que é possível usar os recursos padrão de tal periférico sem exigir a instalação de um driver específico do sistema operacional. Pode-se supor que um periférico anunciado como "sem necessidade de driver" para os principais sistemas operacionais de desktop será compatível com a classe, embora possa haver exceções.

Aula de áudio USB

Aqui, nos preocupamos apenas com periféricos que implementam funções de áudio e, portanto, aderem à classe de dispositivo de áudio. Existem duas edições da especificação de classe de áudio USB: classe 1 (UAC1) e 2 (UAC2).

Comparação com outras classes

O USB inclui muitas outras classes de dispositivos, algumas das quais podem ser confundidas com a classe de áudio. A classe de armazenamento em massa (MSC) é usada para acesso orientado ao setor à mídia, enquanto o Protocolo de transferência de mídia (MTP) é para acesso total a arquivos de mídia. Tanto o MSC quanto o MTP podem ser usados ​​para transferir arquivos de áudio, mas apenas a classe de áudio USB é adequada para streaming em tempo real.

Terminais de áudio

Os terminais de um periférico de áudio são geralmente analógicos. O sinal analógico apresentado no terminal de entrada do periférico é convertido em digital por um conversor analógico-digital (ADC) e é transportado pelo protocolo USB para ser consumido pelo host. O ADC é uma fonte de dados para o host. Da mesma forma, o host envia um sinal de áudio digital pelo protocolo USB para o periférico, onde um conversor digital para analógico (DAC) é convertido e apresentado em um terminal de saída analógico. O DAC é um coletor para o host.

Canais

Um periférico com função de áudio pode incluir um terminal de origem, terminal de dissipação ou ambos. Cada direção pode ter um canal ( mono ), dois canais ( estéreo ) ou mais. Periféricos com mais de dois canais são chamados de multicanais . É comum interpretar um fluxo estéreo como consistindo nos canais esquerdo e direito e, por extensão, interpretar um fluxo multicanal como tendo localizações espaciais correspondentes a cada canal. No entanto, também é bastante apropriado (especialmente para áudio USB mais do que HDMI ) não atribuir nenhum significado espacial padrão específico a cada canal. Nesse caso, cabe ao aplicativo e ao usuário definir como cada canal é utilizado. Por exemplo, um fluxo de entrada USB de quatro canais pode ter os primeiros três canais conectados a vários microfones dentro de uma sala e o canal final recebendo entrada de um rádio AM.

Modo de transferência isócrono

O áudio USB usa o modo de transferência isócrono para suas características em tempo real, à custa da recuperação de erros. No modo isócrono, a largura de banda é garantida e os erros de transmissão de dados são detectados usando uma verificação de redundância cíclica (CRC). Mas não há confirmação ou retransmissão do pacote em caso de erro.

As transmissões isócronas ocorrem a cada período de Start Of Frame (SOF). O período SOF é de um milissegundo para velocidade total e 125 microssegundos para alta velocidade. Cada quadro de alta velocidade carrega até 1023 bytes de carga útil e um quadro de alta velocidade carrega até 1024 bytes. Juntando isso, calculamos a taxa de transferência máxima como 1.023.000 ou 8.192.000 bytes por segundo. Isso define um limite superior teórico na taxa de amostragem de áudio combinada, contagem de canais e profundidade de bits. O limite prático é menor.

No modo isócrono, existem três submodos:

  • Adaptativo
  • Assíncrono
  • Síncrono

No submodo adaptativo, o coletor ou fonte periférica se adapta a uma taxa de amostragem potencialmente variável do host.

No submodo assíncrono (também chamado de feedback implícito), o coletor ou fonte determina a taxa de amostragem e o host acomoda. A principal vantagem teórica do submodo assíncrono é que o relógio USB de origem ou dissipador está física e eletricamente mais próximo (e na verdade pode ser o mesmo ou derivado) do relógio que aciona o DAC ou ADC. Essa proximidade significa que o submodo assíncrono deve ser menos suscetível a jitter do clock. Além disso, o relógio usado pelo DAC ou ADC pode ser projetado para maior precisão e menor desvio do que o relógio do host.

No submodo síncrono, um número fixo de bytes é transferido a cada período SOF. A taxa de amostragem de áudio é efetivamente derivada do relógio USB. O submodo síncrono não é comumente usado com áudio porque o host e o periférico estão à mercê do relógio USB.

A tabela abaixo resume os submodos isócronos:

Sub-modo Contagem de bytes
por pacote
Taxa de amostragem
determinado por
Usado para áudio
adaptativo variável hospedeiro sim
assíncrono variável periférico sim
síncrono fixo Relógio USB não

Na prática, o modo secundário é importante, mas outros fatores também devem ser considerados.

Suporte Android para classe de áudio USB

Modo de desenvolvimento

O áudio USB não é compatível com o modo de desenvolvimento.

Modo host

O Android 5.0 (API de nível 21) e superior oferece suporte a um subconjunto de recursos de classe 1 de áudio USB (UAC1):

  • O dispositivo Android deve atuar como host
  • O formato de áudio deve ser PCM (interface tipo I)
  • A profundidade de bits deve ser de 16 bits, 24 bits ou 32 bits, onde 24 bits de dados de áudio úteis são justificados à esquerda dentro dos bits mais significativos da palavra de 32 bits
  • A taxa de amostragem deve ser 48, 44,1, 32, 24, 22,05, 16, 12, 11,025 ou 8 kHz
  • A contagem de canais deve ser 1 (mono) ou 2 (estéreo)

A leitura do código-fonte da estrutura do Android pode mostrar código adicional além do mínimo necessário para oferecer suporte a esses recursos. Mas este código não foi validado, portanto, recursos mais avançados ainda não foram reivindicados.

Modo acessório

O Android 4.1 (API de nível 16) adicionou suporte limitado para reprodução de áudio no host. No modo acessório, o Android roteia automaticamente sua saída de áudio para USB. Ou seja, o dispositivo Android serve como fonte de dados para o host, por exemplo, um dock.

O áudio do modo acessório possui estes recursos:

  • O dispositivo Android deve ser controlado por um host experiente que pode primeiro fazer a transição do dispositivo Android do modo de desenvolvimento para o modo acessório e, em seguida, o host deve transferir dados de áudio do endpoint apropriado. Portanto, o dispositivo Android não parece "sem driver" para o host.
  • A direção deve ser inserida , expressa em relação ao host
  • O formato de áudio deve ser PCM de 16 bits
  • A taxa de amostragem deve ser 44,1 kHz
  • A contagem de canais deve ser 2 (estéreo)

O áudio do modo acessório não foi amplamente adotado e não é atualmente recomendado para novos designs.

Aplicações de áudio digital USB

Como o nome indica, o sinal de áudio digital USB é representado por um fluxo de dados digital em vez do sinal analógico usado pelo conector de mini headset TRS comum. Eventualmente, qualquer sinal digital deve ser convertido para analógico antes de ser ouvido. Existem compensações na escolha de onde colocar essa conversão.

Um conto de dois DACs

No diagrama de exemplo abaixo, comparamos dois designs. Primeiro, temos um dispositivo móvel com processador de aplicativo (AP), DAC on-board, amplificador e conector TRS analógico conectado aos fones de ouvido. Também consideramos um dispositivo móvel com USB conectado a um DAC externo USB e amplificador, também com fones de ouvido.

Comparação DAC

Figura 3. Comparação de dois DACs

Qual design é melhor? A resposta depende de suas necessidades. Cada um tem vantagens e desvantagens.

Nota: Esta é uma comparação artificial, uma vez que um dispositivo Android real provavelmente teria ambas as opções disponíveis.

O primeiro projeto A é mais simples, menos caro, usa menos energia e será um projeto mais confiável, assumindo componentes de outra forma igualmente confiáveis. No entanto, geralmente existem compensações entre qualidade de áudio e outros requisitos. Por exemplo, se este for um dispositivo de mercado de massa, pode ser projetado para atender às necessidades do consumidor em geral, não para o audiófilo.

No segundo design, o periférico de áudio externo C pode ser projetado para maior qualidade de áudio e maior potência de saída, sem afetar o custo do dispositivo Android B básico do mercado de massa. Sim, é um design mais caro, mas o custo é absorvido apenas por aqueles que querem.

Os dispositivos móveis são notórios por terem placas de circuito de alta densidade, o que pode resultar em mais oportunidades de diafonia que degrada os sinais analógicos adjacentes. A comunicação digital é menos suscetível a ruído , portanto, mover o DAC do dispositivo Android A para uma placa de circuito externo C permite que os estágios analógicos finais sejam fisicamente e eletricamente isolados da placa de circuito densa e barulhenta, resultando em áudio de maior fidelidade.

Por outro lado, o segundo design é mais complexo e, com a complexidade adicional, surgem mais oportunidades de as coisas falharem. Também há latência adicional dos controladores USB.

Aplicativos do modo host

Os aplicativos de áudio do modo host USB típicos incluem:

  • ouvir música
  • telefonia
  • mensagens instantâneas e chat de voz
  • gravação

Para todos esses aplicativos, o Android detecta um periférico de áudio digital USB compatível e encaminha automaticamente a reprodução e captura de áudio de forma apropriada, com base nas regras de política de áudio. O conteúdo estéreo é reproduzido nos primeiros dois canais do periférico.

Não há APIs específicas para áudio digital USB. Para uso avançado, o roteamento automático pode interferir nos aplicativos que reconhecem USB. Para esses aplicativos, desative o roteamento automático por meio do controle correspondente na seção Mídia de Configurações / Opções do desenvolvedor .

Depuração no modo host

Enquanto estiver no modo de host USB, a depuração adb via USB não está disponível. Consulte a seção Uso sem fio do Android Debug Bridge para obter uma alternativa.

Implementando áudio USB

Recomendações para fornecedores de periféricos de áudio

Para interoperar com dispositivos Android, os fornecedores de periféricos de áudio devem:

  • design para conformidade de classe de áudio; atualmente o Android tem como alvo a classe 1, mas é aconselhável planejar para a classe 2
  • evite peculiaridades
  • teste para interoperabilidade com dispositivos Android de referência e populares
  • documentar claramente os recursos suportados, conformidade de classe de áudio, requisitos de energia, etc. para que os consumidores possam tomar decisões informadas

Recomendações para OEMs de dispositivos Android e fornecedores de SoC

Para oferecer suporte ao áudio digital USB, os fabricantes de dispositivos e fornecedores de SoC devem:

  • projetar hardware para suportar o modo host USB
  • habilite o suporte de host USB genérico no nível da estrutura por meio do sinalizador de recurso android.hardware.usb.host.xml
  • habilite todos os recursos do kernel necessários: modo de host USB, áudio USB, modo de transferência isócrono; consulte Configuração do Kernel Android
  • mantenha-se atualizado com as versões e patches recentes do kernel; apesar do objetivo nobre de conformidade de classe, existem periféricos de áudio existentes com peculiaridades , e kernels recentes têm soluções alternativas para tais peculiaridades
  • habilite a política de áudio USB conforme descrito abaixo
  • adicione audio.usb.default a PRODUCT_PACKAGES em device.mk
  • teste de interoperabilidade com periféricos de áudio USB comuns

Como habilitar a política de áudio USB

Para habilitar o áudio USB, adicione uma entrada ao arquivo de configuração da política de áudio. Normalmente está localizado aqui:

device/oem/codename/audio_policy.conf

O componente do nome do caminho "oem" deve ser substituído pelo nome do OEM que fabrica o dispositivo Android e "codinome" deve ser substituído pelo nome do código do dispositivo.

Um exemplo de entrada é mostrado aqui:

audio_hw_modules {
  ...
  usb {
    outputs {
      usb_accessory {
        sampling_rates 44100
        channel_masks AUDIO_CHANNEL_OUT_STEREO
        formats AUDIO_FORMAT_PCM_16_BIT
        devices AUDIO_DEVICE_OUT_USB_ACCESSORY
      }
      usb_device {
        sampling_rates dynamic
        channel_masks dynamic
        formats dynamic
        devices AUDIO_DEVICE_OUT_USB_DEVICE
      }
    }
    inputs {
      usb_device {
        sampling_rates dynamic
        channel_masks AUDIO_CHANNEL_IN_STEREO
        formats AUDIO_FORMAT_PCM_16_BIT
        devices AUDIO_DEVICE_IN_USB_DEVICE
      }
    }
  }
  ...
}

Código fonte

A implementação de Hardware Abstraction Layer (HAL) de áudio para áudio USB está localizada aqui:

hardware/libhardware/modules/usbaudio/

O áudio HAL USB depende muito do tinyalsa , descrito em Terminologia de áudio . Embora o áudio USB dependa de transferências isócronas, isso é abstraído pela implementação do ALSA. Portanto, o HAL de áudio USB e o tinyalsa não precisam se preocupar com essa parte do protocolo USB.

Testando áudio USB

Para obter informações sobre o teste CTS para áudio USB, consulte Testes do verificador CTS de áudio USB .