Aplicando configurações de Speaker-Configuration
Nota Essas informações se aplicam ao Windows XP e a sistemas operacionais anteriores. A partir do Windows Vista, IDirectSound::GetSpeakerConfig e IDirectSound::SetSpeakerConfig foram preteridos.
O DirectSound controla a configuração atual do locutor no registro e aplica essa configuração ao hardware de áudio sempre que um novo dispositivo DirectSound é criado.
Um programa de aplicativo pode alterar a configuração do alto-falante em todo o sistema chamando o método IDirectSound::SetSpeakerConfig , que atualiza a configuração do locutor no registro. O método também tenta aplicar a nova configuração imediatamente ao hardware, embora os dispositivos de áudio normalmente não possam alterar as configurações do alto-falante enquanto o objeto DirectSound existe. Para obter uma lista das configurações de alto-falante que o DirectSound define para esse método, consulte Traduzindo solicitações de Speaker-Configuration.
Um usuário pode alterar a configuração por meio da caixa de diálogo de configuração do alto-falante na página Propriedades multimídia (mmsys.cpl) no Painel de Controle. Para localizar a caixa de diálogo configuração do alto-falante DirectSound no Windows XP, por exemplo, siga estas etapas:
Em Painel de Controle, clique duas vezes no ícone Sons e Dispositivos de Áudio.
Na guia Áudio , selecione um dispositivo na lista Reprodução de Som .
Selecione o botão Avançado.
Selecione a guia Alto-falantes .
Neste ponto, você deverá ver o rótulo Configuração do Alto-Falante ao lado de uma lista das configurações do locutor que você pode selecionar.
O DirectSound usa uma solicitação KSPROPERTY_AUDIO_CHANNEL_CONFIG set-property para enviar as informações de configuração do locutor para um nó 3D ou nó DAC (KSNODETYPE_3D_EFFECTS ou KSNODETYPE_DAC) em um grafo de filtro de áudio. Para um nó 3D, o destino para a solicitação de propriedade é, na verdade, o pino (objeto de fluxo 3D) que alimenta o nó. Para um nó DAC, o destino é o objeto de filtro que contém o nó DAC. Em ambos os casos, a configuração do alto-falante é global e afeta o dispositivo de áudio como um todo. Todos os aplicativos de áudio executados posteriormente estão sujeitos à nova configuração até que o DirectSound altere a configuração novamente.
Observe que somente as versões do DirectSound fornecidas com o Windows Me e, com o Windows XP e posterior, enviam solicitações de propriedade de configuração do locutor para nós da DAC– versões anteriores do DirectSound não dão suporte a esse recurso. No entanto, todas as versões do DirectSound enviam essas solicitações para nós 3D.
Se um programa de aplicativo tiver criado mais de um nó 3D, o DirectSound enviará solicitações de configuração do locutor somente para o primeiro nó 3D a ser criado.
O DirectSound envia solicitações de configuração do locutor para os nós 3D e DAC sempre que um aplicativo cria um objeto DirectSound ou chama o método IDirectSound::SetSpeakerConfig . Os dispositivos de áudio normalmente não conseguem alterar a configuração do alto-falante enquanto gerenciam fluxos ativos, e o DirectSound tenta evitar essa limitação sempre que possível. Por exemplo, ao criar um objeto DirectSound, o DirectSound envia as solicitações de configuração do locutor depois de instanciar o filtro, mas antes de instanciar os pinos no filtro, ou seja, antes de criar fluxos.
Essa limitação é mais difícil de evitar no caso de uma chamada para SetSpeakerConfig. Quando um aplicativo chama SetSpeakerConfig, o driver do adaptador normalmente falha na solicitação de configuração do locutor do DirectSound. Isso ocorre porque o objeto DirectSound já existe, o que significa que o dispositivo já tem fluxos ativos para gerenciar.
Nessa situação, o driver do adaptador tem duas opções para lidar com uma solicitação de configuração do locutor que falhou:
O driver pode se lembrar da configuração solicitada e aplicá-la assim que todos os fluxos forem destruídos.
O driver pode ignorar a solicitação e contar com o DirectSound para enviar outra solicitação de configuração do locutor na próxima vez que um objeto DirectSound for criado.
A primeira opção proporciona uma melhor experiência do usuário porque, se o usuário selecionar uma nova configuração por meio da caixa de diálogo de configuração do locutor, a alteração entrará em vigor imediatamente em todos os aplicativos, não apenas em aplicativos DirectSound. (É claro que, se algum aplicativo de áudio estiver em execução no momento em que a nova configuração estiver selecionada, a alteração será adiada até que todos os aplicativos de áudio sejam encerrados.) Com a segunda opção, no entanto, a alteração não terá efeito até que um aplicativo DirectSound seja executado. Por exemplo, se um aplicativo que usa a API waveOut multimídia do Windows for o primeiro aplicativo a ser executado depois de alterar uma configuração de Painel de Controle, o usuário poderá se perguntar por que a nova configuração não tem nenhum efeito aparente.
Em resposta a uma solicitação de configuração do locutor enviada a um nó 3D ou DAC, um driver de adaptador típico atualizará a configuração do alto-falante no hardware de áudio somente se nenhum pino for instanciado por nenhum aplicativo de áudio no momento. Isso significa que, se um aplicativo waveOut, por exemplo, tiver um ou mais pinos abertos no momento em que um segundo aplicativo chamar DirectSoundCreate, o driver poderá precisar adiar as alterações pendentes na configuração do alto-falante do dispositivo de áudio até um momento posterior.
Se o driver não conseguir atender a uma solicitação para alterar a configuração do alto-falante do dispositivo, ele simplesmente falhará na solicitação. Falhar em uma solicitação de configuração do locutor durante a criação do objeto DirectSound ou uma chamada SetSpeakerConfig não faz com que a criação do objeto DirectSound ou a chamada SetSpeakerConfig falhe.
No momento da inicialização, um driver de adaptador de áudio inicializa a configuração do alto-falante do hardware para sua configuração padrão, que normalmente é estéreo. Assim que qualquer aplicativo cria um objeto DirectSound, o DirectSound aplica a configuração armazenada no registro ao hardware. Um programa de aplicativo deve criar um dispositivo DirectSound antes de chamar SetSpeakerConfig para alterar a configuração do locutor no registro, mas essa configuração do Registro normalmente entra em vigor no hardware somente depois que o dispositivo DirectSound é lançado e um segundo dispositivo DirectSound é criado.
Imediatamente após a instalação de um dispositivo de áudio ou quando ocorre um erro de configuração do alto-falante, a configuração do alto-falante DirectSound usa como padrão estéreo.