Condividi tramite


Topologia di streaming del kernel alla conversione dell'API Mixer audio

L'API mixer è un set di funzioni multimediali di Windows usate per recuperare informazioni sui dispositivi mixer audio. L'API mixer classifica le linee audio-mixer come linee di origine e di destinazione. Le righe di origine sono input nella scheda audio (ad esempio, CD, microfono, line-in e wave). Le righe di destinazione sono output dalla scheda (ad esempio altoparlanti, cuffie, linea telefonica e onda). Affinché una riga di origine sia valida, deve avere un percorso univoco dall'origine a una destinazione. Una singola linea di origine può essere mappata a più di una destinazione, ma non più di un singolo percorso può connettere una linea di origine a una linea di destinazione. Per altre informazioni sull'API mixer, vedere la documentazione di Microsoft Windows SDK.

Il driver WDM per una scheda audio espone una topologia di filtro KS che rappresenta i percorsi dei dati tramite l'hardware e le funzioni disponibili in tali percorsi. Il driver di sistema WDMAud (nei file Wdmaud.sys e Wdmaud.drv) deve interpretare la topologia KS-filter e generare le linee mixer di origine e destinazione corrispondenti esposte tramite l'API mixer . WDMAud gestisce anche le chiamate API mixer e le converte nelle chiamate di proprietà equivalenti sui pin di filtro e sui nodi gestiti dal driver dell'adattatore.

Il driver di sistema KMixer (Kmixer.sys) e il driver di sistema SWMidi (Swmidi.sys) sono componenti integrali dello stack audio del kernel. KMixer fornisce la conversione audio a livello di sistema, la conversione della profondità di bit, la conversione della frequenza di campionamento e la conversione da canale a altoparlante (supermix) per i flussi audio PCM. SWMidi fornisce una sintesi software di alta qualità dei flussi MIDI. Il driver audio di sistema, SysAudio (Sysaudio.sys; vedere SysAudio System Driver), combina le funzionalità di KMixer e SWMidi con i driver di adattatore audio installati per formare dispositivi audio virtuali ottimizzati in modo funzionale.

WDMAud gestisce l'interfaccia tra la parte KS e la parte legacy (vedi Componente di sistema WinMM) dello stack audio. WDMAud converte i pin nei filtri virtualizzati SysAudio nelle linee mixer legacy presentate in applicazioni come SndVol32. La conversione dalla topologia KS alle linee mixer viene eseguita come segue:

  • I pin di origine (KSPIN_DATAFLOW_OUT) nella topologia KS vengono esposti come linee mixer di destinazione (MIXERLINE_COMPONENTTYPE_DST_XXX).

  • I pin sink (KSPIN_DATAFLOW_IN) nella topologia KS vengono esposti come linee mixer di origine (MIXERLINE_COMPONENTTYPE_SRC_XXX).

  • WDMAud guida il grafico del filtro KS a partire dal pin di origine che si trova all'endpoint del grafico del filtro e attraversa il grafico nella direzione opposta al flusso di dati fino a quando non viene raggiunto un pin sink.

  • Le proprietà supportate in ogni nodo KS rilevate durante l'attraversamento vengono esposte come controlli sulla linea del mixer di origine.

Nei primi due elementi precedenti, il mapping di pin di origine e sink KS alle linee di destinazione e mixer di origine è potenzialmente confuso a causa delle differenze nella terminologia. In KS un dispositivo viene sottoposto a wrapping in un filtro con pin sink (input) e pin di origine (output). I termini "sink" e "source" non fanno riferimento al filtro, ma piuttosto alla connessione (in genere memorizzata nel buffer) tra due filtri:

  • Il pin di origine del filtro upstream è l'origine del flusso di dati che entra nella connessione.

  • Il flusso di dati esce dalla connessione tramite il pin sink del filtro downstream.

Al contrario, la terminologia della linea mixer è incentrata sui dispositivi:

  • Una linea mixer di origine è l'origine di un flusso che entra nel dispositivo.

  • Una linea mixer di destinazione è la destinazione di un flusso che esce dal dispositivo.

Inoltre, la terminologia KS è leggermente incoerente nella direzione del flusso di flusso assegnata a un pin su un filtro KS. Il descrittore pin usa un valore di enumerazione KSPIN_DATAFLOW per specificare la direzione:

  • Un flusso che immette il filtro attraverso un pin sink ha una direzione di KSPIN_DATAFLOW_IN.

  • Un flusso che esce dal filtro tramite un pin di origine ha una direzione di KSPIN_DATAFLOW_OUT.

Le direzioni "in" e "out" sono chiaramente incentrate sui filtri, mentre i termini "sink" e "origine" sono incentrati sulla connessione.

Per altre informazioni sull'algoritmo di analisi della topologia usato da WDMAud, vedere Analisi della topologia WDMAud.

Questa sezione include anche:

Pin della topologia

Nodi della topologia

SysTray e SndVol32

Esposizione della topologia di filtro