Share via


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

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.

 

Programmierhandbuch