Partager via


Installation d’interfaces d’appareil pour un adaptateur audio

Un client accède à un périphérique audio via un ensemble d’interfaces d’appareil qu’un fournisseur spécifie dans le fichier INF de l’adaptateur. Les interfaces de périphérique spécifiées dans le fichier INF ont une correspondance un-à-un avec les sous-appareils que le pilote de l’adaptateur crée lorsqu’il initialise l’appareil (voir Création d’un sous-appareil). Pour chaque interface d’appareil, le fichier INF spécifie une valeur d’entrée FriendlyName , accessible en mode utilisateur, sous la clé de Registre de l’interface.

Dans l’architecture de diffusion en continu du noyau, les catégories de topologie (voir KSPROPERTY_TOPOLOGY_CATEGORIES) représentent les classes d’interface d’appareil.

Le tableau suivant répertorie les catégories de topologies que les cartes audio sont les plus susceptibles d’utiliser pour décrire les fonctionnalités de leurs sous-appareils.

Category Description
KSCATEGORY_ACOUSTIC_ECHO_CANCEL Un appareil audio capable d’effectuer une annulation d’écho acoustique (voir Effets de capture DirectSound) s’inscrit dans cette catégorie.
KSCATEGORY_AUDIO Tous les périphériques audio s’inscrivent dans cette catégorie.
KSCATEGORY_CAPTURE Un périphérique audio qui peut capturer un flux de données s’inscrit lui-même dans cette catégorie.
KSCATEGORY_DATATRANSFORM Un périphérique audio qui effectue une transformation de données sur un flux s’inscrit lui-même dans cette catégorie.
KSCATEGORY_MIXER Un périphérique audio capable de mélanger des flux de données s’inscrit lui-même dans cette catégorie.
KSCATEGORY_RENDER Un périphérique audio qui peut restituer un flux de données s’inscrit lui-même dans cette catégorie.
KSCATEGORY_SYNTHESIZER Un périphérique audio qui peut convertir des messages MIDI en échantillons audio d’ondes ou en signal de sortie analogique s’inscrit dans cette catégorie (voir Synthétiseurs et récepteurs d’ondes).
KSCATEGORY_TOPOLOGY Le pilote de miniport de topologie d’un appareil s’inscrit lui-même dans cette catégorie.
KSCATEGORY_DRM_DESCRAMBLE Un périphérique audio capable de démêler un flux d’ondes protégé par DRM s’inscrit dans cette catégorie (voir Digital Rights Management).

Pour obtenir la liste complète des catégories de topologie, consultez les GUID KSCATEGORY_XXX définis dans les fichiers d’en-tête Ks.h et Ksmedia.h.

Tous les périphériques audio sont classés sous KSCATEGORY_AUDIO, mais un périphérique audio peut également être classé dans des catégories supplémentaires telles que KSCATEGORY_RENDER (pour un périphérique de rendu audio) ou KSCATEGORY_SYNTHESIZER (pour un synthétiseur). Pour chaque catégorie spécifiée par le fichier INF pour un appareil, Windows Installer génère un ensemble d’entrées de Registre pour cet appareil sous le nom de catégorie (voir Fabriques de filtres).

Seul un appareil qui contient un synthétiseur intégré doit s’inscrire sous la catégorie KSCATEGORY_SYNTHESIZER. Notez que cette catégorie exclut un appareil MPU-401 pur. Un appareil MPU-401 pur, qui peut générer ou entrer un midi brut vers ou depuis un UART, doit s’inscrire dans les catégories suivantes :

  • KSCATEGORY_AUDIO

  • KSCATEGORY_RENDER

  • KSCATEGORY_CAPTURE

Notez que le pilote système SysAudio réserve la catégorie de Registre KSCATEGORY_AUDIO_DEVICE exclusivement pour ses périphériques audio virtuels. Les pilotes d’adaptateur ne doivent pas s’inscrire eux-mêmes dans cette catégorie.

L’exemple suivant installe quatre interfaces d’appareil définies par le système courantes qu’un adaptateur prend généralement en charge pour un périphérique audio.

Exemple : installation d’interfaces de périphérique audio

