Compartir a través de


configuración de speaker de DSSPEAKER_DIRECTOUT

Nota Esta información se aplica a Windows XP y a sistemas operativos anteriores. A partir de Windows Vista, IDirectSound::GetSpeakerConfig e IDirectSound::SetSpeakerConfig han quedado en desuso.

Un programa de aplicación puede cambiar la configuración del altavoz directSound al modo de salida directa llamando al método IDirectSound::SetSpeakerConfig con el parámetro speaker-configuration establecido en DSSPEAKER_DIRECTOUT (consulte Microsoft Windows SDK documentación). Esto especifica una configuración sin altavoz en la que los canales de la secuencia de reproducción de la aplicación se envían directamente al adaptador de audio sin interpretarse como posiciones del altavoz. Sin embargo, el flujo de entrada todavía se puede modificar mediante la conversión de frecuencia de muestreo, atenuación, filtrado y otros tipos de procesamiento que no requieren ninguna suposición sobre la asignación de altavoces a canales.

Una vez que surta efecto, el DSSPEAKER_DIRECTOUT configuración del altavoz es global y afecta al dispositivo de audio en su conjunto. Todas las aplicaciones de audio que se ejecutan posteriormente están sujetas a la nueva configuración hasta que DirectSound vuelva a cambiar la configuración.

En modo de salida directa, el dispositivo de audio representa el primer canal en el primer conector de salida del dispositivo, el segundo canal a la segunda salida del dispositivo, etc. Esto permite a una aplicación de creación de audio generar datos multicanal directamente en un dispositivo, como un mezclador externo o un dispositivo de almacenamiento de audio (disco duro, ADAT, etc.). Por ejemplo, los canales de una secuencia de 48 canales pueden asignarse como se muestra en la tabla siguiente.

Contenido del número de canal 0

Vocal

1

Tambores

2

Guitarra

3

Bajo

...

47

Piano

Para este tipo de datos de audio sin procesar, las posiciones del altavoz no tienen sentido y asignar posiciones del altavoz a las secuencias de entrada o salida podría causar efectos secundarios no deseados. Por ejemplo, un componente como KMixer podría intervenir de forma inapropiada mediante la aplicación de efectos específicos del hablante, como la virtualización 3D o la codificación de Dolby Surround Pro Logic en la secuencia. Tenga en cuenta que el número de canales de datos sin procesar no está limitado por el número de bits de la máscara de canal.

Incluso un dispositivo que no está diseñado específicamente para la edición de audio normalmente debe aceptar una solicitud de propiedad set-property de KSPROPERTY_AUDIO_CHANNEL_CONFIG para cambiar su configuración del altavoz a KSAUDIO_SPEAKER_DIRECTOUT. En general, un dispositivo debe evitar que se produzca un error en la solicitud a menos que pueda comprobar de alguna manera que sus salidas están conectadas a altavoces y no se pueden usar externamente para cualquier otro propósito (por ejemplo, como entradas para un mezclador externo).

Normalmente, una aplicación que usa el modo de salida directa se escribe para un dispositivo de hardware específico. Esto permite que la aplicación sepa de antemano qué formatos de datos de salida directa admite el dispositivo, incluido el número de canales y cómo se deben interpretar los datos de esos canales. Este conocimiento es necesario porque cuando una aplicación llama a IDirectSound::GetSpeakerConfig en un dispositivo que está configurado en modo de salida directa, el dispositivo simplemente confirma que está en este modo; no proporciona información adicional sobre el número de canales en los formatos de secuencia que admite en modo de salida directa. (Sin embargo, esta información se puede obtener enviando una solicitud de KSPROPERTY_AUDIO_MIX_LEVEL_CAPS get-property al nodo supermezclador en el pin de mezclador del dispositivo; consulte DirectSound Node-Ordering Requirements).)

Al especificar el formato de onda para una secuencia de salida directa, una aplicación debe establecer el miembro dwChannelMask de la estructura WAVEFORMATEXTENSIBLE en el valor KSAUDIO_SPEAKER_DIRECTOUT, que es cero. Una máscara de canal de cero indica que no se definen posiciones del hablante. Como siempre, el número de canales de la secuencia se especifica en el miembro Format.nChannels .

