Aplicación de la configuración de Speaker-Configuration
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.
DirectSound realiza un seguimiento de su configuración de altavoz actual en el Registro y aplica esa configuración al hardware de audio cada vez que se crea un nuevo dispositivo DirectSound.
Un programa de aplicación puede cambiar la configuración del altavoz en todo el sistema llamando al método IDirectSound::SetSpeakerConfig , que actualiza la configuración del hablante en el registro. El método también intenta aplicar la nueva configuración inmediatamente al hardware, aunque normalmente los dispositivos de audio no pueden cambiar la configuración del altavoz mientras el objeto DirectSound existe. Para obtener una lista de las configuraciones del hablante que DirectSound define para este método, consulte Traducción de solicitudes de Speaker-Configuration.
Un usuario puede cambiar la configuración a través del cuadro de diálogo de configuración del hablante en la página Propiedades multimedia (mmsys.cpl) en Panel de control. Para buscar el cuadro de diálogo directSound speaker-configuration en Windows XP, por ejemplo, siga estos pasos:
En Panel de control, haga doble clic en el icono Sonidos y dispositivos de audio.
En la pestaña Audio , seleccione un dispositivo en la lista Reproducción de sonido .
Seleccione el botón Advanced (Opciones avanzadas).
Seleccione la pestaña Oradores .
En este punto, debería ver la etiqueta Configuración del altavoz junto a una lista de las configuraciones de altavoz entre las que puede seleccionar.
DirectSound usa una solicitud de KSPROPERTY_AUDIO_CHANNEL_CONFIG set-property para enviar la información de configuración del hablante a un nodo 3D o a un nodo DAC (KSNODETYPE_3D_EFFECTS o KSNODETYPE_DAC) en un gráfico de filtros de audio. Para un nodo 3D, el destino de la solicitud de propiedad es realmente el pin (objeto de secuencia 3D) que alimenta el nodo. Para un nodo DAC, el destino es el objeto de filtro que contiene el nodo DAC. En cualquier caso, la 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.
Tenga en cuenta que solo las versiones de DirectSound que se incluyen con Windows Me y con Windows XP y versiones posteriores, envían solicitudes de propiedad speaker-configuration a nodos DAC: las versiones anteriores de DirectSound no admiten esta característica. Sin embargo, todas las versiones de DirectSound envían estas solicitudes a nodos 3D.
Si un programa de aplicación ha creado más de un nodo 3D, DirectSound envía solicitudes de configuración del hablante solo al primer nodo 3D que se va a crear.
DirectSound envía solicitudes de configuración del hablante a los nodos 3D y DAC cada vez que una aplicación crea un objeto DirectSound o llama al método IDirectSound::SetSpeakerConfig . Normalmente, los dispositivos de audio no pueden cambiar su configuración del altavoz mientras administran secuencias activas y DirectSound intenta evitar esta limitación siempre que sea posible. Por ejemplo, al crear un objeto DirectSound, DirectSound envía las solicitudes de configuración del hablante después de crear una instancia del filtro, pero antes de crear instancias de cualquier patilla en el filtro, es decir, antes de crear secuencias.
Esta limitación es más difícil de evitar en el caso de una llamada a SetSpeakerConfig. Cuando una aplicación llama a SetSpeakerConfig, el controlador del adaptador normalmente produce un error en la solicitud de configuración del altavoz de DirectSound. Esto se debe a que el objeto DirectSound ya existe, lo que significa que el dispositivo ya tiene flujos activos para administrar.
En esta situación, el controlador del adaptador tiene dos opciones para tratar con una solicitud de configuración del hablante que ha producido un error:
El controlador puede recordar la configuración solicitada y aplicarla tan pronto como se destruyen todas sus secuencias.
El controlador puede omitir la solicitud y confiar en DirectSound para enviar otra solicitud de configuración del hablante la próxima vez que se cree un objeto DirectSound.
La primera opción proporciona una mejor experiencia de usuario porque si el usuario selecciona una nueva configuración a través del cuadro de diálogo de configuración del hablante, el cambio surte efecto inmediatamente en todas las aplicaciones, no solo en las aplicaciones directSound. (Por supuesto, si alguna aplicación de audio se está ejecutando en el momento en que se selecciona la nueva configuración, el cambio se aplaza hasta que finalicen todas las aplicaciones de audio). Sin embargo, con la segunda opción, el cambio no surte efecto hasta que se ejecute una aplicación directSound. Por ejemplo, si una aplicación que usa la API waveOut multimedia de Windows es la primera aplicación que se ejecutará después de cambiar una configuración de Panel de control, el usuario puede preguntarse por qué la nueva configuración no tiene ningún efecto aparente.
En respuesta a una solicitud de configuración del hablante enviada a un nodo 3D o DAC, un controlador de adaptador típico actualiza la configuración del altavoz en el hardware de audio solo si actualmente no se crean instancias de ningún pin por parte de cualquier aplicación de audio. Esto significa que si una aplicación waveOut, por ejemplo, tiene una o varias patillas abiertas en el momento en que una segunda aplicación llama a DirectSoundCreate, es posible que el controlador tenga que aplazar los cambios pendientes en la configuración del altavoz del dispositivo de audio hasta un momento posterior.
Si el controlador no puede cumplir una solicitud para cambiar la configuración del altavoz del dispositivo, simplemente debe producir un error en la solicitud. Si se produce un error en una solicitud de configuración del hablante durante la creación de objetos DirectSound o en una llamada a SetSpeakerConfig , no se produce un error en la creación del objeto DirectSound o en la llamada a SetSpeakerConfig .
En el momento del arranque, un controlador de adaptador de audio inicializa la configuración del altavoz del hardware en su configuración predeterminada, que suele ser estéreo. En cuanto cualquier aplicación crea un objeto DirectSound, DirectSound aplica la configuración almacenada en el registro al hardware. Un programa de aplicación debe crear un dispositivo DirectSound antes de que pueda llamar a SetSpeakerConfig para cambiar la configuración del altavoz en el Registro, pero esta configuración del Registro normalmente surte efecto en el hardware solo después de que se libere el dispositivo DirectSound y se cree un segundo dispositivo DirectSound.
Inmediatamente después de instalar un dispositivo de audio o cuando se produce un error de configuración del altavoz, la configuración del altavoz DirectSound tiene como valor predeterminado estéreo.