Driver audio USB 2.0

A partire da Windows 10, versione 1703, viene fornito un driver USB Audio 2.0 con Windows. È progettato per supportare la classe di dispositivo USB Audio 2.0. Il driver è un miniport della porta audio WaveRT.

Il driver è denominato: usbaudio2.sys e il file inf associato è usbaudio2.inf.

Il driver identificherà in Gestione dispositivi come "Dispositivo USB Audio Classe 2". Questo nome verrà sovrascritto con una stringa di prodotto USB, se disponibile.

Il driver viene abilitato automaticamente quando un dispositivo compatibile è collegato al sistema. Tuttavia, se esiste un driver di terze parti nel sistema o Windows Update, tale driver verrà installato e sottoposto a override del driver di classe.

Architettura

Il driver usbaudio2.sys si adatta all'architettura più ampia di Windows USB Audio, come illustrato.

Diagramma dello stack che illustra l'architettura audio USB di Windows con ks.sys nella parte superiore e nei dispositivi AUDIO USB nella parte inferiore.

Le specifiche USB seguenti definiscono l'audio USB e sono a cui si fa riferimento in questo articolo.

  • USB-2 fa riferimento alla specifica del bus seriale universale, revisione 2.0
  • ADC-2 fa riferimento alla definizione della classe di dispositivo USB per dispositivi audio, versione 2.0.
  • FMT-2 fa riferimento alla specifica Formati dati audio versione 2.0.

USB-IF è un gruppo di interesse speciale che gestisce la specifica USB ufficiale, le specifiche di test e gli strumenti.

Formati audio

Il driver supporta i formati elencati di seguito. Un'impostazione alternativa, che specifica un altro formato definito in FMT-2 o un formato sconosciuto, verrà ignorato.

Formati di tipo I (FMT-2 2.3.1):

  • Formato PCM con 8..32 bit per esempio (FMT-2 2.3.1.7.1)
  • Formato PCM8 (FMT-2 2.3.1.7.2)
  • IEEE_FLOAT Formato (FMT-2 2.3.1.7.3)

Formati type III (FMT-2 2.3.3 e A.2.3):

  • IEC61937_AC-3
  • IEC61937_MPEG-2_AAC_ADTS
  • IEC61937_DTS-I
  • IEC61937_DTS-II
  • IEC61937_DTS-III
  • TYPE_III_WMA

Descrizione delle funzionalità

Questa sezione descrive le funzionalità del driver USB Audio 2.0.

Topologia della funzione audio

Il driver supporta tutti i tipi di entità definiti in ADC-2 3.13.

Ogni entità terminale deve avere una connessione orologio valida nell'hardware USB Audio 2.0 compatibile. Il percorso dell'orologio può facoltativamente includere unità Di moltiplicazione orologio e selettore orologio e deve terminare in un'entità origine orologio.

Il driver supporta solo un'unica origine dell'orologio. Se un dispositivo implementa più entità di origine orologio e un selettore di orologio, il driver userà l'origine dell'orologio selezionata per impostazione predefinita e non modifica la posizione del selettore dell'orologio.

Un'unità di elaborazione (ADC-2 3.13.9) con più di un pin di input non è supportata.

Un'unità di estensione (ADC-2 3.13.10) con più di un pin di input non è supportata.

I percorsi ciclici nella topologia non sono consentiti.

Streaming audio

Il driver supporta i tipi di sincronizzazione degli endpoint seguenti (USB-2 5.12.4.1):

  • IN e OUT asincroni
  • IN e OUT sincroni
  • IN e OUT adattivi

Per il caso OUT asincrono, il driver supporta solo commenti e suggerimenti espliciti. Un endpoint di feedback deve essere implementato nella rispettiva impostazione alternativa dell'interfaccia AS. Il driver non supporta commenti e suggerimenti impliciti.

Attualmente è disponibile un supporto limitato per i dispositivi che usano un orologio condiviso per più endpoint.

