Riepilogo degli oggetti ACX
In questo argomento viene fornito un riepilogo generale degli oggetti ACX (Audio Class Extensions) che costituiscono la base di un driver audio ACX. Per una panoramica generale di ACX, vedere Panoramica delle estensioni della classe audio ACX.
Gli oggetti ACX sono oggetti Windows Driver Framework (WDF) - WDFOBJECT. Per altre informazioni su WDF, vedere Introduzione agli oggetti framework. Per un riepilogo degli oggetti WDF, vedere Riepilogo degli oggetti framework.
Gerarchia di oggetti ACX
In ACX (come in WDF), l'oggetto driver è l'oggetto radice e tutti gli altri oggetti sono figli/discendenti. Tutti gli oggetti ACX sono elementi figlio dell'oggetto driver direttamente o indirettamente tramite altri oggetti ACX o WDF. Un driver ACX può specificare l'elemento padre di un oggetto ACX durante la creazione. Se l'elemento padre non è specificato, ACX usa un elemento padre predefinito come descritto in queste sezioni.
Creazione di oggetti WDF non ACX
Oltre agli oggetti ACX, un driver audio può creare e usare altri oggetti WDF in base alle esigenze. Se un driver prevede di enumerare i dispositivi non ACX, deve farlo usando un elenco figlio diverso rispetto all'elenco figlio WDF predefinito creato quando viene creato un dispositivo ACX/WDF. Un driver può creare un nuovo elenco figlio WDF usando WdfChildListCreate come descritto in Creazione di oggetti dispositivo in un driver di funzione. Per informazioni generali sugli oggetti WDF, vedere Introduzione agli oggetti Framework, architettura WDF e sviluppo di driver con Windows Driver Foundation. Per informazioni sull'inizializzazione di un dispositivo ACX, vedere AcxDeviceInitialize.
Circuito ACX
Un AcxCircuit rappresenta un percorso audio parziale o completo a un dispositivo audio percepito dall'utente (altoparlanti, microfoni e così via). Un AcxCircuit ha almeno un pin di input e un pin di output (ACXPIN) e può aggregare uno o più oggetti simili a AcxElements. Per impostazione predefinita, AcxElements è "connesso" nello stesso ordine di assembly.
Il circuito audio è il blocco predefinito principale di ACX. Nel nuovo framework ACX, un driver audio crea uno o più oggetti circuito ACX per rappresentare un percorso di dati/controllo audio parziale o completo. ACX assembla questi oggetti circuito ACX insieme per creare un percorso audio completo che rappresenta un endpoint audio. ACX è responsabile della gestione dei circuiti ACX e delle relative dipendenze. L'ordine di assemblaggio di questi circuiti può essere definito in modo statico in fase di inizializzazione o definito in modo dinamico in fase di esecuzione.
Un endpoint audio nei framework ACX è una raccolta di uno o più circuiti ACX. Ogni circuito ACX in un percorso audio multi circuito deve appartenere a uno stack di dispositivi PnP diverso. Un driver ACX può creare uno o più circuiti in fase di inizializzazione oppure creare circuiti in fase di esecuzione, come effetto collaterale di un evento esterno, ad esempio dopo aver rilevato un nuovo componente audio o perché è registrato con ACX come factory per un tipo di circuito specifico e il framework ACX ha chiesto al componente factory di creare un nuovo circuito di tale tipo (vedere Gestione circuito ACX/factory descritto più avanti in questo argomento).
Un AcxCircuit può avere uno o più flussi.
Un AcxCircuit ha una coda WDF dedicata. Per altre informazioni sulle code WDF, vedere Framework Queue Objects.For more information about WDF queue objects, see Framework Queue Objects.
Le DDI per i circuiti ACX sono descritte nell'intestazione acxcircuit.h .
ACX Pin
Proprio come in WDM Portcls driver audio e l'oggetto AcxPin rappresentano le connessioni logiche (non le connessioni fisiche) attraverso le quali i flussi di dati immettono l'adattatore dal bus di comunicazione di sistema o immettono il bus di comunicazione di sistema dalla scheda.
Le DDI per pin sono descritte nell'intestazione acxpin.h .
Flusso ACX
AcxStream rappresenta un flusso audio su hardware di un circuito specifico. Un AcxStream può aggregare uno o più oggetti simili a AcxElements. Per impostazione predefinita, AcxElements è "connesso" nello stesso ordine di assembly. Un AcxStream è associato a un solo circuito ACX.
- Un AcxStream ha una coda WDF dedicata. Per altre informazioni sulle code WDF, vedere Framework Queue Objects
- Un acxStream supporta stati diversi. Questi stati indicano quando l'audio scorre (stato RUN) o non scorre (stato PAUSE o STOP).
- Attualmente ACX supporta due tipi di flussi: oggetti di flusso ACX di base usati dai circuiti non di streaming e oggetti flusso ACX RT usati dai circuiti di streaming.
Le DDI per il flusso vengono definite nell'intestazione acxstreams.h .
Destinazioni ACX
WdfIoTarget è un'astrazione WDF per facilitare la comunicazione tra due stack diversi. Per altre informazioni sulle destinazioni di I/O di WDF, vedere Introduzione alle destinazioni di I/O.
- I driver usano AcxTargetCircuit per comunicare con un circuito remoto esposto da uno stack diverso. AcxTargetCircuit viene implementato usando un WdfIoTarget.
- I driver usano AcxTargetPin per comunicare con il pin di un circuito remoto esposto da uno stack diverso. AcxTargetPin viene implementato usando un WdfIoTarget per inviare messaggi all'entità pin remota.
- I driver usano AcxTargetElement per comunicare con l'elemento di un circuito remoto esposto da uno stack diverso. AcxTargetElement viene implementato usando un WdfIoTarget per inviare messaggi all'entità dell'elemento remoto.
- I driver usano AcxTargetStream per comunicare con il flusso di un circuito remoto esposto da uno stack diverso. AcxTargetStream viene implementato usando un WdfIoTarget per creare un flusso remoto e modificare lo stato del flusso remoto.
- I driver usano AcxTargetFactoryCircuit per comunicare con un'istanza remota della factory del circuito. AcxTargetFactoryCircuit viene implementato usando un WdfTarget per inviare messaggi alla factory del circuito remoto.
Ognuno dei tipi ACX precedenti supporta proprietà, metodi ed eventi per interagire con il circuito remoto. Tutti questi tipi sono basati sull'oggetto WdfIoTarget.
Le DDI per le destinazioni sono definite nell'intestazione acxtargets.h .
ACX Stream Bridge
L'oggetto AcxStreamBridge viene usato da un circuito per propagare la creazione di un flusso, le transizioni degli stati del flusso e le impostazioni DRM tra segmenti di circuito. Questo oggetto viene usato solo in uno scenario multi circuito (composito audio). Un driver può associare uno o più oggetti ACXSTREAMBRIDGE a un pin di bridge. Un pin di ponte è l'ACXPIN che si connette logicamente all'ACXPIN corrispondente nell'altro circuito.
Le DDI per Stream sono descritte nell'intestazione acxstreams.h .
Esempio di layout del circuito del nodo del motore audio ACX
Il diagramma seguente illustra un circuito ACX. Gli host e i pin offload sono input per il circuito con un pin di loopback che può essere usato per l'annullamento echo. L'output può essere un pin bridge che indirizza a un altoparlante.
Si noti che il driver non deve eseguire il passaggio di connessione esplicita quando il circuito o gli elementi sono connessi nello stesso ordine in cui sono stati aggiunti al circuito.
Per impostazione predefinita, ACX connette gli elementi a partire dal pin del sink di richiesta ACX del circuito e termina con il pin del bridge del dispositivo del circuito per i dispositivi di rendering e acquisizione.
Gestione ACX
Il gestore ACX viene usato per le attività di sistema, ad esempio il supporto di endpoint audio compositi. Questi tipi di endpoint vengono gestiti da uno o più stack di driver di fornitori uguali o diversi. I client possono preconfigurare questa configurazione in ACPI o usare direttamente l'DDI di ACX Manager. Le DDI per il gestore ACX sono descritte nell'intestazione acxmanager.h .
Contenitore oggetti ACX
Il contenitore di oggetti ACX viene usato per archiviare vari tipi di dati. ACXOBJECTBAG può essere passato come argomento in varie DDI. Le DDI per Object Bag sono descritte nell'intestazione acxmisc.h .
Riepilogo degli oggetti ACX
Nella tabella seguente sono elencati tutti gli oggetti ACX e vengono fornite alcune informazioni di base su ogni oggetto.
Handle | Nome | Scopo |
---|---|---|
ACXMANAGER | The ACX Manager | Oggetto ACX Manager utilizzato per gestire e controllare altri oggetti. |
ACXOBJECTBAG | Contenitore oggetti | Utilizzato per l'archiviazione dei dati per l'uso con oggetti . |
ACXEVENT | ACX, evento | Per gli eventi KS (kernel-streaming). |
ACXEVENTDATA | Dati dell'evento | Dati associati a un evento. |
ACXPNPEVENT | Pnp, evento | Per gli eventi plug and play. |
ACXCIRCUIT | Circuito | Circuito ACX descritto in precedenza in questo argomento. |
ACXPIN | Aggiungi | Un oggetto PIN ACX rappresenta le connessioni logiche ed è descritto in precedenza in questo argomento. |
ACXELEMENT | Elemento | Utilizzato per rappresentare qualsiasi elemento che può essere aggiunto a un acxCircuit o a AcxStream, ad esempio AcxVolume |
ACXAUDIOENGINE | Motore audio | Motore audio ACX usato in un circuito di rendering per rappresentare un DSP. |
ACXSTREAMAUDIOENGINE | Stream Audio Engine | Usato in un flusso di rendering per rappresentare un provider di servizi di dominio. |
ACXKEYWORDSPOTTER | Spotter parola chiave | Spotter di parole chiave, usato in un circuito di acquisizione per il rilevamento di parole chiave in un flusso audio. |
ACXVOLUME | Volume | Usato per rappresentare un volume, un guadagno, una spinta. |
ACXMUTE | Disattiva audio | Utilizzato per rappresentare un elemento disattivato. |
ACXJACK | Cricco | Utilizzato per rappresentare un jack audio o un altro connettore fisico. |
ACXMICARRAYGEOMETRY | Geometria matrice di microfoni | Utilizzato per rappresentare la geometria della matrice di microfoni, ad esempio la posizione dei microfoni. |
ACXPEAKMETER | Picco contatore | Usato quando l'hardware supporta la funzionalità del contatore di picco. |
ACXSTREAM | Stream | Usato per rappresentare un flusso audio creato da un circuito, descritto in precedenza in questo argomento. |
ACXDATAFORMAT | Formato dati | Un formato di dati rappresenta un formato di dati supportato dal dispositivo audio. |
ACXDATAFORMATLIST | Elenco formato dati | Elenco dei formati di dati audio disponibili per l'uso. |
ACXTARGETCIRCUIT | Circuito di destinazione | Usato per comunicare con un circuito remoto esposto da uno stack diverso. |
ACXTARGETPIN | Pin di destinazione | Usato per comunicare con il pin di un circuito remoto esposto da uno stack diverso. |
ACXTARGETELEMENT | Elemento Target | Usato per rappresentare un elemento di destinazione che può essere aggiunto a un AcxCircuit o AcxStream, ad esempio AcxVolume |
ACXTARGETSTREAM | Flusso di destinazione | Usato per comunicare con il flusso di un circuito remoto esposto da uno stack diverso. |
ACXTARGETFACTORYCIRCUIT | Factory del circuito di destinazione | Usato per comunicare con la fabbrica di un circuito remoto. |
ACXSTREAMBRIDGE | Ponte di flusso | Usato da un circuito per propagare la creazione di un flusso, gli stati passano e DRM tra segmenti di circuito. |
ACXCOMPOSITE | Composito | Usato per rappresentare architetture di flusso multi-circuito/multi-stack/più fornitori. |
ACXCOMPOSITEFACTORY | Fabbrica composita | Factory che crea circuiti audio compositi. |
ACXFACTORYCIRCUIT | Circuito factory | Factory che crea circuiti usando un modello specifico. |
ACXCIRCUITMANAGER | Gestione circuiti | Provider di circuiti utilizzato per la creazione dinamica del circuito. |
ACXCOMPOSITETEMPLATE | Modello composito | Un modello composito rappresenta un binding audio parziale o completo. Un modello composito può avere uno o più modelli di circuito. |
ACXCIRCUITTEMPLATE | Modello di circuito | Un modello di circuito rappresenta un percorso audio parziale. |
ACXAUDIOMODULE | Modulo audio | Per l'aggiunta di funzionalità personalizzate di terze parti. |
Gli oggetti ACX seguenti vengono usati per archiviare informazioni sul circuito, sul flusso e sulla factory del circuito.
Handle | Scopo |
---|---|
ACXCIRCUIT_INIT | Archivia i dati di inizializzazione del circuito ACX |
ACXSTREAM_INIT | Archivia i dati di inizializzazione del flusso ACX |
ACXFACTORYCIRCUIT_INIT | Archivia i dati di inizializzazione usati da una factory di circuiti ACX |