Audio digital USB

En este artículo, se analiza la compatibilidad de Android con el audio digital USB y funciones relacionadas protocolos basados en USB.

Público

El público objetivo de este artículo son los OEM de dispositivos Android, los proveedores de SoC, proveedores de periféricos de audio USB, desarrolladores avanzados de aplicaciones de audio, y otras personas que buscan una comprensión detallada de los componentes internos de audio digital USB en Android.

Los usuarios finales de dispositivos Nexus deberían ver el artículo. Cómo grabar y reproducir audio con el modo de host USB a las En su lugar, consulta el Centro de ayuda de Nexus. Aunque este artículo no está dirigido a los usuarios finales, algunos consumidores audiófilos pueden encontrar partes de interés.

Descripción general de USB

El bus universal en serie (USB) se describe informalmente en el artículo de Wikipedia USB. y está definido formalmente por los estándares publicados por la USB Implementers Forum, Inc. Para mayor comodidad, aquí resumimos los conceptos clave de USB pero los estándares son la referencia autorizada.

Terminología y conceptos básicos

USB es un bus con un solo iniciador de operaciones de transferencia de datos, llamado host. El host se comunica con periféricos en el autobús.

Nota: Los términos dispositivo y accesorio son sinónimos comunes de periférico. Evitamos usar esos términos aquí, ya que podrían confundirse con Dispositivo Android o el concepto específico de Android llamado modo de accesorio.

Una función de host fundamental es la enumeración: el proceso de detección de los periféricos conectados al bus y consultar sus propiedades expresadas a través de descriptores.

Un periférico puede ser un objeto físico pero que, en realidad, implementan varias funciones lógicas. Por ejemplo, un periférico de cámara web puede tener tanto una función de cámara como un función de audio del micrófono.

Cada función periférica tiene una interfaz que define el protocolo para comunicarse con esa función.

El host se comunica con un periférico a través de un canalización a un extremo, una fuente de datos o un receptor que proporciona una de las funciones periféricas.

Existen dos tipos de canalizaciones: mensaje y transmisión. Se utiliza una canalización de mensaje para el estado y el control bidireccional. Se usa una canalización de transmisión para la transferencia unidireccional de datos.

El host inicia todas las transferencias de datos, Por lo tanto, los términos entrada y salida se expresan en relación con el host. Una operación de entrada transfiere datos del periférico al host mientras que una operación de salida transfiere datos del host al periférico.

Existen tres modos principales de transferencia de datos: interrupt, maso e isocrónico. El modo isócrono se analizará con más detalle en el contexto de audio.

El periférico puede tener terminales que se conectan al mundo exterior. más allá del periférico en sí. De esta manera, el periférico funciona para traducir entre el protocolo USB y el "modo real" indicadores. Las terminales son objetos lógicos de la función.

Modos de USB de Android

Modo de desarrollo

El modo de desarrollo está presente desde la versión inicial de Android. El dispositivo Android aparece como un periférico USB. a una PC host que ejecute un sistema operativo de escritorio, como Linux, Mac OS X o Windows. La única función periférica visible es Inicio rápido de Android o Android Debug Bridge (adb): Los protocolos fastboot y adb se crean en capas en el modo de transferencia de datos masiva por USB.

Modo de host

El modo de host se introduce en Android 3.1 (nivel de API 12).

Como el dispositivo Android debe funcionar como host, y la mayoría de los dispositivos Android incluyen un conector micro-USB que no permita directamente el funcionamiento del host; un adaptador sobre la marcha (OTG) los siguientes son obligatorios:

de OTG

Figura 1: Adaptador Sobre la marcha (OTG)

Es posible que un dispositivo Android no proporcione la energía suficiente para operar un periférico particular, según cuánta energía necesite, y cuánta capacidad puede proporcionar el dispositivo Android. Incluso si si hay suficiente energía disponible, la carga de la batería del dispositivo Android puede significativamente. Para estas situaciones, usa una fuente hub como la siguiente:

Unidad central eléctrica

Figura 2: Unidad central eléctrica

Modo de accesorio

El modo de accesorio se introdujo en Android 3.1 (nivel de API 12) y se adaptó a Android 2.3.4. En este modo, el dispositivo Android funciona como un periférico USB, bajo el control de otro dispositivo, como un conector que funcione como host. Diferencias entre el modo de desarrollo y el modo de accesorio es que el host puede ver funciones USB adicionales, más allá de adb. El dispositivo Android comienza en modo de desarrollo y, luego, pasa al modo de accesorio a través de un proceso de renegociación.

