Instalación de interfaces de dispositivo para un adaptador de audio
Un cliente accede a un dispositivo de audio a través de un conjunto de interfaces de dispositivo que un proveedor especifica en el archivo INF del adaptador. Las interfaces de dispositivo especificadas en el archivo INF tienen una correspondencia uno a uno con los subdispositivos que crea el controlador del adaptador cuando inicializa el dispositivo (consulte Creación de subdispositivos). Para cada interfaz de dispositivo, el archivo INF especifica un valor de entrada FriendlyName , al que se puede acceder en modo de usuario, en la clave del Registro de la interfaz.
En la arquitectura de streaming de kernel, las categorías de topología (consulte KSPROPERTY_TOPOLOGY_CATEGORIES) representan clases de interfaz de dispositivo.
En la tabla siguiente se enumeran las categorías de topología que es más probable que los adaptadores de audio usen para describir las funcionalidades de sus subdispositivos.
Category | Descripción |
---|---|
KSCATEGORY_ACOUSTIC_ECHO_CANCEL | Un dispositivo de audio que puede realizar la cancelación acústica de eco (consulta DirectSound Capture Effects) se registra en esta categoría. |
KSCATEGORY_AUDIO | Todos los dispositivos de audio se registran en esta categoría. |
KSCATEGORY_CAPTURE | Un dispositivo de audio que puede capturar un flujo de datos se registra en esta categoría. |
KSCATEGORY_DATATRANSFORM | Un dispositivo de audio que realiza una transformación de datos en una secuencia se registra en esta categoría. |
KSCATEGORY_MIXER | Un dispositivo de audio que puede mezclar secuencias de datos se registra en esta categoría. |
KSCATEGORY_RENDER | Un dispositivo de audio que puede representar un flujo de datos se registra en esta categoría. |
KSCATEGORY_SYNTHESIZER | Un dispositivo de audio que puede convertir mensajes MIDI en muestras de audio de onda o una señal de salida analógica se registra en esta categoría (consulta Sintetizadores y receptores de onda). |
KSCATEGORY_TOPOLOGY | El controlador de miniporte topología de un dispositivo se registra en esta categoría. |
KSCATEGORY_DRM_DESCRAMBLE | Un dispositivo de audio que puede anular la ordenación de un flujo de onda protegido por DRM se registra en esta categoría (consulte Digital Rights Management). |
Para obtener una lista completa de las categorías de topología, vea los GUID de KSCATEGORY_XXX definidos en los archivos de encabezado Ks.h y Ksmedia.h.
Todos los dispositivos de audio se clasifican en KSCATEGORY_AUDIO, pero un dispositivo de audio también se puede clasificar en categorías adicionales, como KSCATEGORY_RENDER (para un dispositivo de representación de audio) o KSCATEGORY_SYNTHESIZER (para un sintetizador). Para cada categoría que el archivo INF especifica para un dispositivo, Windows Installer crea un conjunto de entradas del Registro para ese dispositivo con el nombre de categoría (consulta Generadores de filtros).
Solo un dispositivo que contenga un sintetizador integrado debe registrarse en la categoría KSCATEGORY_SYNTHESIZER. Tenga en cuenta que esta categoría excluye un dispositivo MPU-401 puro. Un dispositivo MPU-401 puro, que puede generar o introducir MIDI sin procesar hacia o desde un UART, debe registrarse en estas categorías:
KSCATEGORY_AUDIO
KSCATEGORY_RENDER
KSCATEGORY_CAPTURE
Tenga en cuenta que el controlador del sistema SysAudio reserva la categoría del Registro KSCATEGORY_AUDIO_DEVICE exclusivamente para sus dispositivos de audio virtual. Los controladores de adaptador no deben registrarse en esta categoría.
En el ejemplo siguiente se instalan cuatro interfaces de dispositivo comunes definidas por el sistema que normalmente admite un adaptador para un dispositivo de audio.
Ejemplo: Instalación de interfaces de dispositivo de audio
En este ejemplo, la sección device-install del dispositivo de audio XYZ usa la directiva INF AddInterface para instalar cuatro interfaces de adaptador de audio. A continuación, cada una de las cuatro directivas asigna una cadena de referencia única a una interfaz, que el controlador del adaptador puede usar para distinguir entre instancias de cada clase de interfaz.
[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
Las tres primeras directivas AddInterface especifican una sección add-interface denominada XYZ-Audio-Device.Wave. La última especifica una sección add-interface denominada XYZ-Audio-Device.Topology. Cada sección add-interface agrega las siguientes entradas del Registro a una subclave de interfaz de dispositivo, a la que se puede acceder en modo de usuario en la clave del Registro \DeviceClasses\<InterfaceGUID> :
Una entrada del Registro FriendlyName especifica un nombre descriptivo para cada interfaz de dispositivo.
Microsoft DirectShow requiere una entrada del Registro CLSID, establecida en un valor GUID de proxy, que indica que el controlador del sistema KSProxy puede acceder al adaptador y controlarlo.
Las dos secciones de la interfaz de complemento aparecen en el ejemplo siguiente, que contiene entradas de archivo INF que agregan friendlyName y CLSID de cada interfaz al registro:
[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%
La palabra clave HKR de este ejemplo denota la ruta de acceso del Registro proporcionada por el sistema para el dispositivo. Para obtener más información, vea Inf AddReg Directive.
A continuación se muestra la sección Cadenas de este ejemplo.
[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"
El nombre de cadena que especifica una directiva AddInterface para una interfaz de dispositivo KSCATEGORY_XXX no se puede localizar porque el controlador del adaptador usa el mismo nombre internamente como una constante de cadena. Los controladores de adaptador de ejemplo del Kit de controladores de Windows (WDK) usan los siguientes nombres de cadena para sus interfaces de dispositivo de audio:
KSNAME_Wave="Wave"
KSNAME_UART="UART"
KSNAME_FMSynth="FMSynth"
KSNAME_Topology="Topology"
KSNAME_Wavetable="Wavetable"
KSNAME_DMusic="DMusic"
Por motivos de uniformidad, el controlador propietario debe asignar estos mismos nombres a sus interfaces de dispositivo correspondientes. Si el controlador admite interfaces de dispositivo adicionales que son propietarias, puede inventar sus propios nombres propietarios para estas interfaces. Asegúrese de que los nombres que usa el controlador coinciden con los del archivo INF. Si las cadenas no coinciden, la configuración del sistema no cargará el controlador.