GUID della tecnologia musicale
Un driver miniport MIDI o DMus deve specificare l'intervallo di formati di flusso che ognuno dei suoi pin è in grado di gestire. Come descritto in Pin Factory, il driver specifica queste informazioni come matrice di uno o più descrittori dell'intervallo di dati, ognuno dei quali è una struttura di tipo KSDATARANGE_MUSIC. Il membro Technology di questa struttura indica il tipo di tecnologia del sintetizzatore usato dal dispositivo MIDI o DirectMusic. Un driver miniport può impostare il membro Technology su uno dei valori GUID visualizzati nella tabella seguente (colonna sinistra).
GUID della tecnologia KSDATARANGE_MUSIC | Valore di MIDIOUTCAPS wTechnology | Significato |
---|---|---|
KSMUSIC_TECHNOLOGY_PORT |
MOD_MIDIPORT |
Il dispositivo è un dispositivo MPU-401. |
KSMUSIC_TECHNOLOGY_SYNTH |
MOD_SYNTH |
Il dispositivo è un sintetizzatore. |
KSMUSIC_TECHNOLOGY_SQSYNTH |
MOD_SQSYNTH |
Il dispositivo è un sintetizzatore a onda quadrata. |
KSMUSIC_TECHNOLOGY_FMSYNTH |
MOD_FMSYNTH |
Il dispositivo è un sintetizzatore FM. |
KSMUSIC_TECHNOLOGY_MAPPER |
MOD_MAPPER |
Il dispositivo è il mapper MIDI Microsoft. |
KSMUSIC_TECHNOLOGY_WAVETABLE |
MOD_WAVETABLE |
Il dispositivo è un sintetizzatore wavetable hardware. |
KSMUSIC_TECHNOLOGY_SWSYNTH |
MOD_SWSYNTH |
Il dispositivo è un sintetizzatore software. |
La funzione midiOutGetDevCaps converte il GUID tecnologico che riceve dal driver a un indice che scrive nel membro wTechnology della struttura MIDIOUTCAPS che restituisce al chiamante. La tabella precedente mostra il valore wTechnology (colonna centrale) corrispondente a ogni GUID tecnologico. Per altre informazioni su midiOutGetDevCaps e MIDIOUTCAPS, vedere la documentazione di Microsoft Windows SDK.
Durante l'enumerazione dei dispositivi, un'applicazione MIDI che usa l'API midiOut o midiIn di Windows può visualizzare i pin MIDI, ma non i pin DirectMusic. Un'applicazione DirectMusic può visualizzare sia pin MIDI che DirectMusic. Un driver miniport MIDI o DMus identifica un pin MIDI impostando il GUID sottotipo negli intervalli di dati del pin su KSDATAFORMAT_SUBTYPE_MIDI. Un driver miniport DMus identifica un pin DirectMusic impostando il GUID sottotipo su KSDATAFORMAT_SUBTYPE_DIRECTMUSIC. Per esempi di intervalli di dati per pin MIDI e DirectMusic, vedere Intervallo di dati di flusso MIDI e Intervallo di dati di flusso DirectMusic.
Come spiegato in MIDI e DirectMusic Filters, un driver di adattatore chiama la funzione PcNewMiniport per creare un'istanza di uno dei driver miniport forniti dal sistema in Portcls.sys. Il chiamante specifica uno dei GUID del driver nella tabella seguente per specificare quale driver miniport creare un'istanza.
Driver GUID | GUID tecnologico |
---|---|
CLSID_MiniportDriverDMusUART |
KSMUSIC_TECHNOLOGY_PORT |
CLSID_MiniportDriverDMusUARTCapture |
KSMUSIC_TECHNOLOGY_PORT |
CLSID_MiniportDriverFmSynth |
KSMUSIC_TECHNOLOGY_FMSYNTH |
CLSID_MiniportDriverFmSynthWithVol |
KSMUSIC_TECHNOLOGY_FMSYNTH |
CLSID_MiniportDriverUart |
KSMUSIC_TECHNOLOGY_PORT |
La colonna destra della tabella precedente indica il GUID tecnologico specificato dal driver miniport corrispondente negli intervalli di dati dei pin. Ad esempio, il driver miniport FmSynth assegna il GUID tecnologico KSMUSIC_TECHNOLOGY_FMSYNTH ai suoi pin.
Alcuni dispositivi di sintetizzatore wavetable si espongono alle applicazioni come dispositivi MPU-401 (con GUID tecnologico KSMUSIC_TECHNOLOGY_PORT). In assenza di un sintetizzatore esterno, sono in grado di riprodurre un flusso di byte MIDI non elaborato attraverso il sintetizzatore wavetable.
Tuttavia, l'API midiOut preferisce dispositivi di sintetizzatore wavetable (con GUID tecnologico KSMUSIC_TECHNOLOGY_WAVETABLE) quando si seleziona il dispositivo di riproduzione MIDI predefinito (preferito). Evita in modo esplicito di selezionare un dispositivo MPU-401 per essere il dispositivo predefinito.
Per essere idoneo a essere il dispositivo predefinito, un dispositivo wavetable che può riprodurre MIDI non elaborato deve essere esposto come dispositivo wavetable, non come dispositivo MPU-401. Tuttavia, se un driver di adattatore usa il driver MPU-401 fornito dal sistema, DMusUART, per gestire il dispositivo sintetizzatore wavetable, che il driver miniport assegna staticamente il GUID tecnologico KSMUSIC_TECHNOLOGY_PORT ai suoi pin.
Chiamando il metodo IMusicTechnology::SetTechnology , un driver di adattatore può sovrascrivere i GUID tecnologici in intervalli di dati di un driver miniport. Nell'esempio di codice seguente un driver di adattatore modifica il GUID tecnologico negli intervalli di dati del driver miniport DMusUART, dal relativo valore predefinito, KSMUSIC_TECHNOLOGY_PORT, al valore KSMUSIC_TECHNOLOGY_WAVETABLE. Con questa nuova impostazione, il dispositivo MPU-like wavetable è idoneo per essere selezionato dall'API midiOut come dispositivo MIDI predefinito.
// Create the miniport object.
PUNKNOWN miniport;
ntStatus = PcNewMiniport((PMINIPORT*)&miniport, CLSID_MiniportDriverDMusUART);
// Query the miniport driver for the IMusicTechnology interface.
IMusicTechnology* pMusicTechnology;
if (NT_SUCCESS(ntStatus))
{
ntStatus = miniport->QueryInterface(IID_IMusicTechnology, (PVOID*)&pMusicTechnology);
}
// Set the Technology members in the DirectMusic data-range entries
// for all the pins that are exposed by this miniport.
// SetTechnology should be called before initializing the miniport.
if (NT_SUCCESS(ntStatus))
{
ntStatus = pMusicTechnology->SetTechnology(&KSMUSIC_TECHNOLOGY_WAVETABLE);
}
Come indicato nel commento nell'esempio di codice precedente, il driver dell'adattatore Init
deve chiamare SetTechnology prima di chiamare il metodo del driver di porta (che, a sua volta, chiama il metodo del Init
driver miniport). I driver miniport DMusUART e UART forniti dal sistema supportano entrambe l'interfaccia IMusicTechnology . Per altri driver miniport, il supporto per IMusicTechnology è facoltativo. Per altre informazioni, vedere l'implementazione del metodo SetTechnology nel driver audio di esempio DMusUART in Microsoft Windows Driver Kit (WDK).