Audio digitale USB

Questo articolo esamina il supporto Android per l'audio digitale USB e altri contenuti correlati. Protocolli basati su USB.

Pubblico

Il pubblico di destinazione di questo articolo è composto da OEM di dispositivi Android, fornitori di SoC, Fornitori di periferiche audio USB, sviluppatori di applicazioni audio avanzati, e altri che cercano una comprensione dettagliata degli interni audio digitali USB su Android.

Gli utenti finali di dispositivi Nexus dovrebbero consultare l'articolo Registrare e riprodurre audio utilizzando la modalità host USB al Centro assistenza Nexus. Questo articolo non è rivolto agli utenti finali, alcuni consumatori audiofili potrebbero trovare parti di interesse.

Panoramica di USB

L'Universal Serial Bus (USB) è descritto in modo informale nell'articolo di Wikipedia USB, ed è formalmente definito dagli standard pubblicati USB Implementers Forum, Inc. Per praticità, riassumiamo i concetti chiave dell'interfaccia USB qui, ma gli standard sono il riferimento autorevole.

Concetti di base e terminologia

L'USB è un autobus con un unico iniziatore delle operazioni di trasferimento di dati, chiamato host. L'organizzatore comunica con periferiche tramite il bus.

Nota: i termini dispositivo e accessorio sono sinonimi comuni per periferica. Evitiamo questi termini in questo contesto perché potrebbero essere confusi con Dispositivo Android o il concetto specifico di Android, chiamato modalità accessorio.

Un ruolo dell'host critico è enumeration: il processo di rilevamento delle periferiche connesse al bus, ed eseguire query sulle loro proprietà espresse tramite descrittori.

Una periferica può essere un oggetto fisico ma implementare in realtà più funzioni logiche. Ad esempio, una periferica della webcam potrebbe avere sia una funzione fotocamera sia una funzione audio del microfono.

Ogni funzione periferica ha un'interfaccia che definisce il protocollo per comunicare con quella funzione.

L'host comunica con una periferica tramite una barra verticale in un endpoint, un'origine dati o un sink fornita da una delle funzioni della periferica.

Esistono due tipi di barre: message e stream. La barra verticale dei messaggi viene utilizzata per il controllo e lo stato bidirezionali. Una pipeline di flusso viene utilizzata per il trasferimento unidirezionale di dati.

L'host avvia tutti i trasferimenti di dati quindi i termini input e output sono espressi in relazione all'host. Un'operazione di input trasferisce i dati dalla periferica all'host mentre un'operazione di output trasferisce i dati dall'host alla periferica.

Esistono tre modalità principali di trasferimento dei dati: interrupt, collettivi e con sincronizzazione cronologica. La modalità sincrona verrà trattata in modo più approfondito nel contesto dell'audio.

La periferica può avere terminali che si connettono al mondo esterno, oltre la periferica stessa. In questo modo, la periferica per tradurre tra il protocollo USB e il "mondo reale" e indicatori. I terminali sono oggetti logici della funzione.

Modalità USB Android

Modalità di sviluppo

La modalità sviluppo era presente dalla release iniziale di Android. Il dispositivo Android risulta essere una periferica USB su un PC host con un sistema operativo desktop come Linux, Mac OS X o Windows. L'unica funzione periferica visibile è Fastboot di Android o Android Debug Bridge (adb). I protocolli fastboot e ADB sono sovrapposti alla modalità di trasferimento collettivo dei dati USB.

Modalità host

La modalità host è stata introdotta in Android 3.1 (livello API 12).

Il dispositivo Android deve fungere da host e la maggior parte dei dispositivi Android include un connettore micro-USB che non consente direttamente il funzionamento dell'host, Un adattatore OTG ovunque ti trovi come questa di solito è obbligatoria:

RTG

Figura 1. Adattatore OTG

Un dispositivo Android potrebbe non fornire energia sufficiente per utilizzare un una particolare periferica, a seconda della potenza richiesta dalla periferica, e quanto è in grado di fornire il dispositivo Android. Anche se sia disponibile un'alimentazione adeguata, la carica della batteria del dispositivo Android potrebbe abbreviata in modo significativo. In questi casi, utilizza un hub come questo:

Hub alimentato

Figura 2. Hub alimentato

Modalità accessorio

La modalità Accessorio è stata introdotta in Android 3.1 (livello API 12) e trasferita nuovamente ad Android 2.3.4. In questa modalità, il dispositivo Android funziona come periferica USB, sotto il controllo di un altro dispositivo, ad esempio la base che funge da host. Differenza tra la modalità sviluppo e la modalità accessorio è che funzioni USB aggiuntive sono visibili all'host, oltre ad ADB. Il dispositivo Android inizia in modalità sviluppo e poi le transizioni alla modalità accessorio tramite un processo di rinegoziazione.

