Skip to main content
xWMA 是 Windows Media Audio (WMA) Professional 壓縮格式的子集。XAudio2 以軟體支援 xWMA 解碼。xWMA 以輕量包裝函式使用 WMA 位元串流格式,適用於可以負擔少量 CPU 使用量以換取更高壓縮率的對話和音樂。品質設定可讓使用者變更壓縮聲音的位元速率。
xWMA 和 XMA2 都源自為 Windows Media Audio (WMA) 開發的轉碼器,而且兩者都是專為 XBOX 遊戲所開發。XMA2 所使用的可用轉碼器與參數子集比 xWMA 所使用的子集小。雖然 xWMA 和 XMA2 都是為 XBOX 開發的,但兩者不能互換:每種檔案格式的標頭都不同,而且這些格式與 PC 版 Windows 不相容。XMA2 和 xWMA 使用的轉碼器也略有不同,因此各自會因所使用的壓縮系統而產生自己的失真。
本主題內容:

xWMA 編碼

若要將音訊資料編碼為 xWMA,請使用 xWMAEncode 命令列工具,或依賴 XWMAEncoder.lib 的自訂工具。

xWMAEncode

若要將音訊檔案編碼為 xWMA 以搭配 XAudio2 使用,請使用 xWMA 命令列編碼器。

XWMAEncoder.lib

XWMAEncoder.lib 是靜態連結的程式庫,可作為 xWMA 命令列編碼器命令列工具的替代方案。您的自訂工具可依賴此程式庫,透過 XWMAEncoder 函式執行 xWMA 編碼。如需使用此函式的詳細資訊和範例,請參閱 XBOX 360 文件。

xWMA 解碼

Windows 和 XBOX One 上的 XAudio2 支援 xWMA 的軟體解碼,也可透過 xWMADecode API 進行。

xWMA 迴圈播放

xWMA 不支援迴圈區域,也不支援在 xWMA 檔案中對任意封包進行迴圈播放。只能對整個 xWMA 檔案進行迴圈播放。在 XAudio2 中,xWMA 對傳遞給 IXAudio2SourceVoice::SubmitSourceBuffer 之 XAUDIO2_BUFFER 中的值有與迴圈播放相關的限制。如果 xWMA 檔案的所有音訊資料都以單一緩衝區提交,且使用者想要對其進行迴圈播放,則必須符合下列限制。
  1. XAUDIO2_BUFFER.LoopBegin 必須一律為零。
  2. XAUDIO2_BUFFER.LoopLength 必須為零,或是整個檔案之 xWMA 資料的大小 (以樣本為單位)。
  3. XAUDIO2_BUFFER.LoopCount 可以是任何值。
  4. XAUDIO2_BUFFER.Flags 必須設為 XAUDIO2_END_OF_STREAM。
如果 xWMA 音訊資料以多個緩衝區提交,則只能透過重新提交一系列緩衝區來手動迴圈播放音訊。 由於 xWMA 音訊迴圈播放時可能會產生一段靜音,因此 xWMA 音訊的迴圈播放一般應只用於具有平滑淡入和淡出的聲音。範例包括海浪聲和某些細微的環境噪音。

xWMA 檔案的結構

xWMA 檔案是具有下列區塊類型的標準 RIFF 檔案。 | 區塊 FCC| 描述| | --- | --- | --- | --- | | RIFF| 標準 RIFF 區塊包含下列內容:
1. 在其資料區段的前四個位元組中,包含值為 XWMA 的檔案類型。
2. 在資料區段的其餘部分,包含檔案中的其他區塊。 | | fmt| 此區塊包含 xWMA 檔案的格式標頭。此區塊中的資料對應於具有一或兩個聲道之 xWMA 資料的 WAVEFORMATEX 結構,或對應於具有三個以上聲道之 xWMA 資料的 WAVEFORMATEXTENSIBLE 結構。 | | data| 此區塊包含編碼的 xWMA 音訊資料。在 XAudio2 中使用 xWMA 時,data 區塊的內容會讀入緩衝區,並作為 XAUDIO2_BUFFER 結構的 pAudioData 成員傳遞給來源語音。data 區塊的內容不需要進行位元組交換。 | | dpds| 此區塊包含已解碼封包的累計資料大小陣列,其中每個元素是依序解碼對應的 xWMA 封包後所累計的位元組數。此區塊的大小 (以 UINT32 測量) 及其資料區段的內容,在 XAudio2 中用於填入 XAUDIO2_BUFFER_WMA 結構。 |

另請參閱

xWMA 命令列編碼器
Last modified on October 6, 2026