Partilhar via


Visão geral do ADPCM

Adaptive Differential Pulse Code Modulation (ADPCM) é um formato de compressão com perdas implementado no XAudio2 para fornecer recursos adicionais para especificar o tamanho do bloco de amostra de compressão. Com um formato de compressão com perdas, alguns dados são alterados e perdidos durante a compressão. ADPCM pode atingir taxas de compressão de até 4:1.

A implementação do ADPCM para XAudio2 fornece recursos adicionais para especificar o tamanho do bloco de amostra de compressão. O ADPCM permite que o designer de áudio escolha uma configuração que seja um compromisso apropriado entre tamanho, qualidade e resolução (para colocar pontos de loop).

XAudio2 usa uma versão modificada do codec Microsoft ADPCM que suporta a formatação de dados estendida necessária para fornecer tamanhos de bloco de exemplo personalizados. Por esta razão, os dados de áudio XAudio2 não podem ser reproduzidos por motores de áudio que não suportam esta versão do codec ADPCM.

Observação

Atualmente, a compactação ADPCM está disponível apenas para Windows, incluindo implantações do XNA Game Studio Express para Windows.

 

Codificação ADPCM

Os dados de áudio são codificados para ADPCM usando a ferramenta de linha de comando AdpcmEncode.

  • AdpcmEncode

    Para codificar arquivos de áudio como ADPCM para uso com XAudio2, use o AdpcmEncode ferramenta de linha de comando.

Descodificação do ADPCM

A descodificação de software do ADPCM é suportada no XAudio2.

  • XAudio2

    Para usar dados codificados ADPCM em XAudio2, você precisa inicializar uma estrutura ADPCMWAVEFORMAT com valores específicos ADPCM e passá-la como um argumento para IXAudio2::CreateSourceVoice quando você cria uma voz de origem. Para obter um exemplo de carregamento e reprodução de um som no XAudio2, consulte Como reproduzir um som com o XAudio2.

AmostrasPorBloco

A compressão ADPCM funciona separando a forma de onda em blocos e prevendo a variação das amostras de forma de onda dentro de cada bloco. O tamanho dos blocos é medido em amostras. O menor tamanho de bloco é de 32 amostras, e o maior é de 512 amostras.

Blocos maiores permitem uma melhor compressão, o que resulta em tamanhos de arquivo menores, mas às custas da qualidade de som e resolução para alinhar pontos de loop.

Em geral, modificar o valor SamplesPerBlock resulta nestas compensações:

Se SamplesPerBlock... Compactação de arquivos Qualidade de som Resolução de pontos de loop
Aumentos (até máx. 512) Aumentos Diminuições Diminuições
Diminuições (até min 32) Diminuições Aumentos Aumentos

 

Restrições

Como o ADPCM usa blocos de amostra que são alinhados um após o outro, uma onda compactada com ADPCM pode ter um bloco parcial inacabado em sua extremidade. O descodificador ADPCM gera silêncio para o resto deste bloco parcial, o que impede que a onda faça looping sem problemas.

O valor do parâmetro SamplesPerBlock afeta a resolução com a qual pode-se alinhar dados de onda e pontos de loop.

Se tentares aplicar compressão a uma onda não alinhada, receberás um erro ou um aviso, dependendo se a onda é utilizada em quaisquer eventos de reprodução em loop. Não é possível compactar uma onda usada em nenhum evento de reprodução em loop. Remova-o dos eventos de reprodução em loop e reaplique a compressão.

Se utilizar a onda exclusivamente no modo de não repetição, a restrição de alinhamento de bloco de amostra não se aplica.

Estrutura do arquivo ADPCM

Um arquivo ADPCM é um arquivo RIFF padrão com os seguintes tipos de bloco.

Fragmento FCC Descrição
RIFF Bloco RIFF padrão contendo um tipo de arquivo com o valor WAVE nos primeiros quatro bytes de sua seção de dados e os outros blocos no arquivo no restante de sua seção de dados.
FMT Contém o cabeçalho de formato para o arquivo ADPCM. Os dados neste bloco correspondem a uma estrutura ADPCMWAVEFORMAT.
dados Contém os dados de áudio ADPCM codificados. Quando usas ADPCM no XAudio2, precisas de ler o conteúdo do bloco de dados para um buffer e passá-lo para uma fonte de voz, como o membro pAudioData de uma estrutura XAUDIO2_BUFFER. Não é necessário trocar a ordem dos bytes dos conteúdos do bloco de dados.
SMPL e WSMP Tipos de bloco opcionais que contêm as informações de looping para o arquivo ADPCM. Quando utiliza o ADPCM no XAudio2, os valores contidos nos blocos smpl ou wsmp são usados para preencher os membros LoopBeginLoopLength e LoopCount da estrutura XAUDIO2_BUFFER. No Xbox 360, você precisa realizar uma troca de bytes nos dados carregados de um segmento smpl para levar em conta a diferença de endianness entre o Windows e o Xbox 360.

 

Guia de Programação