Panoramica di ADPCM
La modulazione del codice a impulsi adattivi (ADPCM) è un formato di compressione di perdita implementato per XAudio2 per fornire funzionalità aggiuntive per specificare le dimensioni del blocco di esempio di compressione. Con un formato di compressione con perdita alcuni dati vengono modificati e persi durante la compressione. ADPCM può ottenere rapporti di compressione fino a 4:1.
L'implementazione di ADPCM per XAudio2 offre funzionalità aggiuntive per specificare le dimensioni del blocco di esempio di compressione. ADPCM consente alla finestra di progettazione audio di scegliere un'impostazione appropriata tra dimensioni, qualità e risoluzione (per l'inserimento di punti ciclo).
XAudio2 usa una versione modificata del codec Microsoft ADPCM che supporta la formattazione dei dati estesa necessaria per fornire dimensioni personalizzate dei blocchi di esempio. Per questo motivo, i dati audio XAudio2 non possono essere riprodotti dai motori audio che non supportano questa versione del codec ADPCM.
Nota
Attualmente, la compressione ADPCM è disponibile solo per Windows, tra cui XNA Game Studio Express per le distribuzioni di Windows.
Codifica ADPCM
I dati audio vengono codificati in ADPCM usando lo strumento da riga di comando AdpcmEncode.
AdpcmEncode
Per codificare i file audio come ADPCM da usare con XAudio2, usare lo strumento da riga di comando AdpcmEncode .
Decodifica ADPCM
La decodifica software di ADPCM è supportata in XAudio2.
XAudio2
Per usare i dati con codifica ADPCM in XAudio2, è necessario inizializzare una struttura ADPCMWAVEFORMAT con valori specifici di ADPCM e passarlo come argomento a IXAudio2::CreateSourceVoice quando si crea una voce di origine. Per un esempio di caricamento e riproduzione di un suono in XAudio2, vedere Procedura: Riprodurre un suono con XAudio2.
SamplesPerBlock
La compressione ADPCM funziona separando la forma d'onda in blocchi e stimando la variazione dei campioni della forma d'onda all'interno di ogni blocco. Le dimensioni dei blocchi sono misurate negli esempi. Le dimensioni più piccole del blocco sono 32 e il massimo è 512 campioni.
I blocchi più grandi consentono una migliore compressione, che comporta dimensioni di file più piccole, ma a spese della qualità del suono e della risoluzione per l'allineamento dei punti ciclo.
In generale, la modifica del valore SamplesPerBlock comporta questi compromessi:
Se SamplesPerBlock... | Compressione file | Qualità audio | Risoluzione del punto ciclo |
---|---|---|---|
Aumenta (fino a max 512) | Aumenta | Diminuisce | Diminuisce |
Riduce (fino a min 32) | Diminuisce | Aumenta | Aumenta |
Restrizioni
Poiché ADPCM usa blocchi di esempio allineati uno dopo l'altro, un'onda compressa con ADPCM potrebbe avere un blocco parziale non completato alla fine. Il decodificatore ADPCM genera il silenzio per il resto di questo blocco parziale, che mantiene senza problemi l'onda.
Il valore del parametro SamplesPerBlock influisce sulla risoluzione con cui è possibile allineare i dati delle onde e i punti ciclo.
Se si tenta di applicare la compressione a un'onda non allineata, si riceverà un errore o un avviso a seconda che l'onda venga usata in qualsiasi evento di riproduzione in ciclo. Non è possibile comprimere un'onda usata in qualsiasi evento di riproduzione ciclo. Rimuoverlo dagli eventi di riproduzione ciclo e riapplicare la compressione.
Se si usa l'onda esclusivamente in modalità non ciclo, la restrizione di allineamento del blocco di esempio non si applica.
Struttura file ADPCM
Un file ADPCM è un file RIFF standard con i tipi di blocchi seguenti.
Blocco FCC | Descrizione |
---|---|
RIFF | Blocco RIFF standard contenente un tipo di file con il valore WAVE nei primi quattro byte della sezione dati e gli altri blocchi nel file nella parte restante della sezione dati. |
Fmt | Contiene l'intestazione di formato per il file ADPCM. I dati in questo blocco corrispondono a una struttura ADPCMWAVEFORMAT . |
data | Contiene i dati audio ADPCM codificati. Quando si usa ADPCM in XAudio2, è necessario leggere il contenuto del blocco di dati in un buffer e passarlo a una voce di origine come membro pAudioData di una struttura XAUDIO2_BUFFER . Non è necessario scambiare il contenuto del blocco di dati. |
smpl e wsmp | Tipi di blocchi facoltativi contenenti le informazioni di ciclo per il file ADPCM. Quando si usa ADPCM in XAudio2, i valori contenuti nei blocchi smpl o wsmp vengono usati per popolare i membri LoopBeginLoopLength e LoopCount della struttura XAUDIO2_BUFFER . Nella Xbox 360 è necessario scambiare i dati caricati da un blocco smpl per tenere conto della differenza di endianness tra Windows e Xbox 360. |
Argomenti correlati