大略瀏覽「XNA Game Studio 2.0 Audio」的一些筆記~
XACT的部分詳見「XNA Game Studio Express 聲音與 XACT」
AudioEngine、SoundBank、WaveBank
WaveBank – 聲音的來源檔。
SoundBank – 聲音的超資料(meta-data)。
Cue(位於SoundBank底下) – 程式端的介面,也就是只能透過cue進行作業。
// 宣告
AudioEngine engine;
SoundBank soundBank;
WaveBank waveBank;
// 初始化
engine = new AudioEngine("Content\\Audio\\PlaySound.xgs");
soundBank = new SoundBank(engine, "Content\\Audio\\Sound Bank.xsb");
waveBank = new WaveBank(engine, "Content\\Audio\\Wave Bank.xwb");
直接播放某個cue
soundBank.PlayCue("kaboom");
取得某個cue的指標(也就是可以直接透過這個指標進行作業)
// 宣告 Cue
Cue cue;
// 取得 Cue
cue = soundBank.GetCue("music");
// 播放 Cue
cue.Play();
// 回復(繼續播放) Cue
cue.Resume();
// 暫停 Cue
cue.Pause();
// 如果該cue被停止(Stopped),須要重新建立一個cue指標
cue = soundBank.GetCue(cue.Name);
cue.Play();
調整音量大小
須要透過種類(Category)來調整音量大小,種類如何產生,詳見「Working With XACT Categories」
// 宣告 Category
AudioCategory musicCategory;
// 取得 Category
musicCategory = engine.GetCategory("Music");
// 設定 Category 的音量
musicCategory.SetVolume(musicVolume);
3D音效部分可分為發聲者(Emitter)以及傾聽者(Listener)。
// 宣告 AudioEmitter 和 AudioListener
AudioEmitter emitter = new AudioEmitter();
AudioListener listener = new AudioListener();
要注意的是,如果要啟用3D效果,要在播放(Play)之前就先啟動功能。
// 先套用3D效果,參數分別就是傾聽者和發聲者
cue.Apply3D(listener, emitter);
// 之後再撥放
cue.Play();
之後在更新(Update)時,也是先將發聲者與傾聽者的新位置套上去後,在更新engine。
// 套用3D設定
emitter.Position = objectPos;
cue.Apply3D(listener, emitter);
// 更新聲音引擎
engine.Update();
最後一部份的效果處理(聲音衰退、都卜勒效應)暫時先擱著。
嗯~真是很隨性的一篇!
過著年,code的手感消失,先來摸摸簡單的音效部分找回手感XDD