Nel caso in cui il driver non supporti un endpoint di inoltro del feed. Se tale endpoint è presente nell'impostazione alternativa, verrà ignorato. Il driver gestisce il flusso IN adattivo nello stesso modo di un flusso IN asincrono.

Le dimensioni dei pacchetti isocroni creati dal dispositivo devono essere entro i limiti specificati nella sezione FMT-2.0 sezione 2.3.1.1. Ciò significa che la deviazione delle dimensioni effettive dei pacchetti dalle dimensioni nominale non deve superare +/- uno slot audio (slot audio = campioni di conteggio dei canali).

Descrittori

Una funzione audio deve implementare esattamente un descrittore dell'interfaccia AudioControl (ADC-2 4.7) e uno o più descrittori dell'interfaccia AudioStreaming (ADC-2 4.9). Una funzione con un'interfaccia di controllo audio, ma non è supportata alcuna interfaccia di streaming.

Il driver supporta tutti i tipi descrittori definiti in ADC-2, sezione 4. Le sottosezioni seguenti forniscono commenti su alcuni tipi di descrittore specifici.

descrittore dell'interfaccia AS Class-Specific

Per informazioni dettagliate su questa specifica, vedere ADC-2 4.9.2.

Un descrittore dell'interfaccia AS deve iniziare con l'impostazione alternativa zero senza endpoint (nessun consumo di larghezza di banda) e altre impostazioni alternative devono essere specificate in ordine crescente nell'hardware USB Audio 2.0 compatibile.

Verrà ignorata un'impostazione alternativa con un formato non supportato dal driver.

Ogni impostazione alternativa non zero deve specificare un endpoint dati isochronous e facoltativamente un endpoint di feedback. Un'impostazione alternativa non zero senza alcun endpoint non è supportata.

Il campo bTerminalLink deve fare riferimento a un'entità terminale nella topologia e il relativo valore deve essere identico in tutte le impostazioni alternative di un'interfaccia AS.

Il campo bFormatType nel descrittore dell'interfaccia AS deve essere identico a bFormatType specificato nel descrittore tipo di formato (FMT-2 2.3.1.6).

Per i formati Type I, è necessario impostare esattamente un bit su uno nel campo bmFormats del descrittore dell'interfaccia AS. In caso contrario, il formato verrà ignorato dal driver.

Per salvare la larghezza di banda del bus, un'interfaccia AS può implementare più impostazioni alternative con lo stesso formato (in termini di descrittore tipo di formato bNrChannels e AS) ma diversi valori wMaxPacketSize nel descrittore dell'endpoint dati isochronous. Per una determinata frequenza di esempio, il driver seleziona l'impostazione alternativa con il più piccolo wMaxPacketSize in grado di soddisfare i requisiti di velocità dei dati.

Descrittore tipo di formato I

Per informazioni dettagliate su questa specifica, vedere FMT-2 2.3.1.6.

Si applicano le restrizioni seguenti:

Formato Dimensioni della sottoslot Risoluzione dei bit
Digitare il formato PCM: 1 <= bSubslotSize <= 4 8 <= bBitResolution <= 32
Tipo I PCM8 formato: bSubslotSize == 1 bBitResolution == 8
Digitare IEEE_FLOAT formato: bSubslotSize == 4 bBitResolution == 32
Tipi III IEC61937 formati: bSubslotSize == 2 bBitResolution == 16

descrittore dell'endpoint dati audio isochronous Class-Specific AS

Per informazioni dettagliate su questa specifica, vedere ADC-2 4.10.1.2.

Il flag MaxPacketsOnly nel campo bmAttributes non è supportato e verrà ignorato.

I campi bmControls, bLockDelayUnits e wLockDelay verranno ignorati.

Richieste di classe e messaggi di dati di interruzione

Il driver supporta un subset delle richieste di controllo definite in ADC-2, sezione 5.2 e supporta i messaggi di dati di interrupt (ADC-2 6.1) per alcuni controlli. La tabella seguente illustra il subset implementato nel driver.

