Algoritmo del Generador de puntos de conexión de audio

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 varios patillas host y varios pines de puente, o ambos.

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:

  1. Busca los pines de puente no conectados.

  2. Crea un punto de conexión para las patillas de puente no conectadas. Por ejemplo, cuando AudioEndpointBuilder encuentra un pin de puente no conectado con un GUID de categoría de anclaje de 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 GUID de categoría de anclaje, vea Ksmedia.h en WinDDK\<build number>\inc\api.

  3. Establece las propiedades predeterminadas para el punto de conexión. Por ejemplo, AudioEndpointBuilder establece el nombre, el icono y el factor de forma.

  4. Determina si hay una ruta de acceso desde el punto de conexión a un pin host que admite modulación de código de pulso (PCM), códec de audio 3 (AC3) o vídeo multimedia de Windows (WMV). Un pin de host es una estructura KSPIN con su miembro communication establecido en KSPIN_COMMUNICATION_SINK o KSPIN_COMMUNICATION_BOTH. Para obtener más información sobre la estructura KSPIN, consulte KSPIN.

  5. Rellena el propertyStore del punto de conexión con la información de propiedad de las claves del Registro de la interfaz del dispositivo de audio.

  6. Establece el estado del punto de conexión. El estado del punto de conexión puede ser uno de los tres valores siguientes:

    • activa. Esto indica que existe una ruta de acceso como se describe en el paso 4.

    • Desenchufado. Si el dispositivo de audio admite la detección de tomas, este estado indica que existe una ruta de acceso para el punto de conexión y la toma 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 tomas.

  7. Establece este punto de conexión como el 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 el uso de 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 identificador waveOut o un nombre descriptivo 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.

  • Las patillas multiplexadas (MUX) y des multiplexadas (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 el dispositivo de audio y desarrolla una aplicación de audio, o ambos, es mejor tener en cuenta 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 usa para los puntos de conexión se basa en los nombres descriptivos de los pines de puente. Sin embargo, en el caso de los puntos de conexión del hablante, el nombre se ha codificado de forma rígida en "Altavoces" y no se puede modificar mediante 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 patillas host que están conectadas a un único pin de puente (Altavoz).

      Diagrama que muestra la topología problemática con el pin de host AC-3 y el punto de conexión oculto en el lado izquierdo, PCM individual y filtro único de uso compartido ac-3.

      Cuando AudioEndpointBuilder detecta este pin de puente, realiza un seguimiento de una ruta de acceso solo a uno de los pines host, establece los valores predeterminados para el pin de 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 de AudioEndpointBuilder.

      Diagrama que ilustra la topología recomendada con rutas de acceso rastreables entre patillas de host y puntos de conexión.

      En el diagrama anterior, la topología problemática se ha rediseñado para que AudioEndpointBuilder pueda detectar los dos pines host (PCM y AC-3/ PCM), ya que ahora puede ver dos patillas de puente (Speaker y SPDIF).

    • Divisores

      Se crea otro tipo de topología poco óptima cuando un pin de 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 de host pcM se conecta a un pin de puente del altavoz y un pin de puente SPDIF.

      Diagrama en el que se muestra la topología problemática con dos puntos de conexión conectados a un pin de host y un único PCM.

      En este caso, AudioEndpointBuilder detecta una patilla de puente y realiza un seguimiento de una ruta de acceso de vuelta 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 la siguiente patilla 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 a la otra 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 realice un seguimiento de una ruta de acceso de vuelta a la patilla del host PCM para cada uno de los dos pines de puente.

      Diagrama que ilustra la topología recomendada con rutas de acceso rastreables entre patillas de host y puntos de conexión, con dos PCM en el lado izquierdo.

  • Formato del punto de conexión. Cuando el motor de audio se ejecuta en modo compartido, el formato para el 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 extremo predeterminado en un formato PCM estéreo de 44,1 kHz, de 16 bits. Después de la instalación, debe usar 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 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 el rango de factor de forma y si el punto de conexión es una representación o un punto de conexión de captura. En la tabla siguiente se muestra el orden de selección.

Representación de la clasificación Clasificación de captura
Altavoces Micrófono
Línea de salida Línea de instrucciones
SPDIF SPDIF

Si usa la API MMDevice para seleccionar un punto de conexión predeterminado y los puntos de conexión disponibles se clasifican de la misma manera, la API MMDevice creará 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 de línea de salida y de línea, y el archivo INF asociado no selecciona ninguno de los valores predeterminados en el momento de la instalación, la API MMDevice identifica los identificadores de punto de conexión que primero son alfabéticos 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.