自適性差異脈衝程式代碼調節器 (ADPCM) 是針對 XAudio2 實作的遺失壓縮格式,可為指定壓縮範例區塊的大小提供其他功能。 使用遺失壓縮格式時,某些數據會在壓縮期間改變和遺失。 ADPCM 最多可達到 4:1 的壓縮比例。
ADPCM for XAudio2 的實作會提供其他功能來指定壓縮範例區塊的大小。 ADPCM 可讓音訊設計工具選擇在大小、品質和解析度之間適當妥協的設定(用於放置迴圈點)。
XAudio2 使用已修改版本的 Microsoft ADPCM 編解碼器,支援提供自定義範例區塊大小所需的擴充數據格式。 因此,不支援此 ADPCM 編解碼器版本的音訊引擎無法播放 XAudio2 音訊數據。
注意
目前,ADPCM 壓縮僅適用於 Windows,包括 XNA Game Studio Express 在 Windows 平台上的部署。
ADPCM 編碼
音訊數據會使用 AdpcmEncode 命令行工具編碼為 ADPCM。
AdpcmEncode
若要將音訊檔案編碼為 ADPCM 以搭配 XAudio2 使用,請使用 AdpcmEncode 命令行工具。
ADPCM 解碼
XAudio2 支援 ADPCM 的軟體譯碼。
XAudio2
若要在 XAudio2 中使用 ADPCM 編碼的數據,您必須使用 ADPCM 特定值初始化 ADPCMWAVEFORMAT 結構,並在建立來源語音時將它當做自變數傳遞給 IXAudio2::CreateSourceVoice。 如需在 XAudio2 中載入和播放音效的範例,請參閱 如何:使用 XAudio2 播放音效。
每個區塊的樣本
ADPCM 壓縮的運作方式是將超聲波分成區塊,並預測每個區塊內的電壓樣本變化。 區塊的大小是以樣本進行測量。 最小區塊大小為 32 個樣本,最高為 512 個樣本。
較大的區塊允許更好的壓縮,這會導致較小的檔案大小,但犧牲聲音品質和解析度來對齊迴圈點。
一般而言,修改 SamplesPerBlock 值會導致這些取捨:
如果 SamplesPerBlock... | 檔案壓縮 | 音效品質 | 迴圈點解析 |
---|---|---|---|
增加 (最多 512) | 增加 | 減少 | 減少 |
減少 (降到最小 32) | 減少 | 增加 | 增加 |
限制
因為 ADPCM 使用彼此對齊的範例區塊,因此以 ADPCM 壓縮的波段在其結尾可能有未完成的部分區塊。 ADPCM 解碼器會為此部分區塊的其餘部分產生靜音,防止波形順暢地迴圈。
SamplesPerBlock 參數的值會影響您可以對齊波浪數據和迴圈點的解析度。
如果您嘗試將壓縮套用至未對齊的音波,會收到錯誤或警告,這取決於該音波是否用於任何迴圈播放事件。 您無法壓縮任何循環播放活動中使用的音波。 將它從迴圈播放事件中移除,然後重新套用壓縮。
如果您只在非迴圈模式下使用波形,則不會套用樣本區塊對齊限制。
ADPCM 檔案結構
ADPCM 檔案是具有下列區塊類型的標準 RIFF 檔案。
區塊 FCC | 描述 |
---|---|
RIFF | 標準 RIFF 區塊,其中包含其數據區段前四個字節中值為 WAVE 的檔類型,以及其數據區段其餘部分檔案中的其他區塊。 |
fmt | 包含 ADPCM 檔案的格式標頭。 此區塊中的數據對應至 ADPCMWAVEFORMAT 結構。 |
數據 | 包含編碼的 ADPCM 音訊數據。 當您在 XAudio2 中使用 ADPCM 時,必須將數據區塊的內容讀入緩衝區,並將其傳遞至來源語音,作為 XAUDIO2_BUFFER 結構 pAudioData 成員。 您不需要調換資料區塊內容的位元組。 |
smpl 和 wsmp | 選擇性區塊類型,包含 ADPCM 檔案的循環資訊。 當您在 XAudio2 中使用 ADPCM 時,smpl 或 wsmp 區塊中包含的值會用來填入 LoopBeginLoopLength 和 LoopCountXAUDIO2_BUFFER 結構的成員。 在 Xbox 360 上,由於 Windows 與 Xbox 360 之間的位元組序差異,您需要對從 smpl 區塊載入的數據進行位元組交換。 |
相關主題