Share via


ADPCM 概觀

調適性差異脈衝編碼 (ADPCM) 是針對 XAudio2 實作的遺失壓縮格式,可提供指定壓縮範例區塊大小的其他功能。 使用遺失壓縮格式時,某些資料會在壓縮期間改變和遺失。 ADPCM 最多可達到 4:1 的壓縮比例。

適用于 XAudio2 的 ADPCM 實作提供額外的功能,以指定壓縮範例區塊的大小。 ADPCM 可讓音訊設計工具選擇大小、品質及解析度 (適當的設定,以便將迴圈點放在) 。

XAudio2 使用 Microsoft ADPCM 編解碼器的修改版本,支援提供自訂範例區塊大小所需的擴充資料格式設定。 基於這個理由,XAudio2 音訊資料無法由不支援此 ADPCM 編解碼器版本的音訊引擎播放。

注意

目前,ADPCM 壓縮僅適用于 Windows,包括適用于 Windows 部署的 XNA Game Studio Express。

 

ADPCM 編碼

音訊資料會使用 AdpcmEncode 命令列工具編碼為 ADPCM。

  • AdpcmEncode

    若要將音訊檔案編碼為 ADPCM 以搭配 XAudio2 使用,請使用 AdpcmEncode 命令列工具。

ADPCM 解碼

XAudio2 支援 ADPCM 的軟體解碼。

SamplesPerBlock

ADPCM 壓縮的運作方式是將電壓分成幾個區塊,並預測每個區塊內的電壓樣本變化。 區塊的大小是以樣本來測量。 最社區塊大小為 32 個樣本,最高為 512 個樣本。

較大的區塊允許較佳的壓縮,這會導致較小的檔案大小,但為了符合迴圈點的音效品質和解析度而犧牲。

一般而言,修改 SamplesPerBlock 值會導致這些取捨:

如果 SamplesPerBlock... 檔案壓縮 音效品質 迴圈點解析
增加最多 512) ( 增加 減少 減少
減少 (到最小 32) 減少 增加 增加

 

Restrictions

因為 ADPCM 使用彼此對齊的範例區塊,所以以 ADPCM 壓縮的波段在其結尾可能有未完成的部分區塊。 ADPCM 解碼器會針對這個部分區塊的其餘部分產生無聲,讓波無法順暢地迴圈。

SamplesPerBlock參數的值會影響您可以對齊波浪資料和迴圈點的解析度。

如果您嘗試將壓縮套用至非對齊的波浪,則根據波浪是否在任何迴圈播放事件中使用,您會收到錯誤或警告。 您無法壓縮任何迴圈播放事件中使用的波。 從迴圈播放事件中移除它,然後重新套用壓縮。

如果您在非迴圈模式中單獨使用波,範例區塊對齊限制不適用。

ADPCM 檔案結構

ADPCM 檔案是具有下列區塊類型的標準 RIFF 檔案。

區塊 TCP 描述
RIFF 標準 RIFF 區塊,其中包含其資料區段前四個位元組中值為 WAVE 的檔案類型,以及其其餘資料區段中檔案中的其他區塊。
Fmt 包含 ADPCM 檔案的格式標頭。 此區塊中的資料會對應至 ADPCMWAVEFORMAT 結構。
資料 包含編碼的 ADPCM 音訊資料。 當您在 XAudio2 中使用 ADPCM 時,必須將資料區塊的內容讀入緩衝區,並將其傳遞至來源語音作為XAUDIO2_BUFFER結構的pAudioData成員。 您不需要位元組交換資料區塊的內容。
smpl 和 wsmp 選擇性區塊類型,其中包含 ADPCM 檔案的迴圈資訊。 當您在 XAudio2 中使用 ADPCM 時,smpl 或 wsmp 區塊中包含的值會用來填入XAUDIO2_BUFFER結構的LoopBeginLoopLengthLoopCount成員。 在 Xbox 360 上,您必須位元組交換從 smpl 區塊載入的資料,以考慮 Windows 與 Xbox 360 之間的端位差異。

 

程式設計指南