Entità Control GET CUR SET CUR GET RANGE INTERROMPERE
Origine orologio Controllo frequenza di campionamento x x x
Selettore orologio Controllo selettore orologio x
Moltiplicatore orologio Controllo numeratore x
Controllo denominatore x
Terminale Controllo connettore x x
Unità mixer Controllo Mixer x x x
Unità selettore Controllo selettore x x
Unità funzionalità Disattiva controllo x x x
Controllo volume x x x x
Controllo automatico dei guadagni x x
Unità effetto
Unità di elaborazione
Unità di estensione

Altre informazioni sui controlli e sulle richieste sono disponibili nelle sottosezioni seguenti.

Entità di origine orologio

Per informazioni dettagliate su questa specifica, vedere ADC-2 5.2.5.1.

Come minimo, un'entità origine orologio deve implementare il controllo frequenza di campionamento GET RANGE e le richieste GET CUR (ADC-2 5.2.5.1.1) compatibili con l'hardware AUDIO 2.0 USB.

La richiesta GET RANGE controllo frequenza di campionamento restituisce un elenco di intervalli secondari (ADC-2 5.2.1). Ogni sottoinsieme descrive una frequenza discreta o un intervallo di frequenza. È necessario esprimere una frequenza di campionamento discreta impostando i campi MIN e MAX sulla rispettiva frequenza e RES su zero. I singoli intervalli secondari non devono sovrapporsi. Se un sottoinsieme si sovrappone a uno precedente, verrà ignorato dal driver.

Un'entità di origine orologio che implementa una singola frequenza fissa non deve implementare il controllo frequenza di campionamento SET CUR. Implementa GET CUR, che restituisce la frequenza fissa e implementa GET RANGE, che segnala una singola frequenza discreta.

Entità del selettore di clock

Per informazioni dettagliate su questa specifica, vedere ADC-2 5.2.5.2

Il driver USB Audio 2.0 non supporta la selezione dell'orologio. Il driver usa l'entità origine orologio, selezionata per impostazione predefinita e non genera mai una richiesta SET CUR del controllo del selettore orologio. La richiesta GET CUR del controllo del selettore orologio (ADC-2 5.2.5.2.1) deve essere implementata in hardware USB Audio 2.0 compatibile.

Unità di funzionalità

Per informazioni dettagliate su questa specifica, vedere ADC-2 5.2.5.7.

Il driver supporta un solo intervallo di volumi. Se la richiesta GET RANGE di Controllo volume restituisce più di un intervallo, gli intervalli successivi verranno ignorati.

L'intervallo di volume espresso dai campi MIN e MAX deve essere un multiplo intero delle dimensioni del passaggio specificate nel campo RES.

Se un'unità di funzionalità implementa controlli a canale singolo e un controllo master per l'audio o il volume, il driver usa i controlli a canale singolo e ignora il controllo master.

Informazioni aggiuntive per OEM e IHV

Gli OEM e gli IHD devono testare i dispositivi esistenti e nuovi con il driver in-box fornito.

Non esiste alcuna personalizzazione partner specifica associata al driver USB Audio 2.0 in-box.

Questa voce di file INF (fornita in un aggiornamento a Windows Release 1703) viene usata per identificare che il driver in-box è un driver di dispositivo generico.

GenericDriverInstalled,,,,1

Il driver in-box registra per gli ID compatibili seguenti con usbaudio2.inf.

USB\Class_01&SubClass_00&Prot_20
USB\Class_01&SubClass_01&Prot_20
USB\Class_01&SubClass_02&Prot_20
USB\Class_01&SubClass_03&Prot_20

Vedi la specifica USB Audio 2.0 per i tipi di sottoclasse.

I dispositivi USB Audio 2.0 con MIDI (sottoclasse 0x03 sopra) enumereranno la funzione MIDI come un dispositivo a più funzioni separato con usbaudio.sys (driver USB Audio 1.0) caricato.