La modalità Accessorio è stata estesa con funzionalità aggiuntive in Android 4.1 in particolare l'audio descritto di seguito.

Audio USB

Classi USB

A ogni funzione periferica è associato un documento relativo alla classe del dispositivo che specifica il protocollo standard per quella funzione. Ciò consente funzioni periferiche e host conformi alla classe che interagiscano senza conoscere nel dettaglio il lavoro degli altri. La conformità della classe è fondamentale se l'host e la periferica sono forniti diverse entità.

Il termine senza conducente è un sinonimo comune di conforme ai requisiti di classe, indicando che è possibile utilizzare le caratteristiche standard di un periferica senza richiedere uno specifico sistema operativo driver. Si può presumere che una periferica pubblicizzata come "nessun driver necessario" per i principali sistemi operativi desktop saranno conformi alla classe, nonostante potrebbero esserci delle eccezioni.

Classe audio USB

Qui ci preoccupiamo solo delle periferiche che implementano funzioni audio e, di conseguenza, rispettare la classe dei dispositivi audio. Esistono due metodi edizioni delle specifiche della classe audio USB: classe 1 (UAC1) e 2 (UAC2).

Confronto con altri corsi

USB include molte altre classi di dispositivi, alcune delle quali potrebbero essere confuse con la classe audio. La classe di archiviazione di massa (MSC) è utilizzato per orientato al settore nei confronti dei media, Protocollo di trasferimento multimediale (MTP) consente l'accesso completo ai file multimediali. Per il trasferimento di file audio possono essere utilizzati sia MSC che MTP, ma solo la classe audio USB è adatta per lo streaming in tempo reale.

Terminali audio

I terminali di una periferica audio sono generalmente analogici. Il segnale analogico presentato al terminale di ingresso della periferica viene convertito in digitale da una convertitore analogico-digitale (ADC), e viene trasferito con il protocollo USB per essere consumato l'organizzatore. L'ADC è un'origine di dati per l'organizzatore. Analogamente, l'host invia segnale audio digitale tramite protocollo USB alla periferica, dove un convertitore da digitale ad analogico (DAC) converte e presenta a un terminale di uscita analogico. Il DAC è un sink per l'host.

Canali

