Tradução da Topologia de Streaming de Kernel para a API do Mixer de Áudio

A API do mixer é um conjunto de funções multimídia do Windows que são usadas para recuperar informações sobre dispositivos de mixer de áudio. A API do mixer classifica as linhas do mixer de áudio como linhas de origem e de destino. As linhas de origem são entradas no cartão de áudio (por exemplo, CD, microfone, entrada de linha e onda). As linhas de destino são saídas do cartão (por exemplo, alto-falantes, fones de ouvido, linha telefônica e onda). Para que uma linha de origem seja válida, ela deve ter um caminho exclusivo da origem para um destino. Uma única linha de origem pode ser mapeada para mais de um destino, mas não mais do que um único caminho pode conectar uma linha de origem a uma linha de destino. Para obter mais informações sobre a API do mixer, consulte a documentação do SDK do Microsoft Windows.

O driver do WDM para um adaptador de áudio expõe uma topologia de filtro KS que representa os caminhos de dados por meio do hardware e das funções disponíveis nesses caminhos. O driver do sistema WDMAud (nos arquivos Wdmaud.sys e Wdmaud.drv) deve interpretar a topologia de filtro KS e gerar as linhas de mixer de origem e destino correspondentes expostas por meio da API do mixer . O WDMAud também manipula as chamadas à API do mixer e as converte nas chamadas de propriedade equivalentes nos pinos de filtro e nós gerenciados pelo driver do adaptador.

O driver do sistema KMixer (Kmixer.sys) e o driver do sistema SWMidi (Swmidi.sys) são componentes integrais da pilha de áudio do kernel. O KMixer fornece combinação de áudio em todo o sistema, conversão de profundidade de bits, conversão de taxa de exemplo e tradução de configuração de canal para alto-falante (supermix) para fluxos de áudio PCM. O SWMidi fornece síntese de software de alta qualidade de fluxos MIDI. O driver de áudio do sistema, SysAudio (Sysaudio.sys; consulte SysAudio System Driver), combina os recursos de KMixer e SWMidi com os drivers de adaptador de áudio instalados para formar dispositivos de áudio virtual aprimorados funcionalmente.

O WDMAud gerencia a interface entre a parte KS e a parte herdada (consulte Componente do Sistema WinMM) da pilha de áudio. O WDMAud converte os pinos nos filtros virtualizados do SysAudio para as linhas de mixer herdadas apresentadas em aplicativos como SndVol32. A tradução da topologia KS para linhas de mixer é executada da seguinte maneira:

  • Os pinos de origem (KSPIN_DATAFLOW_OUT) na topologia KS são expostos como linhas do misturador de destino (MIXERLINE_COMPONENTTYPE_DST_XXX).

  • Os pinos de coletor (KSPIN_DATAFLOW_IN) na topologia KS são expostos como linhas do misturador de origem (MIXERLINE_COMPONENTTYPE_SRC_XXX).

  • WDMAud orienta o grafo de filtro KS começando no pino de origem que está no ponto de extremidade do grafo de filtro e atravessa o grafo na direção oposta ao fluxo de dados até que um pino de coletor seja atingido.

  • As propriedades com suporte em cada nó KS que é encontrado durante a passagem são expostas como controles na linha do mixer de origem.

Nos dois primeiros itens acima, o mapeamento de pinos de origem e coletor KS para linhas de destino e mixer de origem é potencialmente confuso devido às diferenças na terminologia. Em KS, um dispositivo é encapsulado em um filtro que tem pinos de coletor (entrada) e pinos de origem (saída). Os termos "coletor" e "origem" não se referem ao filtro, mas sim à conexão (normalmente armazenada em buffer) entre dois filtros:

  • O pino de origem do filtro upstream é a origem do fluxo de dados que entra na conexão.

  • O fluxo de dados sai da conexão por meio do pino do coletor do filtro downstream.

Por outro lado, a terminologia da linha de mixer é centrada no dispositivo:

  • Uma linha do mixer de origem é a origem de um fluxo que entra no dispositivo.

  • Uma linha de mixer de destino é o destino de um fluxo que sai do dispositivo.

Além disso, a terminologia do KS é um pouco inconsistente na direção de fluxo de fluxo que ela atribui a um pino em um filtro KS. O descritor de pin usa um valor de enumeração KSPIN_DATAFLOW para especificar a direção:

  • Um fluxo que insere o filtro por meio de um pino de coletor tem uma direção de KSPIN_DATAFLOW_IN.

  • Um fluxo que sai do filtro por meio de um pino de origem tem uma direção de KSPIN_DATAFLOW_OUT.

As direções "in" e "out" são claramente centradas em filtro, enquanto os termos "coletor" e "origem" são centrados em conexão.

Para obter mais informações sobre o algoritmo de análise de topologia usado pelo WDMAud, consulte Análise de topologia WDMAud.

Esta seção também inclui:

Pinos de topologia

Nós de topologia

SysTray e SndVol32

Expondo topologia de filtro