Formatos de dispositivo

Para um aplicativo de áudio, um benefício de usar uma API de áudio de nível superior, como DirectSound ou as funções waveOutXxx multimídia do Windows, é 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 intimamente 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 limitadas. 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 de um fluxo de aplicativo normalmente deve ter o mesmo número de canais e a mesma taxa de amostragem que 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 ofereça 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 os formatos de fluxo PCM e não-PCM. No entanto, o mecanismo de áudio pode misturar apenas fluxos PCM. Assim, apenas fluxos 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 por um link de interface digital Sony/Philips (S/PDIF) em formato digital sem ser decodificado. Para obter mais informações sobre como usar fluxos do WMA Pro sobre S/PDIF, consulte Especificando intervalos de dados do WMA Pro.

WASAPI usa uma estrutura WAVEFORMATEX ou WAVEFORMATEXTENSIBLE para especificar um formato de fluxo. Uma estrutura WAVEFORMATEXTENSIBLE é efetivamente uma estrutura WAVEFORMATEX que foi estendida para descrever uma maior variedade de formatos. Qualquer formato que possa ser descrito por uma estrutura WAVEFORMATEX autônoma 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 é uma estrutura WAVEFORMATEX autônoma ou parte de uma estrutura WAVEFORMATEXTENSIBLE.

Uma estrutura WAVEFORMATEX autônoma 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ó, uma estrutura WAVEFORMATEX não pode especificar o mapeamento de canais para posições de alto-falante. Além disso, embora o 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 extensível WAVEFORMAT 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 DDK do Windows.

A partir do Windows 7, o WAVEFORMATEXTENSIBLE foi estendido para representar formatos de dispositivo para transmissão de áudio codificado em 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 as estruturas WAVEFORMATEX e WAVEFORMATEXTENSIBLE para descrever formatos de fluxo:

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 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 oferece suporte a um formato de fluxo específico. O chamador deve especificar se o formato de fluxo se destina ao uso no modo compartilhado ou no modo exclusivo. Para formatos de modo compartilhado, o método consulta o mecanismo de áudio para determinar se ele oferece suporte ao formato especificado. Para formatos de modo exclusivo, o método consulta o driver de dispositivo. Alguns drivers de dispositivo relatarão que oferecem suporte a um formato PCM de 1 ou 2 canais se o formato for especificado por uma estrutura 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 ou 2 canais — uma chamada deve usar uma estrutura 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 localizar um formato apropriado para um fluxo de modo compartilhado ou 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 mixagem 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 de extremidade 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:

  1. Para executar Mmsys.cpl, abra uma janela do Prompt de Comando e digite o seguinte comando:

    controle 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.

  2. Depois que a janela Mmsys.cpl for aberta, selecione um dispositivo na lista de dispositivos de reprodução ou na lista de dispositivos de gravação e clique em Propriedades.

  3. Quando a janela de propriedades for aberta, clique em Avançado e selecione um formato na lista de formatos disponíveis na caixa Formato Padrão.

Por exemplo, suponha que o usuário selecione 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 ponto 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 complexa com o dispositivo. Normalmente, um desses aplicativos constrói uma lista de formatos adequados, com os formatos preferidos no início da lista. O aplicativo então chama iterativamente IsFormatSupported com cada formato sucessivo na lista, começando no início da lista, até encontrar um formato que o dispositivo suporta.

Dispositivos de ponto de extremidade de áudio