Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Para um aplicativo de áudio, um benefício de usar uma API de áudio de nível mais alto, como o DirectSound ou as funções de de multimídia do Windows waveOutXxx, é que a API converte automaticamente entre os formatos de fluxo usados pelo aplicativo e os formatos usados pelo dispositivo de áudio. Por outro lado, as APIs de áudio principais são mais restritivas porque exigem que os fluxos de aplicativos usem formatos iguais ou estreitamente relacionados aos formatos usados pelo dispositivo. Assim, os aplicativos que usam as APIs de áudio principais para reproduzir ou gravar fluxos de áudio podem ser obrigados a fazer algumas ou todas as conversões entre formatos de fluxo.
Um aplicativo que usa WASAPI para gerenciar fluxos de modo compartilhado pode confiar no mecanismo de áudio para executar apenas conversões de formato limitado. O mecanismo de áudio pode converter entre um tamanho de amostra PCM padrão usado pelo aplicativo e as amostras de ponto flutuante que o mecanismo usa para seu processamento interno. No entanto, o formato para um fluxo de aplicativo normalmente deve ter o mesmo número de canais e a mesma taxa de amostragem como o formato de fluxo usado pelo dispositivo.
Se um aplicativo estiver usando um dispositivo no modo exclusivo, o aplicativo deverá usar um formato de fluxo que o hardware de áudio suporte explicitamente. No modo exclusivo, o aplicativo e o dispositivo trocam dados de áudio diretamente, sem intervenção do mecanismo de áudio.
Muitos dispositivos de áudio suportam formatos de fluxo PCM e não-PCM. No entanto, o mecanismo de áudio pode misturar apenas fluxos PCM. Assim, apenas streams de modo exclusivo podem ter formatos não-PCM. Além disso, apenas formatos não-PCM com taxas de dados fixas são suportados no modo exclusivo. Um exemplo de um formato não-PCM de taxa fixa é um fluxo de áudio Windows Media Audio Professional (WMA Pro) de 48 kHz que passa através de uma ligação de interface digital (S/PDIF) da Sony/Philips em formato digital sem ser descodificado. Para obter mais informações sobre como usar fluxos WMA Pro em S/PDIF, consulte Especificando intervalos de dados WMA Pro.
WASAPI usa um WAVEFORMATEX ou estrutura de WAVEFORMATEXTENSIBLE para especificar um formato de fluxo. Uma estrutura de WAVEFORMATEXTENSIBLE é efetivamente uma estrutura de WAVEFORMATEX que foi estendida para descrever uma maior variedade de formatos. Qualquer formato que possa ser descrito por uma estrutura de WAVEFORMATEX independente também pode ser descrito por uma estrutura WAVEFORMATEXTENSIBLE.
O primeiro membro da estrutura WAVEFORMATEXTENSIBLE é uma estrutura WAVEFORMATEX. O conteúdo de uma estrutura WAVEFORMATEX indica se ela é uma estrutura WAVEFORMATEX independente ou parte de uma estrutura WAVEFORMATEXTENSIBLE.
Um autônomo WAVEFORMATEX estrutura pode descrever adequadamente um formato com um ou dois canais e um tamanho de amostra que é um múltiplo de 8 bits. Por si só, um estrutura de WAVEFORMATEX não pode especificar o mapeamento de canais para posições de alto-falante. Além disso, embora WAVEFORMATEX especifique o tamanho do contêiner para cada amostra de áudio, ele não pode especificar o número de bits de precisão em uma amostra (por exemplo, 20 bits de precisão em um contêiner de 24 bits). Em contraste, a estrutura WAVEFORMATEXTENSIBLE pode especificar tanto o mapeamento de canais para alto-falantes quanto o número de bits de precisão em cada amostra.
Para obter mais informações sobre WAVEFORMATEX e WAVEFORMATEXTENSIBLE , consulte a documentação do Windows DDK.
A partir do Windows 7, o WAVEFORMATEXTENSIBLE foi estendido para representar formatos de dispositivos para transmissão de áudio codificado através de uma interface compatível com IEC 61937. Para obter informações sobre a nova estrutura, consulte Representando formatos para transmissões IEC 61937.
Especificando o formato do dispositivo
Os seguintes métodos WASAPI usam o WAVEFORMATEX e estruturas de WAVEFORMATEXTENSIBLE para descrever formatos de fluxo:
- IAudioClient::GetMixFormat
- IAudioClient::IsFormatSupported
- IAudioClient::Inicializar
O GetMixFormat método recupera o formato de fluxo que o mecanismo de áudio usa para seu processamento interno de fluxos de modo compartilhado. O método sempre usa uma estrutura de WAVEFORMATEXTENSIBLE, em vez de uma estrutura WAVEFORMATEX autônoma, para especificar o formato.
O método IsFormatSupported indica se um dispositivo de ponto de extremidade de áudio suporta um formato de fluxo específico. O chamador deve especificar se o formato de fluxo se destina a ser usado no modo compartilhado ou no modo exclusivo. Para formatos de modo compartilhado, o método consulta o mecanismo de áudio para determinar se ele suporta o formato especificado. Para formatos de modo exclusivo, o método consulta o driver de dispositivo. Alguns drivers de dispositivo relatarão que suportam um formato PCM de 1 canal ou 2 canais se o formato for especificado por uma estrutura de WAVEFORMATEX autônoma, mas rejeitarão o mesmo formato se for especificado por uma estrutura WAVEFORMATEXTENSIBLE. Para obter resultados confiáveis desses drivers, os aplicativos de modo exclusivo devem chamar IsFormatSupported duas vezes para cada formato PCM de 1 canal ou 2 canais — uma chamada deve usar uma estrutura de WAVEFORMATEX autônoma para especificar o formato e a outra chamada deve usar uma estrutura WAVEFORMATEXTENSIBLE para especificar o mesmo formato.
Depois que um aplicativo tiver usado GetMixFormat ou IsFormatSupported para encontrar um formato apropriado para um fluxo de modo compartilhado ou de modo exclusivo, o aplicativo pode chamar o método Initialize para inicializar um fluxo com esse formato. Um aplicativo que tenta inicializar um fluxo de modo compartilhado com um formato que não é idêntico ao formato de mistura obtido do método GetMixFormat, mas que tem o mesmo número de canais e a mesma taxa de amostragem que o formato de mistura, provavelmente terá êxito. Antes de chamar Initialize, o aplicativo pode chamar IsFormatSupported para verificar se Initialize aceitará o formato.
O formato de mistura que o mecanismo de áudio usa para seu processamento interno de fluxos de modo compartilhado está intimamente relacionado, mas não é necessariamente idêntico ao formato de fluxo que o dispositivo de ponto final de áudio usa no modo compartilhado. Através do painel de controle multimídia do Windows, Mmsys.cpl, o usuário pode selecionar o formato de fluxo que um dispositivo de ponto de extremidade de áudio usará quando operar no modo compartilhado. As etapas são as seguintes:
Para executar Mmsys.cpl, abra uma janela de prompt de comando e digite o seguinte comando:
controlo mmsys.cpl
Como alternativa, você pode executar Mmsys.cpl clicando com o botão direito do mouse no ícone do alto-falante na área de notificação, localizada no lado direito da barra de tarefas, e selecionando Dispositivos de Reprodução ou Dispositivos de Gravação.
Depois que a janela Mmsys.cpl abrir, selecione um dispositivo na lista de dispositivos de reprodução ou na lista de dispositivos de gravação e clique em Propriedades.
Quando a janela de propriedades abrir, clique em Avançado e selecione um formato na lista de formatos disponíveis na caixa rotulada Formato Padrão.
Por exemplo, suponha que o usuário seleciona o seguinte formato padrão na lista de formatos disponíveis para um dispositivo de reprodução:
2 canais, 16 bits, 44100 Hz (qualidade de CD)
Este é o formato que o dispositivo usará posteriormente quando operar no modo compartilhado. No Windows Vista, o mecanismo de áudio usará uma versão ligeiramente modificada desse formato para seu processamento interno de fluxos de modo compartilhado. O mecanismo de áudio usará um formato com o mesmo número de canais (dois) e a mesma taxa de amostragem (44100 Hz), mas converterá amostras em números de vírgula flutuante antes de processá-las. O mecanismo de áudio converterá as amostras de ponto flutuante na mistura de saída em inteiros de 16 bits antes de reproduzi-las através do dispositivo.
Um aplicativo pode consultar a propriedade PKEY_AudioEngine_DeviceFormat de um dispositivo de ponto de extremidade de áudio para obter o formato de modo compartilhado que o usuário selecionou para o dispositivo. Para obter informações sobre como consultar as propriedades de um dispositivo, consulte Propriedades do dispositivo.
Alguns aplicativos podem achar que o formato especificado pela propriedade PKEY_AudioEngine_DeviceFormat de um dispositivo é um formato adequado para abrir um fluxo de modo exclusivo no dispositivo. Outros aplicativos que gerenciam fluxos de modo exclusivo podem ter requisitos adicionais que exigem uma negociação de formato complexo com o dispositivo. Normalmente, um desses aplicativos constrói uma lista de formatos adequados, com os formatos preferidos no início da lista. Em seguida, o aplicativo chama iterativamente IsFormatSupported com cada formato sucessivo na lista, começando no início da lista, até encontrar um formato compatível com o dispositivo.
Tópicos relacionados