Una periferica con funzione audio può includere un terminale di origine, un terminale sink o entrambi. Ogni direzione può avere un canale (mono) e due canali (stereo) o altro. Le periferiche con più di due canali sono chiamate multicanale. È comune interpretare uno stream stereo come composto da canali sinistra e destra e, per estensione, di interpretare uno stream multicanale come se posizioni spaziali corrispondenti a ciascun canale. Tuttavia, è anche piuttosto appropriato (soprattutto per l'audio USB, più che HDMI) di non assegnare un particolare significato spaziale standard di ciascun canale. In questo caso, spetta al l'applicazione e l'utente per definire la modalità di utilizzo di ciascun canale. Ad esempio, uno stream di ingresso USB a quattro canali potrebbe avere i primi tre collegati a vari microfoni all'interno di una stanza, mentre canale che riceve input da una radio AM.

Modalità di trasferimento sincrono

L'audio USB utilizza la modalità di trasferimento sincrono per le sue caratteristiche in tempo reale, a scapito del recupero dagli errori. In modalità sincrona, la larghezza di banda è garantita e la trasmissione dei dati gli errori vengono rilevati utilizzando un controllo di ridondanza ciclico (CRC). ma c'è nessun riconoscimento o ritrasmissione dei pacchetti in caso di errore.

Ogni periodo SOF (Start of Frame) avviene per la trasmissione sincrono. Il periodo SOF è di un millisecondo per la massima velocità e di 125 microsecondi per alta velocità. Ogni frame a velocità massima trasporta fino a 1023 byte di payload, mentre un frame ad alta velocità supporta fino a 1024 byte. Combinando questi elementi, calcoliamo la velocità di trasferimento massima come 1.023.000 o 8.192.000 byte e un numero elevato di operazioni di I/O al secondo. Imposta un limite massimo teorico per l'audio combinato frequenza di campionamento, numero di canali e profondità in bit. Il limite pratico è inferiore.

Nella modalità di sincronizzazione cronologica, sono disponibili tre sottomodalità:

  • Adattivi
  • Asincrono
  • Sincrona

Nella modalità secondaria adattiva, il sink periferico o la sorgente si adatta a una frequenza di campionamento potenzialmente variabile dell'host.

Nella modalità secondaria asincrona (detta anche feedback implicito), il sink o l'origine determina la frequenza di campionamento, che viene accettata dall'host. Il principale vantaggio teorico della sottomodalità asincrona è che la sorgente o scendere dall'orologio USB è fisicamente ed elettricamente più vicino (e potrebbe essere lo stesso o derivato dall'orologio che guida il DAC o l'ADC. Questa vicinanza significa che la sottomodalità asincrona dovrebbe essere meno suscettibile. al tremolio dell'orologio. Inoltre, l'orologio utilizzato dal DAC o dall'ADC può essere progettato per una maggiore precisione e una deviazione inferiore rispetto all'orologio host.

Nella modalità secondaria sincrona, per ogni periodo SOF viene trasferito un numero fisso di byte. La frequenza di campionamento audio viene derivata in modo efficace dall'orologio USB. La modalità secondaria sincrona non è comunemente utilizzata con l'audio perché sia l'host e la periferica sono alla balia dell'orologio USB.

La tabella riportata di seguito riassume le sottomodalità con sincrono:

Modalità secondaria Conteggio dei byte
per pacchetto
Frequenza di campionamento
determinata da
Utilizzato per l'audio
adattivo variabile organizzatore
asincrono variabile periferica
sincrono corretti Orologio USB no

In pratica, la sottomodalità è ovviamente importante, ma ci sono anche altri fattori prendere in considerazione.

Supporto Android per la classe audio USB

Modalità di sviluppo

L'audio USB non è supportato in modalità sviluppo.

Modalità host

Android 5.0 (livello API 21) e versioni successive supportano un sottoinsieme di funzionalità audio USB di classe 1 (UAC1):

  • Il dispositivo Android deve fungere da host
  • Il formato audio deve essere PCM (tipo di interfaccia I)
  • La profondità in bit deve essere a 16, 24 o 32 bit, laddove 24 bit di dati audio utili sono giustificati a sinistra all'interno dei bit della parola a 32 bit
  • La frequenza di campionamento deve essere 48, 44.1, 32, 24, 22.05, 16, 12, 11.025 o 8 kHz
  • Il numero di canali deve essere 1 (mono) o 2 (stereo)

L'analisi del codice sorgente del framework Android potrebbe mostrare codice aggiuntivo oltre il minimo necessario per supportare queste funzionalità. Ma questo codice non è stato convalidato, quindi non sono ancora state rivendicate funzionalità più avanzate.

Modalità accessorio

Android 4.1 (livello API 16) ha aggiunto un supporto limitato per la riproduzione audio all'host. In modalità accessorio, Android indirizza automaticamente l'uscita audio a USB. In altre parole, il dispositivo Android funge da origine dati per l'host, ad esempio un dock.

L'audio in modalità accessorio ha le seguenti funzionalità:

  • Il dispositivo Android deve essere controllato da un host competente che può prima eseguire la transizione del dispositivo Android dalla modalità sviluppo alla modalità accessorio. e poi l'organizzatore deve trasferire i dati audio dall'endpoint appropriato. Di conseguenza, il dispositivo Android non risulta "senza conducente" all'organizzatore.
  • La direzione deve essere input, espressa in relazione all'host
  • Il formato audio deve essere PCM a 16 bit
  • La frequenza di campionamento deve essere 44,1 kHz
  • Il numero di canali deve essere 2 (stereo)

L'audio in modalità accessorio non è stato ampiamente adottato, e al momento non è consigliato per i nuovi progetti.

Applicazioni dell'audio digitale USB

Come indica il nome, il segnale audio digitale USB è rappresentato da uno stream di dati digitale anziché analogico usato dal comune TRS mini connettore per cuffie. Alla fine, qualsiasi segnale digitale deve essere convertito in analogico prima di poter essere sentito. La scelta del luogo in cui posizionare la conversione presenta dei compromessi.

La storia di due DAC

Nel diagramma di esempio seguente, vengono confrontati due design. Per prima cosa abbiamo dispositivo mobile con processore di applicazioni (AP), DAC integrato, amplificatore e connettore TRS analogico collegato alle cuffie. Consideriamo anche un dispositivo mobile con un cavo USB collegato a un DAC USB esterno e a un amplificatore, anche con le cuffie.

Confronto tra i DAC

Figura 3. Confronto tra due DAC

Qual è il design migliore? La risposta dipende dalle tue esigenze. Ognuno di essi presenta vantaggi e svantaggi.

Nota:si tratta di un confronto artificiale, poiché su un dispositivo Android reale probabilmente avrebbero a disposizione entrambe le opzioni.

Il primo design A è più semplice, meno costoso, consuma meno energia, e che sia più affidabile, presupponendo che componenti siano ugualmente affidabili. Tuttavia, di solito la qualità audio presenta compromessi rispetto ad altri requisiti. Ad esempio, se si tratta di un dispositivo per il mercato di massa, potrebbe essere progettato per adattarsi le esigenze del consumatore generico, non dell'audiofilo.

Nel secondo design, la periferica audio esterna C può essere progettata per una qualità audio superiore e una maggiore potenza in uscita senza influire sui costi del il dispositivo Android B del mercato di massa. Sì, è un design più costoso, ma il costo viene assorbito solo da coloro che lo vogliono.

I dispositivi mobili sono noti per avere un'alta densità di circuiti stampati, il che può comportare maggiori opportunità diafonia che degrada i segnali analogici adiacenti. La comunicazione digitale è meno suscettibile rumore, quindi sposta il DAC dal dispositivo Android A a un circuito esterno C consente agli stadi analogici finali di essere fisicamente ed elettricamente dal circuito denso e rumoroso, con un audio di qualità superiore.

D'altra parte, il secondo design è più complesso e con una maggiore complessità aumenta che ciò non avvenga. C'è inoltre latenza aggiuntiva dai controller USB.

Applicazioni in modalità host

Le applicazioni audio in modalità host USB tipiche includono:

  • ascolto di musica
  • telefonia
  • messaggistica immediata e chat vocale
  • registrando

Per tutte queste applicazioni, Android rileva una connessione digitale USB periferica audio e instrada automaticamente la riproduzione e l'acquisizione audio in modo appropriato, in base alle regole dei criteri relativi all'audio. I contenuti stereo vengono riprodotti sui primi due canali della periferica.

Non esistono API specifiche per l'audio digitale USB. Per un utilizzo avanzato, il routing automatico potrebbe interferire con le applicazioni compatibili con lo standard USB. Per queste applicazioni, disattiva il routing automatico tramite il controllo corrispondente nella sezione Media di Impostazioni / Opzioni sviluppatore.

Esegui il debug in modalità host

In modalità host USB, il debug ADB tramite USB non è disponibile. Vedi la sezione Utilizzo wireless. di Android Debug Bridge per trovare un'alternativa.

Implementare l'audio USB

Consigli per i fornitori di periferiche audio

Per poter interagire con i dispositivi Android, i fornitori di periferiche audio devono:

  • progettare per la conformità della classe audio; Android ha come target la classe 1, ma è saggio programmare la classe 2
  • evita le stranezze
  • test dell'interoperabilità con i dispositivi Android più diffusi e di riferimento
  • documentare chiaramente le funzionalità supportate, la conformità della classe audio, i requisiti di alimentazione e così via. in modo che i consumatori possano prendere decisioni consapevoli

Consigli per gli OEM e i fornitori di SoC di dispositivi Android

Per supportare l'audio digitale USB, gli OEM dei dispositivi e i fornitori di SoC devono:

  • progettare hardware per supportare la modalità host USB
  • attivare il supporto generico di host USB a livello di framework tramite il flag delle funzionalità android.hardware.usb.host.xml
  • abilitare tutte le funzionalità del kernel necessarie: modalità host USB, audio USB, modalità di trasferimento sincronizzato; vedi Configurazione del kernel Android
  • aggiornarsi con le ultime release e patch del kernel; nonostante il nobile obiettivo della conformità alla classe, esistono periferiche audio esistenti con stranezze, e i kernel recenti hanno soluzioni alternative per queste stranezze
  • attiva i criteri audio USB come descritto di seguito
  • aggiungi audio.usb.default a PRODUCT_PACKAGES in device.mk
  • test dell'interoperabilità con le periferiche audio USB comuni

Attiva criterio audio USB

Per attivare l'audio USB, aggiungi una voce alla di configurazione dei criteri audio. In genere si tratta di una situazione si trova qui:

device/oem/codename/audio_policy.conf

Il componente del percorso "oem" deve essere sostituito dal nome dell'OEM che produce il dispositivo Android, e "codename" deve essere sostituito con il nome del codice del dispositivo.

Ecco un esempio di voce:

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

Codice sorgente

L'HAL (Hardware Abstraction Layer) audio l'implementazione per l'audio USB è disponibile qui:

hardware/libhardware/modules/usbaudio/

L'HAL per audio USB fa molto affidamento tinyalsa, descritto nella sezione Terminologia audio. Sebbene l'audio USB si basi su trasferimenti sincronizzati, questo aspetto viene astratti dall'implementazione di ALSA. Quindi l'HAL audio USB e la smallalsa non devono preoccuparsi questa parte del protocollo USB.

Testa audio USB

Per informazioni sui test CTS per l'audio USB, consulta la sezione Test CTS dello strumento di verifica dell'audio USB.