Dans cet exemple, la section device-install de l’appareil XYZ Audio Device utilise la directive INF AddInterface pour installer quatre interfaces d’adaptateur audio. Dans ce qui suit, chacune des quatre directives attribue une chaîne de référence unique à une interface, que le pilote de l’adaptateur peut utiliser pour distinguer les instances de chaque classe d’interface.

  [XYZ-Audio-Device.Interfaces]
  AddInterface=%KSCATEGORY_AUDIO%,%KSName_Wave%,XYZ-Audio-Device.Wave
  AddInterface=%KSCATEGORY_RENDER%,%KSName_Wave%,XYZ-Audio-Device.Wave
  AddInterface=%KSCATEGORY_CAPTURE%,%KSName_Wave%,XYZ-Audio-Device.Wave
  AddInterface=%KSCATEGORY_TOPOLOGY%,%KSName_Topology%,XYZ-Audio-Device.Topology

Les trois premières directives AddInterface spécifient une section d’interface complémentaire nommée XYZ-Audio-Device.Wave. La dernière spécifie une section add-interface nommée XYZ-Audio-Device.Topology. Chaque section de l’interface complémentaire ajoute les entrées de Registre suivantes à une sous-clé d’interface d’appareil, accessible en mode utilisateur sous la clé de Registre \DeviceClasses\<InterfaceGUID> :

  • Une entrée de Registre FriendlyName spécifie un nom convivial pour chaque interface d’appareil.

  • Microsoft DirectShow nécessite une entrée de Registre CLSID, définie sur une valeur GUID de proxy, qui indique que l’adaptateur est accessible et contrôlé par le pilote système KSProxy.

Les deux sections add-interface apparaissent dans l’exemple suivant, qui contient des entrées de fichier INF qui ajoutent le FriendlyName et le CLSID de chaque interface au Registre :

  [XYZ-Audio-Device.Wave]
  AddReg=XYZ-Audio-Device.Wave.AddReg
  [XYZ-Audio-Device.Wave.AddReg]
  HKR,,FriendlyName,,%WaveDeviceName%
  HKR,,CLSID,,%Proxy.CLSID%

  [XYZ-Audio-Device.Topology]
  AddReg=XYZ-Audio-Device.Topology.AddReg
  [XYZ-Audio-Device.Topology.AddReg]
  HKR,,FriendlyName,,%WaveDeviceMixerName%
  HKR,,CLSID,,%Proxy.CLSID%

Le mot clé HKR dans cet exemple indique le chemin du Registre fourni par le système pour l’appareil. Pour plus d’informations, consultez Directive INF AddReg.

Voici la section Chaînes de cet exemple.

  [Strings]
  KSCATEGORY_AUDIO="{6994AD04-93EF-11D0-A3CC-00A0C9223196}"
  KSCATEGORY_RENDER="{65E8773E-8F56-11D0-A3B9-00A0C9223196}"
  KSCATEGORY_CAPTURE="{65E8773D-8F56-11D0-A3B9-00A0C9223196}"
  KSCATEGORY_TOPOLOGY="{DDA54A40-1E4C-11D1-A050-405705C10000}"
  Proxy.CLSID="{17CCA71B-ECD7-11D0-B908-00A0C9223196}"
  WaveDeviceName="XYZ Audio Device"
  WaveDeviceMixerName="XYZ Audio Device Super Mixer"

Le nom de chaîne spécifié par une directive AddInterface pour une interface de périphérique KSCATEGORY_XXX ne peut pas être localisé, car le pilote de l’adaptateur utilise le même nom en interne qu’une constante de chaîne. Les exemples de pilotes d’adaptateur dans le Kit de pilotes Windows (WDK) utilisent les noms de chaîne suivants pour leurs interfaces de périphérique audio :

  KSNAME_Wave="Wave"
  KSNAME_UART="UART"
  KSNAME_FMSynth="FMSynth"
  KSNAME_Topology="Topology"
  KSNAME_Wavetable="Wavetable"
  KSNAME_DMusic="DMusic"

Par souci d’uniformité, votre pilote propriétaire doit attribuer ces mêmes noms à ses interfaces de périphérique correspondantes. Si votre pilote prend en charge d’autres interfaces de périphérique propriétaires, vous pouvez inventer vos propres noms propriétaires pour ces interfaces. Assurez-vous que les noms utilisés par le pilote correspondent à ceux de votre fichier INF. Si les chaînes ne correspondent pas, le programme d’installation du système ne charge pas le pilote.