Partager via


GUID de technologie musicale

Un pilote miniport MIDI ou DMus doit spécifier la plage de formats de flux que chacune de ses broches est capable de gérer. Comme décrit dans Fabriques d’épingles, le pilote spécifie ces informations sous la forme d’un tableau d’un ou plusieurs descripteurs de plage de données, chacun d’eux étant une structure de type KSDATARANGE_MUSIC. Le membre Technology de cette structure indique le type de technologie de synthétiseur utilisé par l’appareil MIDI ou DirectMusic. Un pilote miniport peut définir le membre Technology sur l’une des valeurs GUID indiquées dans le tableau suivant (colonne de gauche).

GUID de la technologie KSDATARANGE_MUSIC Valeur wTechnology MIDIOUTCAPS Signification

KSMUSIC_TECHNOLOGY_PORT

MOD_MIDIPORT

L’appareil est un appareil MPU-401.

KSMUSIC_TECHNOLOGY_SYNTH

MOD_SYNTH

L’appareil est un synthétiseur.

KSMUSIC_TECHNOLOGY_SQSYNTH

MOD_SQSYNTH

L’appareil est un synthétiseur à ondes carrées.

KSMUSIC_TECHNOLOGY_FMSYNTH

MOD_FMSYNTH

L’appareil est un synthétiseur FM.

KSMUSIC_TECHNOLOGY_MAPPER

MOD_MAPPER

L’appareil est le mappeur Microsoft MIDI.

KSMUSIC_TECHNOLOGY_WAVETABLE

MOD_WAVETABLE

L’appareil est un synthétiseur matériel pouvant être onduler.

KSMUSIC_TECHNOLOGY_SWSYNTH

MOD_SWSYNTH

L’appareil est un synthétiseur logiciel.

La fonction midiOutGetDevCaps traduit le GUID de la technologie qu’elle reçoit du pilote en un index qu’elle écrit dans le membre wTechnology de la structure MIDIOUTCAPS qu’elle génère à l’appelant. Le tableau précédent montre la valeur wTechnology (colonne centrale) correspondant à chaque GUID de technologie. Pour plus d’informations sur midiOutGetDevCaps et MIDIOUTCAPS, consultez la documentation Microsoft Windows SDK.

Lors de l’énumération d’appareils, une application MIDI qui utilise l’API midiOut multimédia windows ou midiIn peut voir les broches MIDI, mais pas les broches DirectMusic. Une application DirectMusic peut voir les broches MIDI et DirectMusic. Un pilote miniport MIDI ou DMus identifie une broche MIDI en définissant le GUID du sous-type dans les plages de données de la broche sur KSDATAFORMAT_SUBTYPE_MIDI. Un pilote de miniport DMus identifie une broche DirectMusic en définissant le GUID de sous-type sur KSDATAFORMAT_SUBTYPE_DIRECTMUSIC. Pour obtenir des exemples de plages de données pour les broches MIDI et DirectMusic, consultez Plage de données de flux MIDI et Plage de données de flux DirectMusic.

Comme expliqué dans les filtres MIDI et DirectMusic, un pilote d’adaptateur appelle la fonction PcNewMiniport pour créer une instance de l’un des pilotes miniport fournis par le système dans Portcls.sys. L’appelant spécifie l’un des GUID de pilote dans le tableau suivant pour spécifier le pilote miniport à instancier.

GUID du pilote GUID de la technologie

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 colonne de droite du tableau précédent indique le GUID de technologie que le pilote de miniport correspondant spécifie dans les plages de données de ses broches. Par exemple, le pilote miniport FmSynth affecte le GUID de la technologie KSMUSIC_TECHNOLOGY_FMSYNTH à ses broches.

Certains appareils de synthétiseur à ondes s’exposent aux applications en tant qu’appareils MPU-401 (avec le GUID de technologie KSMUSIC_TECHNOLOGY_PORT). En l’absence d’un synthétiseur externe, ils sont en mesure de lire un flux d’octets MIDI brut via le synthétiseur pouvant être onduler.

Toutefois, l’API midiOut préfère les appareils de synthétiseur pouvant être ondulants (avec un GUID de technologie KSMUSIC_TECHNOLOGY_WAVETABLE) lors de la sélection du périphérique de lecture MIDI par défaut (préféré). Il évite explicitement de sélectionner un appareil MPU-401 comme appareil par défaut.

Pour qu’il soit éligible à être l’appareil par défaut, un appareil pouvant faire l’objet d’une onde qui peut lire le MIDI brut doit s’exposer en tant qu’appareil pouvant être onduler, et non en tant qu’appareil MPU-401. Toutefois, si un pilote d’adaptateur utilise le pilote miniport MPU-401 fourni par le système, DMusUART, pour gérer son périphérique de synthétiseur à ondes, ce pilote miniport affecte statiquement le GUID de technologie KSMUSIC_TECHNOLOGY_PORT à ses broches.

En appelant la méthode IMusicTechnology::SetTechnology , un pilote d’adaptateur peut remplacer les GUID de technologie dans les plages de données d’un pilote miniport. Dans l’exemple de code suivant, un pilote d’adaptateur modifie le GUID de la technologie dans les plages de données du pilote miniport DMusUART de sa valeur par défaut, KSMUSIC_TECHNOLOGY_PORT, à la valeur KSMUSIC_TECHNOLOGY_WAVETABLE. Avec ce nouveau paramètre, l’appareil à ondes de type MPU peut être sélectionné par l’API midiOut comme appareil MIDI par défaut.

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

Comme indiqué dans le commentaire de l’exemple de code précédent, le pilote de l’adaptateur doit appeler SetTechnology avant d’appeler la méthode du pilote de Init port (qui, à son tour, appelle la méthode du Init pilote miniport). Les pilotes DMusUART et UART miniport fournis par le système prennent tous deux en charge l’interface IMusicTechnology . Pour les autres pilotes miniport, la prise en charge d’IMusicTechnology est facultative. Pour plus d’informations, consultez l’implémentation de la méthode SetTechnology dans l’exemple de pilote audio DMusUART dans le Kit de pilotes Microsoft Windows (WDK).