Il driver di classe USB Audio 1.0 registra questo ID compatibile con wdma_usb.inf.

USB\Class_01

E ha queste esclusioni:

USB\Class_01&SubClass_00&Prot_20
USB\Class_01&SubClass_01&Prot_20
USB\Class_01&SubClass_02&Prot_20
USB\Class_01&SubClass_03&Prot_20

Un numero arbitrario di canali (maggiori di otto) non è supportato in modalità condivisa a causa di una limitazione dello stack audio di Windows.

Driver e aggiornamenti di IHV USB Audio 2.0

Per i driver USB Audio 2.0 forniti da terze parti, tali driver continueranno a essere preferiti per i dispositivi rispetto al driver in-box, a meno che non aggiornino il driver per ignorare in modo esplicito questo comportamento e usare il driver in-box.

Descrizioni del Registro di sistema di Jack audio

A partire da Windows 10 versione 1703, IHV che creano dispositivi USB Audio Class 2.0 con uno o più jack hanno la possibilità di descrivere questi jack al driver Audio Class 2.0 in-box. Il driver in-box usa le informazioni del jack fornito durante la gestione del KSPROPERTY_JACK_DESCRIPTION per questo dispositivo.

Le informazioni jack vengono archiviate nel Registro di sistema nella chiave dell'istanza del dispositivo (chiave HW).

Di seguito vengono descritte le impostazioni relative alle informazioni relative al jack audio nel Registro di sistema:

REG_DWORD  T<tid>_NrJacks                 # of the jack on this device
REG_DWORD  T<tid>_J<n>_ChannelMapping     Channel mask. The value is defined in ksmedia.h. e.g. SPEAKER_FRONT_RIGHT or KSAUDIO_SPEAKER_5POINT1_SURROUND
REG_DWORD  T<tid>_J<n>_ConnectorType      The enum value is define in EPcxConnectionType.
REG_DWORD  T<tid>_J<n>_GeoLocation        The enum value is define in EPcxGeoLocation.
REG_DWORD  T<tid>_J<n>_GenLocation        The enum value is define in EPcxGenLocation.
REG_DWORD  T<tid>_J<n>_PortConnection     The enum value is define in EPxcPortConnection.
REG_DWORD  T<tid>_J<n>_Color              The color needs to be represent by RGB like this: 0x00RRGGBB (NOT a COLORREF).

<tid> = ID terminale (come definito nel descrittore)

<n> = Numero jack (1 ~ n).

La convenzione per <tid> e <n> è:

  • Base 10 (8, 9, 10 anziché 8, 9, a)
  • Nessun zero iniziale
  • n è a base 1 (il primo jack è jack 1 anziché jack 0)

Ad esempio:

T1_NrJacks, T1_J2_ChannelMapping, T1_J2_ConnectorType

Per altre informazioni sul jack audio, vedi struttura KSJACK_DESCRIPTION.

