Audio numérique USB

Cet article présente la compatibilité d'Android avec les périphériques audio numériques USB et autres Protocoles USB.

Audience

Cet article s'adresse aux OEM d'appareils Android, aux fournisseurs de SoC, les fournisseurs de périphériques audio USB, les développeurs d'applications audio avancées, et d'autres personnes souhaitant obtenir des informations détaillées sur les composants audio numériques USB sur Android.

Les utilisateurs finaux d'appareils Nexus doivent consulter l'article Enregistrer et lire des contenus audio en mode hôte USB au dans le Centre d'aide Nexus. Bien que cet article ne soit pas destiné aux utilisateurs finaux, certains consommateurs audiophiles peuvent trouver des parties qui les intéressent.

Présentation de la connexion USB

Le bus universel en série (USB) fait l'objet d'une description informelle dans l'article Wikipédia. USB et est officiellement défini par les normes publiées par le USB Implementers Forum, Inc. Pour plus de commodité, nous résumons ici les concepts clés USB, mais les normes sont la référence faisant autorité.

Concepts et terminologie de base

L'USB est un bus avec un seul initiateur d'opérations de transfert de données, appelé hôte. L'hôte communique avec périphériques dans le bus.

Remarque:Les termes appareil et accessoire sont des synonymes courants de périphérique. Nous évitons ces termes ici, car ils peuvent être confondus avec Appareil Android ou le concept propre à Android appelé mode accessoire.

énumération est un rôle d'hôte essentiel: le processus de détection des périphériques connectés au bus, et en interrogeant leurs propriétés exprimées via des descripteurs.

Un périphérique peut être un objet physique mais implémenter plusieurs fonctions logiques. Par exemple, un périphérique de webcam peut avoir à la fois une fonction d'appareil photo et un fonction audio microphone.

Chaque fonction de périphérique possède une interface qui définit le protocole de communication avec cette fonction.

L'hôte communique avec un périphérique via un barre verticale à un point de terminaison, une source ou un récepteur de données fournies par l'une des fonctions du périphérique.

Il existe deux types de pipes: message et stream. Un canal de messages est utilisé pour le contrôle et l'état bidirectionnels. Un pipeline de flux est utilisé pour le transfert de données unidirectionnel.

L'hôte lance tous les transferts de données, Par conséquent, les termes entrée et sortie sont exprimés par rapport à l'hôte. Une opération d'entrée transfère les données du périphérique à l'hôte, tandis qu'une opération de sortie transfère les données de l'hôte au périphérique.

Il existe trois principaux modes de transfert de données: interruption, groupée et isochronous. Nous aborderons ce mode plus en détail dans le contexte de l'audio.

Le périphérique peut avoir des terminaux qui se connectent au monde extérieur, au-delà du périphérique lui-même. De cette façon, le périphérique diffuse pour convertir du protocole USB au "monde réel" signaux. Les terminaux sont des objets logiques de la fonction.

Modes USB Android

Mode de développement

Le mode Développement est présent depuis la version initiale d'Android. L'appareil Android s'affiche en tant que périphérique USB sur un PC hôte exécutant un système d'exploitation de bureau tel que Linux, Mac OS X ou Windows. La seule fonction périphérique visible est Démarrage rapide Android ou Android Debug Bridge (adb) : Les protocoles fastboot et adb sont superposés via le mode de transfert groupé de données par USB.

Mode hôte

