Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Audio digital USB

Este artículo revisa el soporte de Android para audio digital USB y protocolos basados ​​en USB relacionados.

Audiencia

El público objetivo de este artículo son los fabricantes de equipos originales (OEM) de dispositivos Android, proveedores de SoC, proveedores de periféricos de audio USB, desarrolladores de aplicaciones de audio avanzadas y otros que buscan una comprensión detallada de los componentes internos de audio digital USB en Android.

Los usuarios finales de dispositivos Nexus deben ver el artículo Grabar y reproducir audio usando el modo de host USB en el Centro de ayuda de Nexus . Aunque este artículo no está orientado a los usuarios finales, algunos consumidores audiófilos pueden encontrar partes de su interés.

Descripción general de USB

Universal Serial Bus (USB) se describe informalmente en el artículo de Wikipedia USB , y está formalmente definido por los estándares publicados por 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 único iniciador de operaciones de transferencia de datos, llamado host . El anfitrión se comunica con los periféricos a través del bus.

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

Una función crítica del host es la enumeración : el proceso de detectar qué periféricos están conectados al bus y consultar sus propiedades expresadas mediante descriptores .

Un periférico puede ser un objeto físico pero en realidad implementa múltiples funciones lógicas. Por ejemplo, un periférico de cámara web podría tener una función de cámara y una función de audio de 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 una tubería hasta un punto final , una fuente de datos o un sumidero proporcionado por una de las funciones del periférico.

Hay dos tipos de canales: mensaje y flujo . Se utiliza una canalización de mensajes para control bidireccional y estado. Se utiliza una tubería de flujo para la transferencia de datos unidireccional.

El host inicia todas las transferencias de datos, por lo que 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.

Hay tres modos principales de transferencia de datos: interrupción , masivo e isócrono . El modo isócrono se discutirá más a fondo en el contexto del audio.

El periférico puede tener terminales que se conectan al mundo exterior, más allá del propio periférico. De esta forma, el periférico sirve para traducir entre el protocolo USB y las señales del "mundo real". Los terminales son objetos lógicos de la función.

Modos USB de Android

Modo de desarrollo

El modo de desarrollo ha estado presente desde el lanzamiento inicial de Android. El dispositivo Android aparece como un periférico USB para una PC host que ejecuta un sistema operativo de escritorio como Linux, Mac OS X o Windows. La única función periférica visible es Android fastboot o Android Debug Bridge (adb) . Los protocolos fastboot y adb se superponen en el modo de transferencia de datos masivos USB.

Modo anfitrión

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

Como el dispositivo Android debe actuar como host, y la mayoría de los dispositivos Android incluyen un conector micro-USB que no permite directamente el funcionamiento del host, generalmente se requiere un adaptador on-the-go ( OTG ) como este:

OTG

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

Es posible que un dispositivo Android no proporcione suficiente energía para operar un periférico en particular, según la cantidad de energía que necesite el periférico y la capacidad de suministro del dispositivo Android. Incluso si se dispone de la energía adecuada, la carga de la batería del dispositivo Android puede reducirse significativamente. Para estas situaciones, utilice un concentrador con alimentación como este:

Hub alimentado

Figura 2. Hub alimentado

Modo accesorio

El modo accesorio se introdujo en Android 3.1 (nivel de API 12) y se actualizó 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 dock que sirve como anfitrión. La diferencia entre el modo de desarrollo y el modo accesorio es que las funciones USB adicionales son visibles para el host, más allá de adb. El dispositivo Android comienza en modo de desarrollo y luego pasa al modo accesorio a través de un proceso de renegociación.

El modo de accesorios se amplió con funciones adicionales en Android 4.1, en particular el audio que se describe a continuación.

Audio USB

Clases de USB

Cada función periférica tiene un documento de clase de dispositivo asociado que especifica el protocolo estándar para esa función. Esto permite que los hosts compatibles con la clase y las funciones periféricas interactúen sin un conocimiento detallado del funcionamiento de los demás. El cumplimiento de la clase es fundamental si el host y el periférico son proporcionados por diferentes entidades.

El término sin controlador es un sinónimo común de compatible con la clase , lo que indica que es posible utilizar las funciones estándar de dicho periférico sin necesidad de instalar un controlador específico del sistema operativo. Se puede suponer que un periférico anunciado como "sin controlador necesario" para los principales sistemas operativos de escritorio será compatible con la clase, aunque puede haber excepciones.

Clase de audio USB

