1. 怎麼做聲音間切換時的淡入淡出效果?
(1)對於背景音樂: 把所有背景音樂歸為一個分類(catigory), 如Music, 屬性設這樣:
(2)對於音效: 建立一個RPC, 在把裡面的參數設定成AttackTime/ReleaseTime控制Volume的, 然後根據需要繪製一個音量隨時間變化的曲線, 再把需要這個效果的sound全attach到這個RPC上就OK.
2. 怎麼壓縮音頻檔案? wav太佔地方
XACT在打包時會把wav(源檔案)進行格式轉換, 支援ADPCM和xWMA兩種壓縮格式. 做法: 首先在"Compression Presents"上按右鍵, 選擇"New Compression Present", 然後在其屬性面板上選擇相應的壓縮格式, 如WMA, 還可以調節品質(quality)參數. 然後, 在需要進行壓縮的WaveBank的屬性面板中選擇剛才建立的Compression Present, 編譯工程就可以看到效果了.
3. 為什麼我的3D音效沒有距離感? 就是說音量沒有近大遠小的效果
關於音量的距離衰減, 這屬於RPCs的一部分. 我們需要對所有需要有這個效果的sound指定一個RPC Present. 建立一個RPC Present, 雙擊開啟參照進行設定, 再把這個Present拖動到指定sound就OK了:
4. 為什麼我的wav檔案XACT不識別?
XACT只支援PCM格式的音頻, 建議統一使用PCM 16bit 44100 stereo格式的wav檔案做為源檔案.
5. 為什麼在XACT工具中試聽聲音時程式會卡死變成無響應?
試聽之前需要先運行"Audio Console", 這相當於一個伺服器端. 另外, 由於連接埠80被佔用, 在開了IIS等web伺服器機器上也會出現串連失敗的現象.
6. 怎樣全部隨機播放多個sound中的一個?
把選中多個sound拖動到一個cue上面, 在cue的右側列表裡已經顯示出各個sound的名字和播放機率. 預設的播放方式就是"Random(no immediate repeats), 在程式中只需要一個cue名字就可以全部隨機播放多個聲音了. 另外, 也可以通過在sound的"Play Wave"下掛接多個wave來實現.
7. 怎樣迴圈播放一個cue?
在cue對應的sound屬性中選中"Looping"下的"Infinite", 即無限迴圈.
8. 怎麼樣在程式運行時調節音量?
一種方法是IXACT3Engine::SetVolume來控制整個分類的音量, 另一種方法是建立一個Gobal Variable, 通過RPC來進行控制:
當然, 程式跟XACT進行互動的媒介就是這個"MusicVolume"變數, IXACT3Engine::SetGlobalVariable/IXACT3Engine::GetGlobalVariable
9. 為什麼互動式(interactive)cue播放完後不會自動停止?
interactive cue可以看作有"on/off"兩種狀態, 從Play開始, 保持"on"狀態, 直到"Stop()"結束才變成"off"(即銷毀). 在播放完一個sound後, cue進入"(stop)" transaction state, 等待變數的改變, 並不會自動結束自己. 這時候改變相關變數的值會引發一個新的sound播放, 當然在transaction中可以設定更加複雜的聲音切換與過渡...
10. 怎樣加速播放聲音?
其實, 升高Pitch(音調)就是加速播放. XACT中的音調範圍是(-12~12), 經我用秒錶計算大約是0.5倍速~2倍速(-_-). 調節音調的方法跟音量一樣, 都是通過RPC來完成的. 參見8
11. 為什麼流式載入的音樂有時播放不連續?
如果不定期調用IXACT3Engine::DoWork(), 流式載入的緩衝播放完畢後聲音就會斷掉. 所以, 把這個調用放入一個獨立的線程才不會受制於主迴圈的調用頻率影響.