Resumo de objetos ACX
Este tópico fornece um resumo de alto nível dos objetos de Extensões de classe de áudio (ACX) que formam a base de um driver de áudio ACX. Para obter uma visão geral do ACX, consulte Visão geral das extensões de classe de áudio ACX.
Os objetos ACX são objetos de Estrutura de Driver do Windows (WDF) – WDFOBJECT. Para obter mais informações sobre o WDF, consulte Introdução aos objetos de estrutura. Para obter um resumo dos objetos WDF, consulte Resumo de objetos de estrutura.
Hierarquia de objetos do ACX
No ACX (como no WDF), o objeto de driver é o objeto raiz e todos os outros objetos são seus filhos/descendentes. Todos os objetos ACX são filhos do objeto de driver direta ou indiretamente por meio de outros objetos ACX ou WDF. Um driver ACX pode especificar o pai de um objeto ACX durante o momento de criação. Se o pai não for especificado, o ACX usará um pai padrão, conforme descrito nestas seções.
Criando objetos WDF não ACX
Além dos objetos ACX, um driver de áudio pode criar e usar outros objetos WDF conforme necessário. Se um driver estiver planejando enumerar dispositivos não-ACX, ele deverá fazê-lo usando uma lista filho diferente da lista filho WDF padrão criada quando um dispositivo ACX/WDF é criado. Um driver pode criar uma nova lista filho WDF usando WdfChildListCreate conforme descrito em Criando objetos de dispositivo em um driver de função. Para obter informações gerais sobre objetos WDF, consulte Introdução a objetos do Framework, Arquitetura WDF e Desenvolvendo drivers com o Windows Driver Foundation. Para obter informações sobre como inicializar um dispositivo ACX, consulte AcxDeviceInitialize.
Circuito ACX
Um AcxCircuit representa um caminho de áudio parcial ou total para um dispositivo de áudio percebido pelo usuário (alto-falantes, microfone, etc.). Um AcxCircuit tem pelo menos um pino de entrada e um de saída (ACXPIN) e pode agregar um ou mais objetos do tipo AcxElements. Por padrão, os AcxElements são "conectados" na mesma ordem de montagem.
O circuito de áudio é o bloco de construção central do ACX. Na nova estrutura ACX, um driver de áudio cria um ou mais objetos de circuito ACX para representar um caminho de dados/controle de áudio parcial ou completo. O ACX monta esses objetos de circuito ACX juntos para criar um caminho de áudio completo que representa um ponto de extremidade de áudio. O ACX é responsável pelo gerenciamento dos circuitos ACX e suas dependências. A ordem de como esses circuitos são montados pode ser definida estaticamente no momento da inicialização ou dinamicamente no tempo de execução.
Um ponto de extremidade de áudio nas estruturas ACX é uma coleção de um ou mais circuitos ACX. Cada circuito ACX em um caminho de áudio de circuito múltiplo deve pertencer a uma pilha de dispositivos PnP diferente. Um driver ACX pode criar um ou mais circuitos no momento da inicialização ou no tempo de execução, como efeito colateral de um evento externo, por exemplo, depois de detectar um novo componente de áudio, ou porque ele se registrou no ACX como uma fábrica para um tipo de circuito específico, e a estrutura ACX pediu ao componente de fábrica para gerar um novo circuito desse tipo (consulte o gerenciador de circuitos/fábrica do ACX descrito posteriormente neste tópico).
Um AcxCircuit pode ter um ou mais fluxos.
Um AcxCircuit tem uma fila WDF dedicada. Para obter mais informações sobre filas WDF, consulte Objetos de fila de estrutura.
As DDIs para circuitos ACX são descritas no cabeçalho acxcircuit.h.
Pino ACX
Assim como nos drivers de áudio Portcls de WDM e o objeto AcxPin representam as conexões lógicas (não as conexões físicas) através das quais os fluxos de dados entram no adaptador a partir do barramento de comunicações do sistema ou a partir do adaptador.
As DDIs para pino são descritas no cabeçalho acxpin.h.
ACX Stream
Um AcxStream representa um fluxo de áudio no hardware de um circuito específico. Um AcxStream pode agregar um ou mais objetos do tipo AcxElements. Por padrão, os AcxElements são "conectados" na mesma ordem de montagem. Um AcxStream está associado a apenas um circuito ACX.
- Um AcxStream tem uma fila WDF dedicada. Para obter mais informações sobre filas WDF, consulte Objetos de fila de estrutura.
- Um AcxStream suporta diferentes estados. Esses estados indicam quando o áudio está fluindo (estado RUN) ou não (estado PAUSE ou STOP).
- Atualmente, o ACX oferece suporte a dois tipos de fluxos: objetos de fluxo ACX básicos usados por circuitos que não são de streaming e objetos de fluxo ACX RT usados por circuitos de streaming.
As DDIs para fluxo são definidas no cabeçalho acxstreams.h.
Destinos ACX
WdfIoTarget é uma abstração WDF para facilitar a comunicação entre duas pilhas diferentes. Para obter mais informações sobre destinos de E/S do WDF, consulte Introdução aos destinos de E/S.
- Os drivers usam AcxTargetCircuit para se comunicar com um circuito remoto exposto por uma pilha diferente. AcxTargetCircuit é implementado usando um WdfIoTarget.
- Os drivers usam AcxTargetPin para se comunicar com o pino de um circuito remoto exposto por uma pilha diferente. AcxTargetPin é implementado usando WdfIoTarget para enviar mensagens para a entidade de pino remoto.
- Os drivers usam AcxTargetElement para se comunicar com o elemento de um circuito remoto exposto por uma pilha diferente. AcxTargetElement é implementado usando um WdfIoTarget para enviar mensagens para a entidade de elemento remoto.
- Os drivers usam AcxTargetStream para se comunicar com o fluxo de um circuito remoto exposto por uma pilha diferente. AcxTargetStream é implementado usando um WdfIoTarget para criar um fluxo remoto e alterar o estado do fluxo remoto.
- Os drivers usam AcxTargetFactoryCircuit para se comunicar com uma instância de fábrica de circuito remoto. AcxTargetFactoryCircuit é implementado usando um WdfTarget para enviar mensagens para a fábrica de circuitos remotos.
Cada um dos tipos de ACX acima oferece suporte a propriedades, métodos e eventos para interagir com o circuito remoto. Todos esses tipos são criados com base no objeto WdfIoTarget.
As DDIs para destinos são definidas no cabeçalho acxtargets.h.
Ponte de fluxo ACX
O objeto AcxStreamBridge é usado por um circuito para propagar a criação de um fluxo, transições de estados do fluxo e configurações de DRM entre segmentos de circuito. Esse objeto só é usado em um cenário de circuito múltiplo (composição de áudio). Um driver pode associar um ou mais objetos ACXSTREAMBRIDGE a um pino de ponte. Um pino de ponte é o ACXPIN que se conecta logicamente ao ACXPIN correspondente no outro circuito.
As DDIs para fluxo são definidas no cabeçalho acxstreams.h.
Exemplo de layout de circuito de nó do mecanismo de áudio ACX
O diagrama a seguir ilustra um circuito ACX. Os pinos de host e descarregamento são entradas para o circuito com um pino de loopback que pode ser usado para cancelamento de eco. A saída pode ser um pino de ponte que roteia para um alto-falante.
O driver não precisa executar a etapa de conexão explícita quando o circuito/elementos estão conectados na mesma ordem em que foram adicionados ao circuito.
Por padrão, o ACX conecta os elementos começando com o pino do coletor de solicitações ACX do circuito e terminando com o pino de ponte do dispositivo do circuito para dispositivos de renderização e captura.
Gerenciador de ACX
O gerenciador ACX é usado para tarefas do sistema, como suporte a pontos de extremidade de áudio composto. Esses tipos de pontos de extremidade são gerenciados por uma ou mais pilhas de drivers de fornecedores iguais ou diferentes. Os clientes podem pré-configurar essa configuração na ACPI ou usar a DDI do Gerenciador de ACX diretamente. As DDIs para o Gerenciador de ACX são descritas no cabeçalho acxmanager.h.
Coletor de objetos ACX
O Coletor de objetos ACX é usado para armazenar vários tipos de dados. ACXOBJECTBAG pode ser enviado como argumento em várias DDIs. As DDIs para Coletor de objetos são descritas no cabeçalho acxmisc.h.
Resumo de objetos ACX
A tabela a seguir lista todos os objetos ACX e fornece algumas informações básicas sobre cada objeto.
Handle | Nome | Finalidade |
---|---|---|
ACXMANAGER | Gerenciador de ACX | Objeto do Gerenciador de ACX que é usado para gerenciar e controlar outros objetos. |
ACXOBJECTBAG | Coletor de objetos | Usado para armazenar dados para utilização com objetos. |
ACXEVENT | Evento ACX | Para eventos KS (kernel-streaming). |
ACXEVENTDATA | Dados de evento | Dados de texto associados a um evento. |
ACXPNPEVENT | Evento Pnp | Para eventos de plug-and-play. |
ACXCIRCUIT | Circuito | Um circuito ACX descrito acima neste tópico. |
ACXPIN | Fixar | Um objeto de pino ACX representa as conexões lógicas e é descrito acima neste tópico. |
ACXELEMENT | Element | Usado para representar qualquer elemento que possa ser adicionado a um AcxCircuit ou AcxStream, como AcxVolume |
ACXAUDIOENGINE | Mecanismo de áudio | O mecanismo de áudio ACX que é usado em um circuito de renderização para representar um DSP. |
ACXSTREAMAUDIOENGINE | Mecanismo de Áudio de Fluxo | Usado em um fluxo de renderização para representar um DSP. |
ACXKEYWORDSPOTTER | Identificador de palavras-chave | Um identificador de palavras-chave, usado em um circuito de captura para detecção de palavras-chave em um fluxo de áudio. |
ACXVOLUME | Volume | Usado para representar um volume, ganho, impulso. |
ACXMUTE | Mute | Usado para representar um elemento mudo. |
ACXJACK | Jack | Usado para representar uma tomada de áudio ou outro conector físico. |
ACXMICARRAYGEOMETRY | Geometria de matrizes de microfone | Usado para representar a geometria de matrizes de microfones, como a localização dos microfones. |
ACXPEAKMETER | Medidor de Pico | Usado quando o hardware oferece suporte à funcionalidade de medidor de pico. |
ACXSTREAM | Stream | Usado para representar um fluxo de áudio criado por um circuito, descrito acima neste tópico. |
ACXDATAFORMAT | Formato de dados | Um formato de dados representa um formato de dados suportado pelo dispositivo de áudio. |
ACXDATAFORMATLIST | Lista de formatos de dados | Uma lista de formatos de dados de áudio disponíveis para uso. |
ACXTARGETCIRCUIT | Circuito de Destino | Usado para se comunicar com um circuito remoto exposto por uma pilha diferente. |
ACXTARGETPIN | Pino de destino | Usado para se comunicar com o pino de um circuito remoto exposto por uma pilha diferente. |
ACXTARGETELEMENT | Elemento Target | Usado para representar qualquer elemento de destino que possa ser adicionado a um AcxCircuit ou AcxStream, como AcxVolume |
ACXTARGETSTREAM | Fluxo de destino | Usado para se comunicar com o fluxo de um circuito remoto exposto por uma pilha diferente. |
ACXTARGETFACTORYCIRCUIT | Fábrica de Circuito de Destino | Usado para se comunicar com a fábrica de um circuito remoto. |
ACXSTREAMBRIDGE | Ponte de fluxo | Usado por um circuito para propagar a criação de um fluxo, transições de estados e DRM entre segmentos de circuito. |
ACXCOMPOSITE | Composto | Usado para representar arquiteturas de fluxo de vários circuitos/pilha múltipla/vários fornecedores. |
ACXCOMPOSITEFACTORY | Fábrica de Áudios Compostos | Uma fábrica que cria circuitos de áudio composto. |
ACXFACTORYCIRCUIT | Circuito de Fábrica | Uma fábrica que cria circuitos usando um modelo específico. |
ACXCIRCUITMANAGER | Gerenciador de Circuitos | Um provedor de circuito que é usado para a criação de circuitos dinâmicos. |
ACXCOMPOSITETEMPLATE | Modelo Composto | Um modelo composto representa uma associação de áudio parcial ou completa. Um modelo composto pode ter um ou mais modelos de circuito. |
ACXCIRCUITTEMPLATE | Modelo de Circuito | Um modelo de circuito representa um caminho de áudio parcial. |
ACXAUDIOMODULE | Módulo de Áudio | Para funcionalidade de complemento de terceiros personalizado. |
Os seguintes objetos ACX são usados para armazenar informações de circuito, fluxo e fábrica do circuito.
Handle | Finalidade |
---|---|
ACXCIRCUIT_INIT | Armazena dados de inicialização do circuito ACX |
ACXSTREAM_INIT | Armazena dados de inicialização de fluxo ACX |
ACXFACTORYCIRCUIT_INIT | Armazena dados de inicialização usados por uma fábrica de circuitos ACX |