Aquí nos ocupamos solo de los periféricos que implementan funciones de audio y, por lo tanto, se adhieren a la clase de dispositivos de audio. Hay dos ediciones de la especificación de 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. La clase de almacenamiento masivo (MSC) se usa para el acceso orientado a sectores a los medios, mientras que el Protocolo de transferencia de medios (MTP) es para el acceso completo a los archivos. Tanto MSC como MTP pueden usarse 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 un periférico de audio suelen ser analógicos. La señal analógica presentada en el terminal de entrada del periférico se convierte a digital mediante un convertidor de analógico a digital (ADC) y se transmite a través del protocolo USB para ser consumida por el host. El ADC es una fuente de datos para el host. De manera similar, el host envía una señal de audio digital a través del protocolo USB al periférico, donde un convertidor de digital a analógico (DAC) convierte y presenta a un terminal de salida analógica. El DAC es un sumidero para el anfitrión.

Canales

Un periférico con función de audio puede incluir un terminal de fuente, un terminal de receptor o ambos. Cada dirección puede tener un canal ( mono ), dos canales ( estéreo ) o más. Los periféricos con más de dos canales se denominan multicanal . Es común interpretar que un flujo estéreo consta de canales izquierdo y derecho y, por extensión, interpretar que un flujo multicanal tiene ubicaciones espaciales correspondientes a cada canal. Sin embargo, también es bastante apropiado (especialmente para audio USB más que HDMI ) no asignar ningún significado espacial estándar en particular a cada canal. En este caso, depende de la aplicación y el usuario definir cómo se utiliza cada canal. Por ejemplo, un flujo de entrada USB de cuatro canales puede tener los primeros tres canales conectados a varios micrófonos dentro de una habitación, y el canal final recibe la entrada de una radio AM.

Modo de transferencia isócrono

El audio USB utiliza el modo de transferencia isócrono por sus características en tiempo real, a expensas de la recuperación de errores. En modo isócrono, el ancho de banda está garantizado y los errores de transmisión de datos se detectan mediante una verificación de redundancia cíclica (CRC). Pero no hay confirmación de paquete ni retransmisión en caso de error.

Las transmisiones isócronas ocurren cada período de inicio de trama (SOF). El período SOF es de un milisegundo para máxima velocidad y de 125 microsegundos para alta velocidad. Cada trama de alta velocidad transporta hasta 1023 bytes de carga útil y una trama de alta velocidad transporta hasta 1024 bytes. Al juntarlos, calculamos la tasa de transferencia máxima como 1.023.000 o 8.192.000 bytes por segundo. Esto establece un límite superior teórico en la frecuencia de muestreo de audio combinada, el número de canales y la profundidad de bits. El límite práctico es menor.

Dentro del modo isócrono, hay tres submodos:

  • Adaptado
  • Asincrónico
  • Sincrónico

En el submodo adaptativo, el receptor o la fuente periférica se adapta a una frecuencia de muestreo potencialmente variable del host.

En el submodo asincrónico (también llamado retroalimentación implícita), el receptor o la fuente determina la frecuencia de muestreo y el host se adapta. La principal ventaja teórica del submodo asíncrono es que el reloj USB fuente o receptor está física y eléctricamente más cerca (y de hecho puede ser el mismo o derivado de) el reloj que impulsa el DAC o ADC. Esta proximidad significa que el submodo asíncrono debería ser menos susceptible a la fluctuación del reloj. Además, el reloj utilizado por el DAC o ADC puede diseñarse para una mayor precisión y menor desviación que el reloj del host.

En el submodo síncrono, se transfiere un número fijo de bytes cada período SOF. La frecuencia de muestreo de audio se deriva efectivamente del reloj USB. El submodo síncrono no se usa comúnmente con audio porque tanto el host como el periférico están a merced del reloj USB.

La siguiente tabla resume los submodos isócronos:

Modo secundario Recuento de bytes
por paquete
Frecuencia de muestreo
determinado por
Usado para audio
adaptado variable anfitrión
asincrónico variable periférico
sincrónico reparado Reloj USB No

En la práctica, el submodo es importante, por supuesto, pero también deben tenerse en cuenta otros factores.

Soporte de Android para la clase de audio USB

Modo de desarrollo

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

Modo anfitrión

Android 5.0 (API nivel 21) y superior admite un subconjunto de características de audio USB clase 1 (UAC1):

  • El dispositivo Android debe actuar como host
  • El formato de audio debe ser PCM (interfaz tipo I)
  • La profundidad de bits debe ser de 16 bits, 24 bits o 32 bits, donde 24 bits de datos de audio útiles se justifican a la izquierda dentro de los bits más significativos de la palabra de 32 bits.
  • La frecuencia 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)

La lectura del código fuente del marco de trabajo de Android puede mostrar código adicional más allá del mínimo necesario para admitir estas funciones. Pero este código no ha sido validado, por lo que aún no se reclaman funciones más avanzadas.

Modo accesorio

Android 4.1 (API nivel 16) agregó soporte limitado para la reproducción de audio en el host. Mientras está en modo 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, una base.