Questi valori del Registro di sistema possono essere impostati in diversi modi:

  • Utilizzando funzioni INF personalizzate, che escludono in-box INF per impostare questi valori.

  • Direttamente dal dispositivo hardware tramite un descrittore del sistema operativo Microsoft per i dispositivi USB (vedere l'esempio seguente). Per altre informazioni sulla creazione di questi descrittori, vedere Descrittori del sistema operativo Microsoft per dispositivi USB.

Esempio di descrittori del sistema operativo Microsoft per USB

I descrittori del sistema operativo Microsoft seguenti per l'esempio USB contengono il mapping del canale e il colore per un jack. L'esempio è relativo a un dispositivo non composito con un singolo descrittore di funzionalità.

Il fornitore IHV deve estenderlo in modo da contenere qualsiasi altra informazione per la descrizione del jack.

UCHAR Example2_MSOS20DescriptorSetForUAC2 [0x76] = {
    //
    // Microsoft OS 2.0 Descriptor Set Header
    //
    0x0A, 0x00,             // wLength - 10 bytes
    0x00, 0x00,             // MSOS20_SET_HEADER_DESCRIPTOR
    0x00, 0x00, 0x0?, 0x06, // dwWindowsVersion – 0x060?0000 for future Windows version
    0x76, 0x00,             // wTotalLength – 118 bytes // update later

    //
    // Microsoft OS 2.0 Registry Value Feature Descriptor
    //
    0x42, 0x00,             // bLength - 66 bytes
    0x04, 0x00,             // wDescriptorType – 5 for Registry Property
    0x04, 0x00,             // wPropertyDataType - 4 for REG_DWORD
    0x34, 0x00,             // wPropertyNameLength – 52 bytes
    0x54, 0x00, 0x30, 0x00, // Property Name - "T01_J01_ChannelMapping"
    0x31, 0x00, 0x5f, 0x00,
    0x4a, 0x00, 0x30, 0x00,
    0x31, 0x00, 0x5f, 0x00,
    0x43, 0x00, 0x68, 0x00,
    0x61, 0x00, 0x6e, 0x00,
    0x6e, 0x00, 0x65, 0x00,
    0x6c, 0x00, 0x4d, 0x00,
    0x61, 0x00, 0x70, 0x00,
    0x70, 0x00, 0x69, 0x00,
    0x6e, 0x00, 0x67, 0x00,
    0x00, 0x00
    0x04, 0x00,                       // wPropertyDataLength – 4 bytes
    0x02, 0x00, 0x00, 0x00  // PropertyData - SPEAKER_FRONT_RIGHT

    //
    // Microsoft OS 2.0 Registry Value Feature Descriptor
    //
    0x2A, 0x00,             // bLength - 42 bytes
    0x04, 0x00,             // wDescriptorType – 5 for Registry Property
    0x04, 0x00,             // wPropertyDataType - 4 for REG_DWORD
    0x1C, 0x00,             // wPropertyNameLength – 28 bytes
    0x54, 0x00, 0x30, 0x00, // Property Name - "T01_J01_Color"
    0x31, 0x00, 0x5f, 0x00,
    0x4a, 0x00, 0x30, 0x00,
    0x31, 0x00, 0x5f, 0x00,
    0x43, 0x00, 0x6f, 0x00,
    0x6c, 0x00, 0x6f, 0x00,
    0x72, 0x00, 0x00, 0x00,
    0x04, 0x00,             // wPropertyDataLength – 4 bytes
    0x00, 0x00, 0xff, 0x00  // PropertyData - 0xff0000 - RED }

Risoluzione dei problemi

Se il driver non viene avviato, il registro eventi di sistema deve essere controllato. Il driver registra gli eventi che indicano il motivo dell'errore. Analogamente, i log audio possono essere raccolti manualmente seguendo i passaggi descritti nell'articolo di log Web di Matthew van Eerde, Raccolta dei log audio nel modo precedente. Se l'errore può indicare un problema del driver, segnalarlo usando l'hub di feedback descritto di seguito e includere i log.

Per informazioni su come leggere i log per il driver di classe USB Audio 2.0 usando file TMF supplementari, vedere Segnalare problemi, con i log e suggerire funzionalità, con l'hub di Feedback nel log Web di Matthew van Eerde. Per informazioni generali sull'uso dei file TMF, vedere Visualizzazione di un log di traccia con un file TMF.

Per informazioni sull'errore "Servizi audio che non rispondono" e il dispositivo AUDIO USB non funziona in Windows 10 versione 1703, vedere Usb Audio Not Playing.

Hub di Feedback

Se si verifica un problema con questo driver, raccogliere i log audio e quindi seguire i passaggi descritti in Segnalare problemi, con i log e suggerire funzionalità, con l'hub di Feedback per portarlo all'attenzione .

Sviluppo di driver

Questo driver di classe USB Audio 2.0 è stato sviluppato da Thesycon ed è supportato da Microsoft.

Vedi anche