GUID de tecnología de música
Un controlador de miniporte MIDI o DMus debe especificar el intervalo de formatos de secuencia que cada uno de sus pines es capaz de manejar. Como se describe en Pin Factorys, el controlador especifica esta información como una matriz de uno o varios descriptores de intervalo de datos, cada uno de los cuales es una estructura de tipo KSDATARANGE_MUSIC. El miembro Technology de esta estructura indica qué tipo de tecnología de sintetizador utiliza el dispositivo MIDI o DirectMusic. Un controlador de minipuerto puede establecer el miembro Technology en uno de los valores GUID que se muestran en la tabla siguiente (columna izquierda).
GUID de la tecnología de KSDATARANGE_MUSIC | Valor de MIDIOUTCAPS wTechnology | Significado |
---|---|---|
KSMUSIC_TECHNOLOGY_PORT |
MOD_MIDIPORT |
El dispositivo es un dispositivo MPU-401. |
KSMUSIC_TECHNOLOGY_SYNTH |
MOD_SYNTH |
El dispositivo es un sintetizador. |
KSMUSIC_TECHNOLOGY_SQSYNTH |
MOD_SQSYNTH |
El dispositivo es un sintetizador de onda cuadrada. |
KSMUSIC_TECHNOLOGY_FMSYNTH |
MOD_FMSYNTH |
El dispositivo es un sintetizador FM. |
KSMUSIC_TECHNOLOGY_MAPPER |
MOD_MAPPER |
El dispositivo es el asignador MIDI de Microsoft. |
KSMUSIC_TECHNOLOGY_WAVETABLE |
MOD_WAVETABLE |
El dispositivo es un sintetizador de tabla de onda de hardware. |
KSMUSIC_TECHNOLOGY_SWSYNTH |
MOD_SWSYNTH |
El dispositivo es un sintetizador de software. |
La función midiOutGetDevCaps traduce el GUID de tecnología que recibe del controlador a un índice que escribe en el miembro wTechnology de la estructura MIDIOUTCAPS que genera al autor de la llamada. En la tabla anterior se muestra el valor wTechnology (columna central) correspondiente a cada GUID de tecnología. Para obtener más información sobre midiOutGetDevCaps y MIDIOUTCAPS, consulte la documentación de Microsoft Windows SDK.
Al enumerar dispositivos, una aplicación MIDI que usa la API midiOut o midiIn multimedia de Windows puede ver patillas MIDI, pero no pins de DirectMusic. Una aplicación DirectMusic puede ver patillas MIDI y DirectMusic. Un controlador de miniporte MIDI o DMus identifica un pin MIDI estableciendo el GUID de subtipo en los intervalos de datos del pin en KSDATAFORMAT_SUBTYPE_MIDI. Un controlador de miniporte DMus identifica un pin de DirectMusic estableciendo el GUID del subtipo en KSDATAFORMAT_SUBTYPE_DIRECTMUSIC. Para obtener ejemplos de rangos de datos para pins MIDI y DirectMusic, consulta MIDI Stream Data Range y DirectMusic Stream Data Range.
Como se explica en Midi y DirectMusic Filters, un controlador de adaptador llama a la función PcNewMiniport para crear una instancia de uno de los controladores de miniporte suministrados por el sistema en Portcls.sys. El autor de la llamada especifica uno de los GUID del controlador de la tabla siguiente para especificar qué controlador de miniporte crear una instancia.
GUID del controlador | GUID de tecnología |
---|---|
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 columna derecha de la tabla anterior indica el GUID de tecnología que el controlador de miniporte correspondiente especifica en los intervalos de datos de sus patillas. Por ejemplo, el controlador de miniporte FmSynth asigna el GUID de tecnología KSMUSIC_TECHNOLOGY_FMSYNTH a sus patillas.
Algunos dispositivos sintetizadores de onda se exponen a las aplicaciones como dispositivos MPU-401 (con GUID de tecnología KSMUSIC_TECHNOLOGY_PORT). En ausencia de un sintetizador externo, pueden reproducir una secuencia de bytes MIDI sin formato a través del sintetizador de la tabla de onda.
Sin embargo, la API midiOut prefiere dispositivos sintetizadores de onda (con GUID de tecnología KSMUSIC_TECHNOLOGY_WAVETABLE) al seleccionar el dispositivo de reproducción MIDI predeterminado (preferido). Evita explícitamente seleccionar un dispositivo MPU-401 para que sea el dispositivo predeterminado.
Para que sea apto para ser el dispositivo predeterminado, un dispositivo con tabla de onda que pueda reproducir MIDI sin formato debe exponerse como un dispositivo que se puede onda, no como un dispositivo MPU-401. Sin embargo, si un controlador de adaptador usa el controlador de miniportE MPU-401 suministrado por el sistema, DMusUART, para administrar su dispositivo sintetizador de onda, ese controlador de miniporte asigna estáticamente el GUID de tecnología KSMUSIC_TECHNOLOGY_PORT a sus patillas.
Al llamar al método IMusicTechnology::SetTechnology , un controlador de adaptador puede sobrescribir los GUID de tecnología en intervalos de datos de un controlador de minipuerto. En el ejemplo de código siguiente, un controlador de adaptador cambia el GUID de tecnología en los intervalos de datos del controlador de miniporte DMusUART desde su valor predeterminado, KSMUSIC_TECHNOLOGY_PORT, al valor KSMUSIC_TECHNOLOGY_WAVETABLE. Con esta nueva configuración, el dispositivo de tabla de onda similar a MPU puede seleccionarse mediante la API midiOut como dispositivo MIDI predeterminado.
// 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);
}
Como se indica en el comentario del ejemplo de código anterior, el controlador del adaptador debe llamar a SetTechnology antes de llamar al método del Init
controlador de puerto (que, a su vez, llama al método del Init
controlador de miniport). Los controladores de miniporte DMusUART y UART suministrados por el sistema admiten la interfaz IMusicTechnology . Para otros controladores de minipuerto, la compatibilidad con IMusicTechnology es opcional. Para obtener más información, vea la implementación del método SetTechnology en el controlador de audio de ejemplo DMusUART en el Kit de controladores de Microsoft Windows (WDK).