El audio en modo accesorio tiene estas características:

  • El dispositivo Android debe ser controlado por un host experimentado que primero pueda hacer la transición del dispositivo Android del modo de desarrollo al modo de accesorios, y luego el host debe transferir datos de audio desde el punto final apropiado. Por lo tanto, el dispositivo Android no parece "sin controlador" para el host.
  • La dirección debe ser ingresada , expresada en relación con el anfitrión.
  • El formato de audio debe ser PCM de 16 bits.
  • La frecuencia de muestreo debe ser de 44,1 kHz.
  • El recuento de canales debe ser 2 (estéreo)

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

Aplicaciones de audio digital USB

Como su nombre lo indica, la señal de audio digital USB está representada por un flujo de datos digitales en lugar de la señal analógica utilizada por el conector de mini auriculares TRS común. Eventualmente, cualquier señal digital debe convertirse a analógica antes de que pueda escucharse. Hay compensaciones al elegir dónde colocar esa conversión.

Una historia de dos DAC

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

Comparación 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 asumiendo componentes igualmente confiables. Sin embargo, generalmente existen compensaciones entre la calidad del audio y otros requisitos. Por ejemplo, si se trata de un dispositivo de mercado masivo, puede diseñarse para satisfacer las necesidades del consumidor en general, no para el audiófilo.

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

Los dispositivos móviles son conocidos por tener placas de circuitos de alta densidad, lo que puede generar más oportunidades de diafonía que degrada las señales analógicas adyacentes. La comunicación digital es menos susceptible al ruido , por lo que mover el DAC del dispositivo Android A a una placa de circuito externa C permite que las etapas analógicas finales estén aisladas física y eléctricamente de la placa de circuito densa y ruidosa, lo que da como resultado un audio de mayor fidelidad.

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

Aplicaciones en modo host

Las aplicaciones típicas de audio en modo host USB incluyen:

  • escuchando musica
  • telefonía
  • mensajería instantánea y chat de voz
  • grabación

Para todas estas aplicaciones, Android detecta un periférico de audio digital USB compatible y enruta automáticamente la reproducción y captura de audio de manera 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 API específicas para audio digital USB. Para un uso avanzado, el enrutamiento automático puede interferir con las aplicaciones compatibles con USB. Para tales aplicaciones, desactive el enrutamiento automático a través del control correspondiente en la sección Medios de Configuración / Opciones de desarrollador .

Depurar en modo host

En el modo de host USB, la depuración de adb a través de USB no está disponible. Consulte la sección Uso inalámbrico de Android Debug Bridge para obtener una alternativa.

Implementación de audio USB

Recomendaciones para proveedores de periféricos de audio

Para interactuar con los dispositivos Android, los proveedores de periféricos de audio deben:

  • diseño para el cumplimiento de la clase de audio; Actualmente, Android apunta a la clase 1, pero es aconsejable planificar para la clase 2
  • evitar peculiaridades
  • prueba de interoperabilidad con dispositivos Android de referencia y populares
  • Documente claramente las características admitidas, el cumplimiento de la clase de audio, los requisitos de energía, etc.

Recomendaciones para fabricantes de equipos originales (OEM) y proveedores de SoC de dispositivos Android

Para admitir audio digital USB, los OEM de dispositivos y los proveedores de SoC deben:

  • diseñar hardware para admitir el modo de host USB
  • habilitar el soporte de host USB genérico en el nivel del marco a través de la android.hardware.usb.host.xml función android.hardware.usb.host.xml
  • habilite todas las funciones del kernel necesarias: modo de host USB, audio USB, modo de transferencia isócrona; ver configuración del kernel de Android
  • mantenerse actualizado con las últimas versiones y parches del kernel; a pesar del noble objetivo del cumplimiento de la clase, existen periféricos de audio con peculiaridades , y los kernels recientes tienen soluciones para tales peculiaridades
  • habilitar la política de audio USB como se describe a continuación
  • agregue audio.usb.default a PRODUCT_PACKAGES en device.mk
  • prueba de interoperabilidad con periféricos de audio USB comunes

Cómo habilitar la política de audio USB

Para habilitar el audio USB, agregue una entrada al archivo de configuración de la política de audio. Normalmente se encuentra 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 en clave" debe reemplazarse por el nombre en código del dispositivo.

Aquí 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

La implementación de la capa de abstracción de hardware de audio (HAL) para audio USB se encuentra aquí:

hardware/libhardware/modules/usbaudio/

El HAL de audio USB se basa en gran medida en tinyalsa , que se describe en Terminología de audio . Aunque el audio USB se basa en transferencias isócronas, la implementación de ALSA lo abstrae. Por lo tanto, el audio USB HAL y tinyalsa no necesitan preocuparse por esta parte del protocolo USB.

Prueba de audio USB

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