英吋 XNA

XNA – XACT小筆記

大略瀏覽「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

–End

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.