Übersicht über ADPCM
Adaptive Differential Pulse Code Modulation (ADPCM) ist ein verlustbehaftetes Komprimierungsformat, das für XAudio2 implementiert wird, um zusätzliche Features zum Angeben der Größe des Komprimierungsbeispielblocks bereitzustellen. Bei einem verlustbehafteten Komprimierungsformat werden einige Daten geändert und gehen während der Komprimierung verloren. ADPCM kann Komprimierungsverhältnisse von bis zu 4:1 erreichen.
Die Implementierung von ADPCM für XAudio2 bietet zusätzliche Features zum Angeben der Größe des Komprimierungsbeispielblocks. ADPCM ermöglicht es dem Audio-Designer, eine Einstellung auszuwählen, die eine geeignete Kompromittierung von Größe, Qualität und Auflösung (zum Platzieren von Schleifenpunkten) darstellt.
XAudio2 verwendet eine geänderte Version des Microsoft ADPCM-Codecs, die die erweiterte Datenformatierung unterstützt, die zum Bereitstellen benutzerdefinierter Beispielblockgrößen erforderlich ist. Aus diesem Grund können XAudio2-Audiodaten nicht von Audio-Engines wiedergegeben werden, die diese Version des ADPCM-Codecs nicht unterstützen.
Hinweis
Derzeit ist die ADPCM-Komprimierung nur für Windows verfügbar, einschließlich XNA Game Studio Express für Windows-Bereitstellungen.
ADPCM-Codierung
Audiodaten werden mithilfe des Befehlszeilentools AdpcmEncode in ADPCM codiert.
AdpcmEncode
Um Audiodateien als ADPCM für die Verwendung mit XAudio2 zu codieren, verwenden Sie das Befehlszeilentool AdpcmEncode .
ADPCM-Decodierung
Die Softwaredecodierung von ADPCM wird in XAudio2 unterstützt.
XAudio2
Um ADPCM-codierte Daten in XAudio2 verwenden zu können, müssen Sie eine ADPCMWAVEFORMAT-Struktur mit ADPCM-spezifischen Werten initialisieren und sie als Argument an IXAudio2::CreateSourceVoice übergeben, wenn Sie eine Quellstimme erstellen. Ein Beispiel zum Laden und Wiedergeben eines Sounds in XAudio2 finden Sie unter Vorgehensweise: Wiedergeben eines Sounds mit XAudio2.
SamplesPerBlock
Die ADPCM-Komprimierung funktioniert, indem die Wellenform in Blöcke unterteilt wird und die Variation der Wellenformproben in jedem Block vorhergesagt wird. Die Größe der Blöcke wird in Stichproben gemessen. Die kleinste Blockgröße beträgt 32 Beispiele, die höchste ist 512 Beispiele.
Größere Blöcke ermöglichen eine bessere Komprimierung, was zu kleineren Dateigrößen führt, aber auf Kosten der Klangqualität und Auflösung für das Ausrichten von Schleifenpunkten.
Im Allgemeinen führt das Ändern des SamplesPerBlock-Werts zu folgenden Kompromissen:
Wenn SamplesPerBlock... | Dateikomprimierung | Klangqualität | Schleifenpunktauflösung |
---|---|---|---|
Erhöhungen (bis maximal 512) | Erhöht | Verringert | Verringert |
Abnahmen (bis zu min. 32) | Verringert | Erhöht | Erhöht |
Beschränkungen
Da ADPCM Beispielblöcke verwendet, die nacheinander ausgerichtet sind, kann eine mit ADPCM komprimierte Welle einen unvollendeten, teilweisen Block am Ende aufweisen. Der ADPCM-Decoder erzeugt für den Rest dieses Teilblocks Stille, sodass die Welle nicht nahtlos schleifen kann.
Der Wert des Parameters SamplesPerBlock wirkt sich auf die Auflösung aus, mit der Sie Wellendaten und Schleifenpunkte ausrichten können.
Wenn Sie versuchen, die Komprimierung auf eine nicht ausgerichtete Welle anzuwenden, erhalten Sie einen Fehler oder eine Warnung, je nachdem, ob die Welle in beliebigen Schleifenwiedergabeereignissen verwendet wird. Sie können keine Welle komprimieren, die in Schleifenwiedergabeereignissen verwendet wird. Entfernen Sie sie aus den Wiedergabeereignissen für Schleifen, und wenden Sie die Komprimierung erneut an.
Wenn Sie die Welle ausschließlich im Nichtschleifenmodus verwenden, gilt die Einschränkung der Beispielblockausrichtung nicht.
ADPCM-Dateistruktur
Eine ADPCM-Datei ist eine RIFF-Standarddatei mit den folgenden Blocktypen.
BlockfCC | BESCHREIBUNG |
---|---|
RIFF | Standard-RIFF-Block mit einem Dateityp mit dem Wert WAVE in den ersten vier Bytes des Datenabschnitts und den anderen Blöcken in der Datei im restlichen Datenabschnitt. |
Fmt | Enthält den Formatheader für die ADPCM-Datei. Die Daten in diesem Block entsprechen einer ADPCMWAVEFORMAT-Struktur . |
data | Enthält die codierten ADPCM-Audiodaten. Wenn Sie ADPCM in XAudio2 verwenden, müssen Sie den Inhalt des Datenblocks in einen Puffer lesen und als pAudioData-Member einer XAUDIO2_BUFFER-Struktur an eine Quellstimme übergeben. Sie müssen den Inhalt des Datenblocks nicht byte austauschen. |
smpl und wsmp | Optionale Blocktypen, die die Schleifeninformationen für die ADPCM-Datei enthalten. Wenn Sie ADPCM in XAudio2 verwenden, werden die in den smpl- oder wsmp-Blöcken enthaltenen Werte verwendet, um die LoopBeginLoopLength - und LoopCount-Member der XAUDIO2_BUFFER-Struktur aufzufüllen. Auf der Xbox 360 müssen Sie die aus einem smpl-Block geladenen Daten byte austauschen, um den Endianness-Unterschied zwischen Windows und Xbox 360 zu berücksichtigen. |
Zugehörige Themen