El modo de accesorio se extendió con funciones adicionales en Android 4.1, en particular, según se describe a continuación.

Audio USB

Clases de USB

Cada función periférica tiene un documento asociado de clase de dispositivo. que especifica el protocolo estándar para esa función. Esto habilita los hosts y las funciones periféricas compatibles con su clase. interoperar, sin un conocimiento detallado del trabajo de cada uno. El cumplimiento de la clase es fundamental si el host y el periférico lo proporcionan entidades diferentes.

El término sin controlador es un sinónimo común de cumplimiento de clase, indicar que es posible utilizar las funciones estándar de este periférico sin la necesidad de un sistema operativo controlador. Podemos suponer que un periférico anunciado como "no necesita controlador" para los principales sistemas operativos de computadoras de escritorio cumplirá con las normas de clase, aunque puede haber excepciones.

Clase de audio USB

Aquí solo nos preocupamos por periféricos que implementan funciones de audio y, por lo tanto, cumplir con la clase de dispositivo de audio. Existen dos de la especificación de la clase de audio USB: clase 1 (UAC1) y 2 (UAC2).

Comparación con otras clases

USB incluye muchas otras clases de dispositivos, algunas de las cuales pueden confundirse con la clase de audio. El clase de almacenamiento masivo (MSC) se usa para acceso a los medios orientado al sector, mientras que Protocolo de transferencia multimedia (MTP) es para el acceso completo de archivos al contenido multimedia. Tanto MSC como MTP se pueden usar para transferir archivos de audio pero solo la clase de audio USB es adecuada para la transmisión en tiempo real.

Terminales de audio

Los terminales de los periféricos de audio suelen ser analógicos. La señal analógica que se presenta en el terminal de entrada del periférico se convierte en digital mediante un conversor de analógico a digital (ADC), y se transferirá a través del protocolo USB para que lo consuman el host. El ADC es una fuente de datos para el host. De forma similar, el host envía un señal de audio digital a través del protocolo USB al periférico, donde un conversor de digital a analógico (DAC) convierte y se presenta en una terminal de salida analógica. El DAC es un receptor del host.

Canales

Un periférico con función de audio puede incluir una terminal de origen, una terminal de receptor o ambas. Cada dirección puede tener un canal (mono) y dos canales. (estéreo) o más. Los periféricos con más de dos canales se denominan multicanales. Es común interpretar que una transmisión estéreo consta de izquierda y derecha, y, por extensión, para interpretar que una transmisión multicanal tiene las ubicaciones espaciales correspondientes a cada canal. Sin embargo, también es bastante apropiado (especialmente para audio USB HDMI) no asignar ningún parámetro de configuración un significado espacial estándar para cada canal. En este caso, depende del tu aplicación y usuario para definir cómo se usa cada canal. Por ejemplo, una transmisión de entrada USB de cuatro canales puede tener los tres primeros conectados a varios micrófonos de una habitación, y el estado canal que recibe entradas de una radio AM.

Modo de transferencia isócrona

El audio USB usa el modo de transferencia isócrona para sus características en tiempo real. a expensas de la recuperación de errores. En el modo isócrono, se garantiza el ancho de banda y la transmisión de datos los errores se detectan mediante una verificación de redundancia cíclica (CRC). Pero hay sin confirmación o retransmisión de paquetes en caso de error.

Las transmisiones asíncronas ocurren en cada período de inicio de la trama (SOF). El período SOF es de un milisegundo para la máxima velocidad y de 125 microsegundos para alta velocidad. Cada trama a máxima velocidad transporta 1,023 bytes de carga útil y una de alta velocidad transporta hasta 1,024 bytes. Haciendo una revisión, calculamos la tasa de transferencia máxima como 1,023,000 u 8,192,000 bytes por segundo. Esto establece un límite superior teórico para el audio combinado la tasa de muestreo, el recuento de canales y la profundidad de bits. El límite práctico es inferior.

Dentro del modo isócrono, hay tres submodos:

  • Automático
  • Asincrónico
  • Síncrona

En el submodo adaptable, el receptor periférico o la fuente se adaptan a una tasa de muestreo potencialmente variable del host.

