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 檔案的所有音訊資料都以單一緩衝區提交,且使用者想要對其進行迴圈播放,則必須符合下列限制。- XAUDIO2_BUFFER.LoopBegin 必須一律為零。
- XAUDIO2_BUFFER.LoopLength 必須為零,或是整個檔案之 xWMA 資料的大小 (以樣本為單位)。
- XAUDIO2_BUFFER.LoopCount 可以是任何值。
- XAUDIO2_BUFFER.Flags 必須設為 XAUDIO2_END_OF_STREAM。
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 結構。 |
