Partilhar via


Aplicando configurações de Speaker-Configuration

Nota Estas informações aplicam-se ao Windows XP e sistemas operativos anteriores. A partir do Windows Vista, IDirectSound::GetSpeakerConfig e IDirectSound::SetSpeakerConfig foram preteridos.

O DirectSound controla a sua definição de configuração de altifalante atual no registo e aplica-a ao hardware de áudio sempre que é criado um novo dispositivo DirectSound.

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 alto-falante no registro. O método também tenta aplicar a nova configuração imediatamente ao hardware, embora os dispositivos de áudio normalmente não consigam 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 através da caixa de diálogo de configuração do alto-falante na página Propriedades de multimídia (mmsys.cpl) no Painel de controle. Para localizar a caixa de diálogo de configuração de alto-falante DirectSound no Windows XP, por exemplo, execute estas etapas:

  1. No Painel de Controlo, faça duplo clique no ícone Sons e Dispositivos de Áudio .

  2. Na guia Áudio , selecione um dispositivo na lista Reprodução de som .

  3. Selecione o botão Avançado .

  4. Selecione a guia Alto-falantes .

Neste ponto, você verá o rótulo Configuração do alto-falante ao lado de uma lista das configurações de alto-falante que você pode selecionar.

O DirectSound usa uma solicitação do conjunto de propriedades KSPROPERTY_AUDIO_CHANNEL_CONFIG para enviar as informações de configuração do altifalante para um nó 3D ou nó DAC (KSNODETYPE_3D_EFFECTS ou KSNODETYPE_DAC) num gráfico 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 o contém. Em ambos os casos, a definição de configuração do alto-falante é global e afeta o dispositivo de áudio como um todo. Todos os aplicativos de áudio executados subsequentemente 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, com o Windows XP e posterior, enviam solicitações de propriedade de configuração de alto-falante para nós de DAC - versões anteriores do DirectSound não oferecem 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 de alto-falante somente para o primeiro nó 3D a ser criado.

O DirectSound envia solicitações de configuração de alto-falante 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 alto-falante depois de instanciar o filtro, mas antes de instanciar quaisquer pinos no filtro, ou seja, antes de criar quaisquer 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 de alto-falante 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 de alto-falante que falhou:

  • O driver pode lembrar a configuração solicitada e aplicá-la assim que todos os seus fluxos forem destruídos.

  • O driver pode ignorar a solicitação e confiar no DirectSound para enviar outra solicitação de configuração de alto-falante na próxima vez que um objeto DirectSound for criado.

A primeira opção oferece uma melhor experiência ao usuário, pois se o usuário selecionar uma nova configuração através da caixa de diálogo de configuração do alto-falante, a alteração entrará em vigor imediatamente em todos os aplicativos - não apenas nos aplicativos DirectSound. (Claro, se algum aplicativo de áudio estiver em execução no momento em que a nova configuração for 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 do Painel de Controle, o usuário pode se perguntar por que a nova configuração não tem efeito aparente.

Em resposta a uma solicitação de configuração de alto-falante enviada para um nó 3D ou DAC, um driver de adaptador típico atualiza a configuração do alto-falante no hardware de áudio somente se nenhum pino estiver atualmente instanciado por qualquer aplicativo de áudio. 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 pode precisar adiar quaisquer alterações pendentes na configuração do alto-falante do dispositivo de áudio até um momento posterior.

Se o seu driver não conseguir atender a uma solicitação para alterar a configuração do alto-falante do dispositivo, ele deve simplesmente falhar a solicitação. Falhar uma solicitação de configuração de alto-falante 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 poder chamar SetSpeakerConfig para alterar a configuração do alto-falante 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 de alto-falante, a configuração do alto-falante DirectSound assume como padrão estéreo.