En el submodo asíncrono (también llamado retroalimentación implícita) el receptor o la fuente determinan la tasa de muestreo y se adapta el host. La principal ventaja teórica del submodo asíncrono es que la fuente o receptor USB que esté física y eléctricamente más cerca (y puede Debe ser la misma que el reloj que controla el DAC o el ADC, o derivarse de él. Esta proximidad significa que el submodo asíncrono debería ser menos susceptible para cambiar el reloj. Además, el reloj utilizado por el DAC o ADC puede ser y están diseñadas para brindar mayor precisión y menor desvío que el reloj del host.

En el submodo síncrono, se transfiere una cantidad fija de bytes en cada período de SOF. La tasa de muestreo de audio se deriva, de manera efectiva, del reloj USB. El submodo síncrono no se usa comúnmente con audio porque ambos el host y el periférico dependen del reloj USB.

En la siguiente tabla, se resumen los submodos isónicos:

Submodo Recuento de bytes
por paquete
Tasa de muestreo
determinada por
Se usa para audio
adaptable variable organizador
respuesta variable periférico
bot corregidas Reloj USB no

En la práctica, el submodo sí importa, pero otros factores también debe considerarse.

Compatibilidad de Android con la clase de audio USB

Modo de desarrollo

El audio USB no es compatible en el modo de desarrollo.

Modo de host

Android 5.0 (nivel de API 21) y las versiones posteriores admiten un subconjunto de funciones de clase 1 de audio USB (UAC1):

  • El dispositivo Android debe funcionar como host.
  • El formato de audio debe ser PCM (tipo de interfaz I)
  • La profundidad de bits debe ser de 16, 24 o 32 bits, en la que 24 bits de datos de audio útiles se justifican a la izquierda dentro de la más significativa. bits de la palabra de 32 bits
  • La tasa de muestreo debe ser 48, 44.1, 32, 24, 22.05, 16, 12, 11.025 u 8 kHz
  • El recuento de canales debe ser 1 (mono) o 2 (estéreo)

Es posible que la información peruana del código fuente del framework de Android muestre código adicional más allá del mínimo necesario para admitir estas funciones. Pero este código no se validó, por lo que aún no se han reclamado funciones más avanzadas.

Modo de accesorio

Android 4.1 (nivel de API 16) agregó compatibilidad limitada con la reproducción de audio en el host. En el modo de accesorio, Android enruta automáticamente su salida de audio a USB. Es decir, el dispositivo Android sirve como fuente de datos para el host, por ejemplo, un conector.

El audio en modo accesorio tiene las siguientes características:

  • El dispositivo Android debe estar controlado por un host experto que primero puede hacer la transición del dispositivo Android del modo de desarrollo al modo de accesorio y, luego, el host debe transferir los datos de audio desde el extremo adecuado. Por lo tanto, el dispositivo Android no parece "sin controlador". al host.
  • La dirección debe ser input y expresada en relación con el host
  • El formato de audio debe ser PCM de 16 bits.
  • La tasa de muestreo debe ser de 44.1 kHz
  • El recuento de canales debe ser 2 (estéreo)

El audio del modo accesorio no se ha adoptado ampliamente, y no se recomienda actualmente para diseños nuevos.

Aplicaciones del audio digital USB

Como su nombre lo indica, se representa la señal de audio digital USB mediante un flujo de datos digital en lugar de la analógica señal usada por el TRS mini común conector de auriculares. Finalmente, cualquier señal digital debe convertirse en analógica antes de que se pueda escuchar. Existen ventajas a la hora de elegir dónde colocar esa conversión.

Una historia de dos DAC

En el siguiente diagrama de ejemplo, comparamos dos diseños. Primero, tenemos un dispositivo móvil con procesador de aplicaciones (AP), DAC integrado, amplificador, y el conector TRS analógico conectado a los auriculares. También consideramos dispositivo móvil con USB conectado a USB DAC externo y amplificador y auriculares.

Comparación de DAC

Figura 3: Comparación de dos DAC

¿Qué diseño es mejor? La respuesta depende de tus necesidades. Cada uno tiene ventajas y desventajas.

Nota: Esta es una comparación artificial, ya que un dispositivo Android real probablemente tendría ambas opciones disponibles.

El primer diseño A es más simple, menos costoso, usa menos energía y será un diseño más confiable, si suponemos que los componentes serán igualmente confiables. Sin embargo, por lo general, la calidad del audio tiene desventajas en comparación con otros requisitos. Por ejemplo, si se trata de un dispositivo de mercado masivo, puede estar diseñado para adaptarse las necesidades del consumidor general, no del audiófilo.

En el segundo diseño, el periférico C de audio externo puede diseñarse para mayor calidad de audio y mayor potencia de salida sin afectar el costo de el dispositivo Android B básico del mercado masivo. Sí, es un diseño más costoso pero el costo lo absorben solo aquellos que lo desean.

Los dispositivos móviles son conocidos por tener dispositivos de alta densidad circuitos integrados, lo que puede generar más oportunidades diafonía que degrade las señales analógicas adyacentes. La comunicación digital es menos susceptible de ruido, Pasar el DAC del dispositivo Android A a una placa de circuito externa C permite que las etapas analógicas finales sean física y eléctrica aislada de la placa de circuito densa y ruidosa, lo que genera un audio de mayor fidelidad.

Por otro lado, el segundo diseño es más complejo y, con más complejidad, oportunidades para que las cosas fallen. También hay latencia adicional desde los controladores USB.

Aplicaciones del modo de host

Entre las aplicaciones de audio típicas del modo host USB, se incluyen las siguientes:

  • escuchar música
  • telefonía
  • mensajería instantánea y chat de voz
  • grabando

Para todas estas aplicaciones, Android detecta un puerto USB digital periférico de audio y enruta automáticamente la reproducción y captura de audio de forma adecuada, según las reglas de la política de audio. El contenido estéreo se reproduce en los dos primeros canales del periférico.

No hay APIs específicas para el audio digital USB. Para el uso avanzado, el enrutamiento automático puede interferir con las aplicaciones compatibles con USB. Para esas aplicaciones, inhabilita el enrutamiento automático a través del control correspondiente en la sección Contenido multimedia de Configuración / Opciones para desarrolladores

Cómo depurar en el modo de host

La depuración de adb a través de USB no está disponible mientras se está en el modo de host USB. Consulta la sección Uso inalámbrico de Android Debug Bridge para tener una alternativa.

Cómo implementar el audio USB

Recomendaciones para proveedores de periféricos de audio

Para la interoperabilidad con dispositivos Android, los proveedores de periféricos de audio deben hacer lo siguiente:

  • diseñar para el cumplimiento de la clase de audio; Por el momento, Android se orienta a la clase 1, pero se recomienda planificar para la clase 2.
  • Evita las excepciones
  • Realiza pruebas de interoperabilidad con dispositivos Android de referencia y populares.
  • documentar claramente las funciones admitidas, el cumplimiento de la clase de audio, los requisitos de alimentación, etc. para que los consumidores puedan tomar decisiones fundamentadas

Recomendaciones para OEM y proveedores de SoC de dispositivos Android

Para admitir el audio digital USB, los OEM de dispositivos y los proveedores de SoC deben hacer lo siguiente:

  • Diseñar hardware para admitir el modo de host USB
  • habilitar la compatibilidad genérica del host USB a nivel del framework mediante la marca de función android.hardware.usb.host.xml
  • habilitar todas las funciones de kernel necesarias: modo de host USB, audio USB, modo de transferencia isócrata; consulta Configuración del kernel de Android
  • mantenerse actualizado con las versiones y los parches más recientes de kernel a pesar del noble objetivo del cumplimiento de la clase, existen periféricos de audio. con características, y los kernels más recientes tienen soluciones alternativas para estas peculiaridades
  • Habilita la política de audio USB como se describe a continuación
  • Agrega audio.usb.default a PRODUCT_PACKAGES en device.mk.
  • prueba de interoperabilidad con periféricos de audio USB comunes

Habilita la política de audio USB

Para habilitar el audio USB, agrega una entrada a la archivo de configuración de directivas de audio. Normalmente, esto es ubicado aquí:

device/oem/codename/audio_policy.conf

El componente de nombre de ruta "oem" debe reemplazarse por el nombre del OEM que fabrica el dispositivo Android, y "nombre interno" debe reemplazarse por el nombre interno del dispositivo.

A continuación, se muestra una entrada de ejemplo:

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 fuente

Capa de abstracción de hardware (HAL) de audio para audio USB se encuentra aquí:

hardware/libhardware/modules/usbaudio/

La HAL de audio USB depende tinyalsa, descrito en Terminología de audio Aunque el audio USB se basa en transferencias isócronas, se abstrae de la implementación de ALSA. Así que la HAL de audio USB y tinyalsa no tienen que preocuparse con esta parte del protocolo USB.

Probar audio USB

Para obtener información sobre las pruebas del CTS para audio USB, consulta Pruebas del verificador del CTS de audio USB.