Condividi tramite


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).