Trasporto MIDI

Il driver di porta DMus è coinvolto sul lato anteriore e posteriore del lavoro sintetizzatore del driver DMus miniport. Il driver di porta inserisce un flusso MIDI costituito da dati MIDI con timestamp e indirizza il flusso al sequencer. Sequencer rimuove i timestamp e passa i messaggi MIDI non elaborati al driver miniport quando i timestamp sono dovuti. I dati DLS passano direttamente attraverso il driver di porta al driver miniport senza pre-elaborazione.

Quando il flusso di input MIDI del driver DMus viene convertito in dati wave, l'output viene gestito dal sink d'onda (detto anche "sink synth" o "sink di rendering").

Il driver di porta DMus implementa un filtro di streaming del kernel con un pin di input che accetta i dati DirectMusic dal componente in modalità utente DirectMusic, dmusic.dll. Il driver di porta ha anche un pin di output wave che genera il flusso audio sintetizzato. Il sink wave gestisce questo pin e indica al synth dove in memoria scrivere i dati. Questa disposizione isola il synth dai dettagli del flusso del kernel. Il driver miniport DMus deve gestire solo i dettagli della sintesi dei dati delle onde dal flusso MIDI di input. Il driver della porta invia i dati d'onda al sistema e il grafico dei filtri di SysAudio connette i filtri per rendere tutto corretto. Come illustrato nel diagramma seguente, i dati MIDI vengono inseriti nel driver di porta DMus e, dopo la sequenziazione, vengono passati al driver miniport DMus.

Diagramma che illustra il flusso dei dati MIDI e DLS tramite il driver PortDMus.

Il driver miniport converte i dati MIDI in formato onda, di cui viene eseguito il rendering in un buffer designato da un'altra parte del driver di porta: il sink d'onda. Quindi, invece di uscire a DirectSound come in modalità utente, l'output dell'onda passa all'hardware audio tramite il driver di sistema KMixer. DirectSound è davvero solo un'API che espone KMixer e l'accelerazione DirectSound è costituita dalle funzioni mixer che vengono accelerate nell'hardware anziché emulate nel software da KMixer.

Il driver di sistema SysAudio, che compila il grafico del filtro audio, connette il driver di porta DMus a un componente hardware. La parte del sink d'onda del driver della porta consente di trasferire i dati attraverso il pin wave-out, che SysAudio può connettersi al dispositivo hardware. Estrae i dati wave dal driver miniport DMus (indipendentemente dal fatto che si tratti di un synth hardware o software) e gestisce tutti i problemi di temporizzazione. Rispetto alla modalità utente, il driver miniport è analogo al synth, mentre il sink d'onda fa solo parte del driver di porta.

Se un driver DMus miniport può restituire l'output all'host, espone un pin d'onda con una direzione dati di KSPIN_DATAFLOW_OUT (vedere KSPIN), che SysAudio riconosce e si connette a KMixer.

Per altre informazioni sul sink d'onda, vedere Un sink wave per Kernel-Mode sintetizzatori software.

Questa sezione include anche:

Interfacce IMXF

Allocatore