接下來將介紹遊戲中不可或缺的要素,那就是音樂或是音效等聲音,一個遊戲如果沒有了聲音,姑且不論它是否好玩有趣,想必也沒什麼好玩的了,因為聲音可以用來幫助我們融入這個遊戲的情境,適時的使用聲音可以使玩家更快的融入遊戲當中,所以就必須了解一下XNA在聲音上是如何處理的。
之前介紹了一下XNA在音效處理上是使用了XACT這個工具來處理聲音,下面就會真正來介紹如何來實現它和它操作的流程。
設定XACT專案:
開啟XACT之後,必須先將專案存在指定的地方,之後才可以開始設定專案裡的東西。
之後在右方Wave Banks上按右鍵選取New Wave Bank。
然後在右方Sound Banks上按右鍵選取New Sound Bank。
之後在Wave Bank的視窗上按右鍵選取Insert Wave File之後去選你要放在遊戲中的音樂或音效。
再來就是將Wave Bank視窗中所有的聲音檔用拖移的方式拉到Sound Bank的視窗中,CueName有顯示出檔名才代表成功。
之後就調整一下聲音檔的一些控制,像是循環播放幾次或是聲音大小等設定,需要注意的是Loop Count=0,是代表不重複播放,故聲音只會發生一次,而我們在遊戲中所使用的音效就是需要設定為0,而背景音樂則必須勾選intinite,代表無限撥放,調整完之後必須存檔,設定在程式中才能夠有效。
播放音效程式流程:
將XACT專案設定完畢之後就可以開始在我們的程式上使用,開啟程式後必須先將專案放入Content裡面以便程式讀取,這裡不需要將音樂檔也加入到專案中,但是音樂檔還是必須要放在該專案的Content目錄裡面,以供XACT專案檔能夠搜尋的到。
然後在程式一開始必須先宣告會使用到的變數AudioEngine、WaveBank、SoundBank。



AudioEngine最主要就是要來讀取XACT(.xgs)的專案,WaveBank是聲音檔(.WAV)的集合,也就是加入到專案到WAV檔案,而SoundBank是cue的集合,在使用前先在Initialize在函數中宣告它們所讀取到檔案的位置,



在AudioEngine函數裡面需要填入你想要讀取的XACT專案的名稱,副檔名是xgs,WaveBank函數裡面則是填入你在聲音專案中WaveBanks所取的名稱,副檔名是xwb,SoundBank函數裡面則是填入你在聲音專案中SoundBanks所取的名稱,副檔名是xsb,這裡需要注意的是路徑位置,路徑位置是輸入編譯後的檔案位置,預設的情況下都會在編譯完的檔案都會放在該專案資料夾/bin/x86/debug/Content底下,因此我們在輸入路徑時就必須在加上「Content\\」,表示在這個資料夾底下。
在來就是真正的播放聲音了,剛剛說SoundBank是Cue的集合,所以就是需要用到它裡面的成員函數PlayCue,裡面要填入的就是WAV的檔名,但不需要
輸入副檔名.wav。

播放音效程式範例:

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27 public Game1()
28

29

GraphicsDeviceManager(this);
30

31

32

33 protected override void Initialize()
34

35

36

37

38

39

40

41 protected override void LoadContent()
42

43

44

45

46 protected override void UnloadContent()
47

48

49

50 protected override void Update(GameTime gameTime)
51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71 protected override void Draw(GameTime gameTime)
72

73

74

75

76

77

78
此範例還加入了鍵盤按鍵的控制,按鍵A和S有個別的聲音,在被按下的時候才會發出聲音。
最後附上播放音效專案檔:test-voice.rar
- 本文固定链接: http://www.wy182000.com/2009/02/16/xna-播放聲音/
- 转载请注明: wy182000 于 Studio 发表