Share via


Visão geral do ADPCM

A ADPCM (Modulação de Código de Pulso Diferencial Adaptável) é um formato de compactação com perda implementado para XAudio2 para fornecer recursos adicionais para especificar o tamanho do bloco de exemplo de compactação. Com um formato de compactação com perda, alguns dados são alterados e perdidos durante a compactação. O ADPCM pode obter taxas de compactação de até 4:1.

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

O XAudio2 usa uma versão modificada do codec do Microsoft ADPCM que dá suporte à formatação de dados estendida necessária para fornecer tamanhos de bloco de exemplo personalizados. Por esse motivo, os dados de áudio XAudio2 não podem ser reproduzidos por mecanismos de áudio que não dão suporte a essa versão do codec do ADPCM.

Observação

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

 

Codificação ADPCM

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

  • AdpcmEncode

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

Decodificação do ADPCM

Há suporte para a decodificação de software do ADPCM no XAudio2.

  • XAudio2

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

SamplesPerBlock

A compactação ADPCM funciona separando a forma de onda em blocos e prevendo a variação dos exemplos de forma de onda dentro de cada bloco. O tamanho dos blocos é medido em exemplos. O menor tamanho de bloco é de 32 amostras e o mais alto é de 512 amostras.

Blocos maiores permitem uma melhor compactação, o que resulta em tamanhos de arquivo menores, mas em detrimento da qualidade e da resolução do som para alinhar pontos de loop.

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

Se samplesPerBlock... Compactação de arquivos Qualidade do som Resolução de ponto de loop
Aumentos (até o máximo de 512) Aumenta Diminui Diminui
Diminui (até mínima de 32) Diminui Aumenta Aumenta

 

Restrições

Como o ADPCM usa blocos de exemplo alinhados um após o outro, uma onda compactada com a ADPCM pode ter um bloco parcial e inacabado no final. O decodificador do ADPCM gera silêncio para o restante desse bloco parcial, o que impede que a onda faça um loop contínuo.

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

Se você tentar aplicar compactação a uma onda não alinhada, receberá um erro ou um aviso dependendo se a onda for usada em eventos de reprodução de looping. Você não pode compactar uma onda usada em nenhum evento de reprodução de loop. Remova-o dos eventos de reprodução de loop e aplique novamente a compactação.

Se você usar a onda exclusivamente no modo sem loop, a restrição de alinhamento de bloco de exemplo não se aplicará.

Estrutura do arquivo ADPCM

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

Parte FCC Descrição
RIFF Parte RIFF padrão que contém um tipo de arquivo com o valor WAVE nos quatro primeiros bytes de sua seção de dados e as outras partes no arquivo no restante de sua seção de dados.
fmt Contém o cabeçalho de formato do arquivo ADPCM. Os dados nessa parte correspondem a uma estrutura ADPCMWAVEFORMAT .
data Contém os dados de áudio ADPCM codificados. Ao usar o ADPCM no XAudio2, você precisa ler o conteúdo da parte de dados em um buffer e passá-lo para uma voz de origem como membro pAudioData de uma estrutura de XAUDIO2_BUFFER . Você não precisa trocar o conteúdo da parte de dados.
smpl e wsmp Tipos de partes opcionais que contêm as informações de loop para o arquivo ADPCM. Quando você usa o ADPCM em XAudio2, os valores contidos nas partes smpl ou wsmp são usados para preencher os membros LoopBeginLoopLength e LoopCount da estrutura XAUDIO2_BUFFER . No Xbox 360, você precisa trocar os dados carregados de uma parte smpl para considerar a diferença de endianidade entre o Windows e o Xbox 360.

 

Guia de programação