Los proveedores de hardware tienen la opción de admitir la aceleración de hardware de DirectSound cuando sus dispositivos están configurados en modo de salida directa. Una aplicación DirectSound puede reproducir una secuencia directa a través de uno de los pines de mezcla del dispositivo, si hay alguno disponible. Una vez agotadas todas las instancias de pin de hardware disponibles, las nuevas secuencias pasan a través de KMixer en su lugar.

Al mezclar secuencias para un dispositivo configurado en modo de salida directa, KMixer aplica una asignación uno a uno entre los canales de los flujos de entrada de las aplicaciones y los canales de la secuencia de mezcla que genera en el dispositivo. Esto significa que si la aplicación genera varias secuencias directas que tienen el mismo número de canales, por ejemplo, cada canal N de la combinación de salida es simplemente la suma de los canales N de todas las secuencias que entran en KMixer.

Al mezclar varias secuencias de salida directa que difieren en el número de canales que contienen, el algoritmo de mezcla de KMixer es ligeramente más complejo. En este caso, cada canal N de la combinación es la suma de los canales N de todos los flujos de entrada que tienen un canal N. Por ejemplo, si KMixer mezcla secuencias de entrada cuádruple y estéreo para formar una combinación de salida cuádruple, los canales cero y una de las combinaciones de salida son las sumas de los canales cero y uno, respectivamente, de las secuencias estéreo y cuádruple de entrada. Sin embargo, el flujo de entrada estéreo no contribuye a los canales dos y tres de la mezcla, que se toman únicamente de los dos últimos canales de la secuencia de entrada cuádruple.

Una aplicación que intenta realizar una de las siguientes acciones es arriesgando un comportamiento imprevisible:

  • Reproducir una secuencia que no está en formato de salida directa a través de un dispositivo configurado en modo de salida directa.

  • Reproducir una secuencia de salida directa a través de un dispositivo que no está configurado en modo de salida directa.

Cuando se enfrenta a uno de estos casos, KMixer evita simplemente fallar el intento de abrir la secuencia. En su lugar, intenta controlar la incompatibilidad aparente mediante el algoritmo de asignación uno a uno descrito anteriormente. El usuario puede o no estar satisfecho con el resultado. No se puede esperar que otros componentes de audio controle estos casos de la misma manera que KMixer. Por ejemplo, el controlador de un dispositivo configurado en modo de salida directa debe producir un error al intentar abrir un búfer de hardware para una secuencia de salida que no esté en formato de salida directa y viceversa.

Es posible que una aplicación de creación de audio tenga que permitir al usuario escuchar los datos que ha mezclado en los primeros canales de su flujo de salida, pero omitir los datos sin procesar que todavía están incluidos en los canales restantes de la secuencia. El comportamiento de KMixer hace que este comportamiento sea sencillo. Por ejemplo, si una secuencia de reproducción de 24 canales contiene una combinación estéreo en canales 0 y 1 y datos sin procesar en los canales 2 a 23, la aplicación hace lo siguiente:

  • Configura el dispositivo de audio de destino (este no es necesariamente el dispositivo que la aplicación usa para editar la secuencia) en modo estéreo llamando a SetSpeakerConfig con DSSPEAKER_STEREO.

  • Cambia dwChannelMask en la estructura WAVEFORMATEXTENSIBLE de la secuencia de reproducción a KSAUDIO_SPEAKER_STEREO pero deja Format.nChannels establecido en 24, que es el número total de canales de la secuencia.

KMixer mezcla solo los canales estéreo de la secuencia de reproducción, que se describen en la máscara de canal, y descarta los 22 canales restantes, que contienen datos sin procesar. Recuerde que es poco probable que los cambios realizados en la configuración del altavoz de DirectSound surtan efecto hasta que se destruya el objeto DirectSound actual y se cree otro (consulte Aplicar Speaker-Configuration Configuración).