Compartilhar via


GUIDs de tecnologia da música

Um driver de miniporto MIDI ou DMus deve especificar o intervalo de formatos de fluxo que cada um de seus pinos é capaz de manipular. Conforme descrito em Pin Factories, o driver especifica essas informações como uma matriz de um ou mais descritores de intervalo de dados, cada um deles é uma estrutura do tipo KSDATARANGE_MUSIC. O membro De tecnologia dessa estrutura indica que tipo de tecnologia de sintetizador o dispositivo MIDI ou DirectMusic usa. Um driver de miniporta pode definir o membro Technology como um dos valores guid mostrados na tabela a seguir (coluna à esquerda).

GUID de tecnologia KSDATARANGE_MUSIC MIDIOUTCAPS wTechnology Value Significado

KSMUSIC_TECHNOLOGY_PORT

MOD_MIDIPORT

O dispositivo é um dispositivo MPU-401.

KSMUSIC_TECHNOLOGY_SYNTH

MOD_SYNTH

O dispositivo é um sintetizador.

KSMUSIC_TECHNOLOGY_SQSYNTH

MOD_SQSYNTH

O dispositivo é um sintetizador de onda quadrada.

KSMUSIC_TECHNOLOGY_FMSYNTH

MOD_FMSYNTH

O dispositivo é um sintetizador FM.

KSMUSIC_TECHNOLOGY_MAPPER

MOD_MAPPER

O dispositivo é o mapeador midi da Microsoft.

KSMUSIC_TECHNOLOGY_WAVETABLE

MOD_WAVETABLE

O dispositivo é um sintetizador de tabela de ondas de hardware.

KSMUSIC_TECHNOLOGY_SWSYNTH

MOD_SWSYNTH

O dispositivo é um sintetizador de software.

A função midiOutGetDevCaps converte o GUID de tecnologia que recebe do driver para um índice que ele grava no membro wTechnology da estrutura MIDIOUTCAPS que ele gera para o chamador. A tabela anterior mostra o valor wTechnology (coluna central) correspondente a cada GUID de tecnologia. Para obter mais informações sobre midiOutGetDevCaps e MIDIOUTCAPS, consulte a documentação do SDK do Microsoft Windows.

Ao enumerar dispositivos, um aplicativo MIDI que usa o midiOut multimídia do Windows ou a API midiIn pode ver pinos MIDI, mas não pinos DirectMusic. Um aplicativo DirectMusic pode ver os pinos MIDI e DirectMusic. Um driver de miniporta MIDI ou DMus identifica um pino MIDI definindo o GUID do subtipo nos intervalos de dados do pino como KSDATAFORMAT_SUBTYPE_MIDI. Um driver de miniporta DMus identifica um pino DirectMusic definindo o GUID do subtipo como KSDATAFORMAT_SUBTYPE_DIRECTMUSIC. Para obter exemplos de intervalos de dados para pinos MIDI e DirectMusic, consulte Intervalo de dados de fluxo midi e intervalo de dados de fluxo directmusic.

Conforme explicado em FILTROS MIDI e DirectMusic, um driver de adaptador chama a função PcNewMiniport para criar uma instância de um dos drivers de miniporto fornecidos pelo sistema em Portcls.sys. O chamador especifica um dos GUIDs do driver na tabela a seguir para especificar qual driver de miniporto será instanciado.

Driver GUID GUID de tecnologia

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

A coluna direita da tabela anterior indica o GUID de tecnologia que o driver de miniporto correspondente especifica nos intervalos de dados de seus pinos. Por exemplo, o driver de miniporta FmSynth atribui o GUID de tecnologia KSMUSIC_TECHNOLOGY_FMSYNTH a seus pinos.

Alguns dispositivos sintetizadores de tabela de ondas se expõem a aplicativos como dispositivos MPU-401 (com guid de tecnologia KSMUSIC_TECHNOLOGY_PORT). Na ausência de um sintetizador externo, eles são capazes de reproduzir um fluxo de bytes MIDI bruto através do sintetizador de tabela de ondas.

No entanto, a API midiOut prefere dispositivos sintetizadores wavetable (com guid de tecnologia KSMUSIC_TECHNOLOGY_WAVETABLE) ao selecionar o dispositivo de reprodução MIDI padrão (preferencial). Ele evita explicitamente selecionar um dispositivo MPU-401 para ser o dispositivo padrão.

Para se tornar elegível para ser o dispositivo padrão, um dispositivo que pode reproduzir MIDI bruto deve se expor como um dispositivo que permite ondas, não um dispositivo MPU-401. No entanto, se um driver de adaptador estiver usando o driver de miniporta MPU-401 fornecido pelo sistema, DMusUART, para gerenciar seu dispositivo sintetizador de tabela de ondas, esse driver de miniporta atribuirá estaticamente o GUID de tecnologia KSMUSIC_TECHNOLOGY_PORT aos seus pinos.

Ao chamar o método IMusicTechnology::SetTechnology , um driver de adaptador pode substituir os GUIDs de tecnologia em intervalos de dados de um driver de miniporto. No exemplo de código a seguir, um driver de adaptador altera o GUID de tecnologia nos intervalos de dados do driver de miniporto DMusUART de seu valor padrão, KSMUSIC_TECHNOLOGY_PORT, para o valor KSMUSIC_TECHNOLOGY_WAVETABLE. Com essa nova configuração, o dispositivo de tabela de ondas semelhante a MPU está qualificado para ser selecionado pela API midiOut como o dispositivo MIDI padrão.

  // 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);
  }

Conforme indicado no comentário no exemplo de código anterior, o driver do adaptador deve chamar SetTechnology antes de chamar o método do driver de Init porta (que, por sua vez, chama o método do driver de Init miniporto). Os drivers de miniporta DMusUART e UART fornecidos pelo sistema dão suporte à interface IMusicTechnology . Para outros drivers de miniporta, o suporte para IMusicTechnology é opcional. Para obter mais informações, consulte a implementação do método SetTechnology no driver de áudio de exemplo DMusUART no WDK (Microsoft Windows Driver Kit).