Le mode hôte est introduit dans Android 3.1 (niveau d'API 12).

Comme l'appareil Android doit agir en tant qu'hôte, et la plupart des appareils Android incluent un connecteur micro-USB qui n'autorise pas directement le fonctionnement de l'hôte, Un adaptateur OTG (en déplacement) ce qui est généralement nécessaire:

service de distribution par contournement (OTG)

Figure 1 : Adaptateur On-the-Go (OTG)

Un appareil Android peut ne pas fournir suffisamment de puissance pour faire fonctionner un un périphérique particulier, en fonction de la puissance dont il a besoin, et la quantité que l'appareil Android est capable de fournir. Même si est suffisamment alimentée, le niveau de charge de la batterie de l'appareil Android peut être considérablement raccourcies. Dans ces situations, utilisez un câble hub comme suit:

Hub alimenté

Figure 2. Hub alimenté

Mode accessoire

Le mode accessoire a été introduit dans Android 3.1 (niveau d'API 12) et rétroporté vers Android 2.3.4. Dans ce mode, l'appareil Android fonctionne comme un périphérique USB, sous le contrôle d'un autre appareil, comme une station d'accueil qui sert d'hôte. Différence entre le mode développement et le mode accessoire est que des fonctions USB supplémentaires sont visibles par l'hôte, en plus d'adb. L'appareil Android démarre en mode Développement, puis en mode accessoire via un processus de renégociation.

Le mode accessoire a été étendu avec des fonctionnalités supplémentaires dans Android 4.1, en particulier l'audio décrit ci-dessous.

Audio USB

Classes USB

Chaque fonction de périphérique est associée à un document de classe d'appareil. qui spécifie le protocole standard pour cette fonction. Cela permet d'utiliser des hôtes et des fonctions périphériques conformes aux classes. d'interagir, sans connaître en détail le fonctionnement des uns et des autres. La conformité des classes est essentielle si l'hôte et le périphérique sont fournis par différentes entités.

Le terme sans pilote est un synonyme courant de conforme de classe, indiquant qu'il est possible d'utiliser les caractéristiques standards périphérique sans nécessiter de système d’exploitation spécifique pilote à installer. On peut supposer qu'un périphérique est annoncé comme « aucun pilote nécessaire » pour les principaux systèmes d'exploitation de bureau sont conformes, mais il peut y avoir des exceptions.

Classe audio USB

Ici, nous ne nous intéressons qu'aux périphériques qui implémentent fonctions audio, et sont donc conformes à la classe d'appareil audio. Il y a deux éditions de la spécification audio USB: classe 1 (UAC1) et 2 (UAC2).

Comparaison avec d'autres classes

USB comprend de nombreuses autres classes d’appareils, dont certaines peuvent être confondues avec la classe audio. La classe de stockage de masse (MSC) est utilisé pour d'un accès sectoriel aux médias, Protocole de transfert multimédia (MTP) permet d'accéder à l'ensemble des fichiers multimédias. MSC et MTP peuvent être utilisés pour transférer des fichiers audio, mais seule la classe audio USB convient au streaming en temps réel.

Bornes audio

Les bornes d'un périphérique audio sont généralement analogiques. Le signal analogique présenté à la borne d'entrée du périphérique est converti en numérique par un convertisseur analogique-numérique (ADC), et est transmis via le protocole USB pour être utilisé par l'hôte. L'ADC est une source de données. pour l'hôte. De même, l'hôte envoie signal audio numérique via le protocole USB vers le périphérique, où un convertisseur numérique-analogique (DAC) convertit et présente à un terminal de sortie analogique. Le DAC est un récepteur de l'hôte.

Chaînes

Un périphérique ayant une fonction audio peut inclure un terminal source, un terminal récepteur ou les deux. Chaque sens peut avoir un canal (mono), deux canaux (stéréo) ou autres. Les périphériques à plus de deux canaux sont dits multicanaux. Il est courant d'interpréter un flux stéréo comme étant constitué de canaux gauche et droit et, par extension, interpréter un flux multicanal comme ayant les emplacements spatiaux correspondant à chaque canal. Cependant, il est tout à fait approprié (en particulier pour l'audio USB, HDMI) de ne pas attribuer leur signification spatiale standard. Dans ce cas, c'est à vous l'application et l'utilisateur pour définir comment chaque canal est utilisé. Par exemple, un flux d'entrée USB à quatre canaux peut avoir les trois premiers canaux connectés à différents micros d'une pièce, et le dernier canal recevant l'entrée d'une radio AM.

Mode de transfert isochrone

L'audio USB utilise le mode de transfert isochrone pour ses caractéristiques en temps réel, au détriment de la reprise des erreurs. En mode isochrone, la bande passante est garantie et la transmission des données sont détectées à l'aide d'un contrôle de redondance cyclique (CRC). Mais il y a aucun accusé de réception des paquets ni retransmission en cas d'erreur.

Des transmissions isocholes se produisent à chaque période de début de trame (SOF). La période SOF est d'une milliseconde pour la pleine vitesse et de 125 microsecondes pour à grande vitesse. Chaque trame à pleine vitesse transporte jusqu'à 1 023 octets de charge utile, et une trame à grande vitesse transfère jusqu'à 1 024 octets. En les rassemblant, nous calculons le taux de transfert maximal à 1 023 000 ou 8 192 000 octets par seconde. Cela définit une limite supérieure théorique pour l'audio combiné le taux d'échantillonnage, le nombre de canaux et la profondeur de bits. La limite pratique est inférieure.

Le mode isochrone comporte trois sous-modes:

  • Adaptatif
  • Asynchrone
  • Synchrone

Dans le sous-mode adaptatif, le récepteur ou la source périphérique s'adapte à un taux d'échantillonnage potentiellement variable. de l'hôte.

Dans le sous-mode asynchrone (également appelé retour implicite), le récepteur ou la source détermine le taux d'échantillonnage que l'hôte prend en charge. Le principal avantage théorique du sous-mode asynchrone est que la source l'horloge USB est physiquement et électriquement plus proche de (et peut en effet identique ou dérivée de) l'horloge qui pilote le DAC ou l'ADC. Cette proximité signifie que le sous-mode asynchrone devrait être moins sensible à la gigue de l'horloge. De plus, l'horloge utilisée par le DAC ou l'ADC peut être conçu pour offrir une plus grande précision et une dérive plus faible que l'horloge hôte.

En sous-mode synchrone, un nombre fixe d'octets est transféré à chaque période SOF. Le taux d'échantillonnage audio est effectivement dérivé de l'horloge USB. Le sous-mode synchrone n'est pas couramment utilisé avec l'audio, car les deux l’hôte et le périphérique sont à la merveille de l’horloge USB.

Le tableau ci-dessous résume les sous-modes isochrones:

Sous-mode Nombre d'octets
par paquet
Taux d'échantillonnage
déterminé par
Utilisé pour l'audio
intelligente variable hôte oui
asynchrone variable périphérique oui
synchrone fixe Horloge USB non

Dans la pratique, le sous-mode est bien sûr important, mais d'autres facteurs doit également être prise en compte.

Compatibilité d'Android avec la classe audio USB

Mode de développement

L'audio USB n'est pas pris en charge en mode développement.

Mode hôte

Android 5.0 (niveau d'API 21) ou version ultérieure est compatible avec un sous-ensemble de fonctionnalités USB de classe audio 1 (UAC1) :

  • L'appareil Android doit faire office d'hôte.
  • Le format audio doit être PCM (interface de type I).
  • La profondeur de bits doit être de 16, 24 ou 32 bits (si 24 bits de données audio utiles sont justifiés à gauche dans les bits du mot de 32 bits
  • Le taux d'échantillonnage doit être de 48, 44,1, 32, 24, 22,05, 16, 12, 11,025 ou 8 kHz.
  • Le nombre de canaux doit être égal à 1 (mono) ou 2 (stéréo)

Le péruvien du code source du framework Android peut afficher du code supplémentaire au-delà du minimum nécessaire à la prise en charge de ces fonctionnalités. Mais ce code n'a pas été validée. Par conséquent, les fonctionnalités avancées ne sont pas encore revendiquées.

Mode accessoire

Android 4.1 (niveau d'API 16) offre une compatibilité limitée pour la lecture audio sur l'hôte. En mode Accessoire, Android achemine automatiquement sa sortie audio vers un câble USB. En d'autres termes, l'appareil Android sert de source de données à l'hôte, par exemple une station d'accueil.

L'audio en mode accessoire présente les fonctionnalités suivantes:

  • L'appareil Android doit être contrôlé par un hôte compétent qui peut d'abord faire passer l'appareil Android du mode Développement au mode Accessoire, puis l'hôte doit transférer les données audio à partir du point de terminaison approprié. Ainsi, l'appareil Android n'apparaît pas comme un appareil sans conducteur. à l'hôte.
  • Le sens doit être input, exprimé par rapport à l'hôte.
  • Le format audio doit être le format PCM 16 bits
  • Le taux d'échantillonnage doit être de 44,1 kHz.
  • Le nombre de canaux doit être égal à 2 (stéréo)

L'audio en mode accessoire n'est pas largement adopté, Elle n'est actuellement pas recommandée pour les nouvelles conceptions.

Applications de l'audio numérique USB

Comme son nom l'indique, le signal audio numérique USB est représenté par un flux de données numérique plutôt que l'analogique utilisé par le connecteur TRS mini connecteur de casque. En fin de compte, tous les signaux numériques doivent être convertis en signaux analogiques pour être entendus. Le choix de l'emplacement de cette conversion implique de faire des compromis.

L'histoire de deux DAC

Dans l'exemple de diagramme ci-dessous, nous comparons deux conceptions. Tout d'abord, nous avons appareil mobile avec processeur d'application (PA), DAC intégré, amplificateur, et connecteur TRS analogique connecté à un casque. Nous considérons également qu'un un appareil mobile avec USB connecté à un USB DAC externe et à un amplificateur, également avec un casque.

Comparatif DAC

Figure 3. Comparaison de deux DAC

Quelle est la meilleure conception ? La réponse dépend de vos besoins. Chacune présente des avantages et des inconvénients.

Remarque:Il s'agit d'une comparaison artificielle, car un vrai appareil Android aurait probablement les deux options disponibles.

La première conception A est plus simple, moins chère, consomme moins d'énergie, et il s'agira d'une conception plus fiable en supposant des composants par ailleurs tout aussi fiables. Cependant, il existe généralement des compromis entre la qualité audio et d'autres exigences. Par exemple, s'il s'agit d'un appareil destiné au grand public, il peut être conçu pour s'adapter aux besoins du consommateur en général, et non à ceux de l’audiophile.

Dans la deuxième conception, le périphérique audio externe C peut être conçu pour d'une meilleure qualité audio et d'une plus grande puissance de sortie l'appareil Android B de base pour le marché de masse. Oui, c'est une conception plus chère, mais le coût n'est absorbé que par ceux qui le souhaitent.

Les appareils mobiles sont connus pour avoir une densité élevée les circuits imprimés, ce qui peut offrir plus d'opportunités pour diaphonie qui dégrade les signaux analogiques adjacents. La communication numérique est moins sensible à noise, On déplace donc le DAC de l'appareil Android A vers un circuit imprimé externe C permet aux étapes analogiques finales d'être physiquement et électriquement isolées du circuit épais et bruyant, ce qui offre un son plus fidèle.

Par ailleurs, la seconde conception est plus complexe, et cette complexité s'enrichit des opportunités d’échec. Il y a aussi une latence supplémentaire à partir des contrôleurs USB.

Applications en mode hôte

Voici quelques applications audio typiques en mode hôte USB:

  • écoute de musique
  • téléphonie
  • messagerie instantanée et chat vocal
  • enregistrement

Pour toutes ces applications, Android détecte un port USB numérique périphérique audio, et achemine automatiquement la lecture et la capture en conséquence, en fonction des règles relatives à l'audio. Le contenu stéréo est lu sur les deux premiers canaux du périphérique.

Il n'existe aucune API spécifique à l'audio numérique USB. Pour une utilisation avancée, le routage automatique peut interférer avec les applications compatibles USB. Pour de telles applications, désactiver le routage automatique via la commande correspondante de la section "Médias" Paramètres / Options pour les développeurs

Déboguer en mode hôte

En mode hôte USB, le débogage adb via USB n'est pas disponible. Consultez la section Utilisation des réseaux sans fil. de Android Debug Bridge pour obtenir une alternative.

Implémenter l'audio USB

Recommandations pour les fournisseurs de périphériques audio

Pour pouvoir interagir avec les appareils Android, les fournisseurs de périphériques audio doivent:

  • concevoir pour la conformité avec la classe audio ; Android cible actuellement la classe 1, mais il est préférable de prévoir la classe 2.
  • éviter les bizarres
  • Tester l'interopérabilité avec les appareils Android de référence et populaires
  • documenter clairement les fonctionnalités compatibles, la conformité de la classe audio, les exigences en matière d'alimentation, etc. afin que les consommateurs puissent prendre des décisions éclairées

Recommandations pour les OEM d'appareils Android et les fournisseurs de SoC

Pour assurer la compatibilité avec l'audio numérique USB, les OEM des appareils et les fournisseurs de SoC doivent:

  • Concevoir le matériel compatible avec le mode hôte USB
  • Activer la prise en charge des hôtes USB génériques au niveau du framework via le flag de fonctionnalité android.hardware.usb.host.xml
  • activer toutes les fonctionnalités de noyau nécessaires: mode hôte USB, audio USB, mode de transfert isochrone ; Voir Configuration du noyau Android
  • se tenir informés des dernières versions du noyau et des derniers correctifs ; malgré l'objectif noble de la conformité de classe, il existe des périphériques audio avec des bizarres, et les noyaux récents ont des solutions pour ces quirks
  • activer les règles audio USB comme décrit ci-dessous
  • ajoute audio.usb.default à PRODUCT_PACKAGES dans device.mk
  • Tester l'interopérabilité avec les périphériques audio USB courants

Activer la règle audio USB

Pour activer l'audio USB, ajoutez une entrée à la de configuration des règles audio. Il s'agit généralement situé ici:

device/oem/codename/audio_policy.conf

Composant pathname "oem" doit être remplacé par le nom de l'OEM qui fabrique l'appareil Android, et "codename" doit être remplacé par le nom du code de l'appareil.

Voici un exemple d'entrée:

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
      }
    }
  }
  ...
}

Code source

La couche d'abstraction matérielle (HAL) audio pour l'audio USB se trouve ici:

hardware/libhardware/modules/usbaudio/

Le HAL audio USB s'appuie en grande partie sur tinyalsa, comme expliqué dans la section Terminologie audio. Bien que l’audio USB repose sur des transferts isochrones, est éliminé par l'implémentation ALSA. Ainsi, le HAL USB et tinyalsa n'ont pas à se soucier eux-mêmes avec cette partie du protocole USB.

Tester l'audio USB

Pour en savoir plus sur les tests CTS pour l'audio USB, consultez Tests CTS de vérificateur audio USB.