Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En Windows Vista y versiones posteriores de Windows, AudioEndpointBuilder es un servicio del sistema que enumera, inicializa y activa los puntos de conexión de audio en un sistema. En este tema se proporciona información general sobre el algoritmo que usa el servicio AudioEndpointBuilder.
El servicio AudioEndpointBuilder usa un algoritmo para detectar y enumerar puntos de conexión. El algoritmo se diseñó para simplificar el acceso del sistema a dispositivos de captura multiplexados (MUXed) y para ayudar a trabajar con topologías que implican múltiples patillas host y varios patillas de puente, o ambas.
En Windows XP, el modelo de audio usó el término dispositivo de audio para hacer referencia a un dispositivo conceptual en el árbol Plug and Play (PnP). En Windows Vista y versiones posteriores de Windows, el concepto de un dispositivo de audio se ha rediseñado para representar mejor el dispositivo con el que interactúa físicamente el usuario.
Con dos nuevas API en Windows Vista, MMDevice API y WASAPI, puedes acceder a estos nuevos dispositivos de audio y manipularlos. La API MMDevice hace referencia a los nuevos dispositivos de audio como puntos de conexión.
El servicio AudioEndpointBuilder supervisa la clase KSCATEGORY_AUDIO para las llegadas y eliminaciones de la interfaz de dispositivo. Cuando un controlador de dispositivo de audio registra una nueva instancia de la clase de interfaz de dispositivo KSCATEGORY_AUDIO, el servicio AudioEndpointBuilder detecta la notificación de la interfaz de dispositivo y usa un algoritmo para examinar la topología de los dispositivos de audio en el sistema y realizar las acciones adecuadas.
En la lista siguiente se resume cómo funciona el algoritmo que usa AudioEndpointBuilder:
Busca los pines de puente que no estén conectados.
Crea un punto de conexión para los pines de puente no conectados. Por ejemplo, cuando AudioEndpointBuilder encuentra un pin de puente desconectado con un GUID de categoría de pines KSNODETYPE_SPEAKER, crea un punto de conexión de altavoz para este pin de puente. Para obtener más información sobre KSNODETYPE_SPEAKER y otros GUIDs de categoría de pin, consulte Ksmedia.h en WinDDK\<build number>\inc\api.
Establece las propiedades predeterminadas para el punto de conexión. Por ejemplo, AudioEndpointBuilder establece el nombre, el icono y el factor de forma.
Determina si hay una ruta de acceso desde el punto de conexión a un pin host que admite la modulación de código de pulso (PCM), el códec de audio 3 (AC3) o el vídeo multimedia de Windows (WMV). Un pin del host es una estructura KSPIN con su miembro Communication definido como KSPIN_COMMUNICATION_SINK o KSPIN_COMMUNICATION_BOTH. Para obtener más información sobre la estructura KSPIN, consulte KSPIN.
Rellena el PropertyStore del extremo con la información de propiedades de las Claves del Registro de la interfaz del dispositivo de audio.
Establece el estado del punto de conexión. El estado del punto de conexión puede ser uno de los tres valores siguientes:
Activo. Esto indica que existe una ruta de acceso tal como se describe en el paso 4.
Desenchufado. Si el dispositivo de audio admite la detección de conectores, este estado indica que existe una ruta de acceso para el punto de conexión y el conector físico se desconecta del conector físico en el adaptador de audio.
No está presente. Este estado indica que no se encontró una ruta de acceso en el paso 4 y este punto de conexión no admite la detección de conectores.
Establece este punto de conexión como punto de conexión predeterminado, si es lo que se especifica en el archivo INF asociado.
Una vez enumerados los puntos de conexión, los clientes del sistema de audio pueden manipularlos directamente mediante las nuevas API de Windows Vista (como se indicó anteriormente) o indirectamente mediante las API más conocidas, como Wave, DirectShow o DirectSound. Se han proporcionado nuevos métodos de API para que los clientes de audio puedan empezar con el identificador MMDevice de un punto de conexión y acceder al identificador wave o DirectSound para el mismo punto de conexión.
Al usar puntos de conexión, puede aprovechar las siguientes ventajas:
El mismo identificador único global (GUID) está disponible independientemente de la frecuencia con la que reinicie la máquina. Tener este GUID persistente es más confiable que guardar un ID de waveOut o un nombre alternativo para el punto de conexión.
El mismo PropertyStore está disponible independientemente de la frecuencia con la que reinicie la máquina. Los metadatos relacionados con el dispositivo de audio se guardan en el PropertyStore del punto de conexión.
Los pines multiplexados (MUX) y des multiplexados (DEMUX) se administran automáticamente y se enumeran mediante el servicio AudioEndpointBuilder.
Si desarrolla su propio controlador de dispositivo de audio y archivo INF para trabajar con su dispositivo de audio, y también desarrolla una aplicación de audio, o ambas, es mejor considerar los siguientes problemas y procedimientos recomendados. Al desarrollar controladores y aplicaciones teniendo en cuenta estas recomendaciones, se generan controladores, archivos INF y clientes de audio que funcionan de forma más eficaz con AudioEndpointBuilder.
Convención de nomenclatura. La convención de nomenclatura que se utiliza para los puntos finales se basa en los nombres amigables de los pines de puente. Sin embargo, en el caso de los puntos de conexión del altavoz, el nombre se ha codificado de forma dura en "Altavoces" y no puede modificarse por el controlador o una aplicación de terceros.
Topologías poco óptimas. Algunas topologías se consideran poco óptimas debido al algoritmo que usa AudioEndpointBuilder para enumerar los puntos de conexión. Por ejemplo, cuando se crea una de estas topologías poco óptimas, se crean patillas de host que tienen puntos de conexión ocultos y no se pueden ver mediante AudioEndpointBuilder o divisores (puntos de conexión divididos) que AudioEndpointBuilder no puede vincular a sus patillas de host asociadas.
Puntos de conexión ocultos
En el diagrama siguiente, se muestra que el filtro KS tiene dos pines host que están conectados a un único pin de puente (Speaker).
Cuando AudioEndpointBuilder detecta este pin de puente, realiza un seguimiento de una ruta de acceso a solo uno de los pines host, establece los valores predeterminados para el pin del puente, crea y activa un punto de conexión speaker y continúa detectando otros pines de puente. Por lo tanto, el otro pin de host permanece oculto para el AudioEndpointBuilder.
En el diagrama anterior, la topología problemática se ha rediseñado para que AudioEndpointBuilder pueda detectar los dos pines anfitriones (PCM y AC-3/PCM) porque ahora puede ver dos pines de puente (Altavoz y SPDIF).
Divisores
Se crea otro tipo de topología subóptima cuando un pin host se conecta a más de un pin de puente. En el diagrama siguiente se muestra una topología en la que un pin host de PCM se conecta a un pin puente del altavoz y SPDIF.
En este caso, AudioEndpointBuilder detecta un pin de puente y realiza un seguimiento de una ruta de acceso al pin del host pcM, establece los valores predeterminados y, a continuación, crea y activa un punto de conexión speaker. Cuando AudioEndpointBuilder detecta el siguiente pin de puente, realiza un seguimiento de una ruta de acceso al mismo pin de host pcM, establece los valores predeterminados y, a continuación, crea y activa un punto de conexión SPDIF. Sin embargo, aunque ambos puntos de conexión se han inicializado y activado, el streaming a uno de ellos hace imposible transmitir al otro al mismo tiempo; es decir, son puntos de conexión mutuamente excluyentes.
En el diagrama siguiente se muestra un rediseño de esta topología en la que existen conexiones independientes. Este diseño permite que AudioEndpointBuilder trace un camino de regreso al pin del host PCM para cada uno de los dos pines de puente.
Formato de punto de conexión. Cuando el motor de audio se ejecuta en modo compartido, el formato del punto de conexión asume una configuración específica como se indica en el archivo INF en el momento de la instalación. Por ejemplo, el controlador de audio de un dispositivo de audio usa su archivo INF asociado para establecer el punto de conexión predeterminado en un formato PCM estéreo de 44,1 kHz, de 16 bits. Después de la instalación, debe usar el Panel de control o una aplicación de terceros para cambiar el formato del punto de conexión.
Dispositivo predeterminado. El punto de conexión que se establece como dispositivo predeterminado se selecciona en el momento de la instalación mediante la información del archivo INF. Una vez completada la instalación, debe usar el Panel de control o una aplicación de terceros para seleccionar otro punto de conexión para que sea el punto de conexión predeterminado.
Nota Si el archivo INF no selecciona un punto de conexión que se va a establecer como predeterminado durante la instalación, una aplicación cliente puede usar la API MMDevice para seleccionar un punto de conexión. La API basa su selección en la clasificación del factor de forma y si el endpoint es de renderizado o captura. En la tabla siguiente se muestra el orden de selección.
| Rango de renderizado | Rango de captura |
|---|---|
| Altavoces | Micrófono |
| Salida de línea | Entrada de línea |
| SPDIF | SPDIF |
Si usa la API MMDevice para seleccionar un punto de conexión predeterminado y los puntos de conexión disponibles se clasifican igual, la API MMDevice alfabéticamente los identificadores de punto de conexión para determinar qué punto de conexión seleccionar como predeterminado. Por ejemplo, si un adaptador de audio tiene conectores tanto de salida de línea como de entrada de línea, y el archivo INF asociado no selecciona ninguno como predeterminado en el momento de la instalación, la API MMDevice identifica cuáles identificadores de punto de conexión aparecen primero alfabéticamente y establece ese conector como predeterminado. Esta selección persiste después de reiniciar el sistema porque los identificadores de punto de conexión son persistentes. Sin embargo, la selección no persiste si aparece un punto de conexión de clasificación superior (por ejemplo, un segundo adaptador con un conector de micrófono) en el sistema.