聲音一向是遊戲中不可或缺的一部份,不管是動人的背景音樂或營造氣氛的音效,少了聲音就完全沒有玩遊戲的感覺,甚至許多遊戲的重點就放在聲音上,比如說利用聲音來判斷敵人的位置等等。
從遊戲開發者的角度來看,在聲音方面至少有以下的需求:
讀取音樂/音效檔案。當然,音樂資料不一定存在檔案上,也可能放在 cd 音軌上,甚至使用 streaming 的方式由網路傳輸 (很少見,但也並非不可能)。
各種聲音效果,比如設定聲源的位置以模擬方向與遠近的不同,或是設定速度來模擬運動物體的都卜勒效應 (dopplar effect),甚至各種 dsp 處理等等。
而我今天要講的,稱之為 fmod 的音效函式庫,正具備了以上所有功能。除此之外,它也有跨平台的優點,除了 windows 外,也支援 macos、linux 甚至所有的次世代主機,如 ps3、xbox 360、wii 等等。而且在非商業用途下完全免費,是個很理想的音效解決方案。
廢話不多說,下面就來講 fmod 的使用。
在 fmod 中主要有三種物件:system、sound 以及 channel。因為我才用乙個晚上而已,所以像是 channelgroup、dsp 及 geometry 的部份就不深入了…
一開始我們要先產生乙個 system 物件,這可以用 fmod_create_system 達成:
fmod_system* sys
;fmod_resultr=
fmod_create_system(&
sys);if
(r!= fmod_ok
)
所有 fmod 的函式都會傳回 fmod_result 作為結果,我們可以檢查它是否等於 fmod_ok 來判斷是否有錯誤發生。為了簡單起見,下面的程式碼中我會把這些檢查省略。(開始寫遊戲時可別省啊!)
接下來是對 system 初始化,並且載入一段 *** 聲音:
fmod_system_init(sys
, 32
, fmod_init_normal, 0
);fmod_sound
* sound
;fmod_system_createsound
(sys, "
test.***",
fmod_default, 0
, &sound);
而 fmod_system_createsound 則會產生乙個 sound 物件。第乙個引數同樣是 system,第二個則是我們要載入的聲音檔名稱,fmod 會自行判斷檔案格式並把它解壓縮。如果想用壓縮或串流的方式讀檔,則需要設定第三個引數,這邊我們就先使用預設值。
最後就是把聲音放出來:
fmod_channel* channel
;fmod_system_playsound
(sys
, fmod_channel_free
, sound, 0
, &channel);
fmod_boolplaying= 1
;while
(playing
)
我使用了 unix 上的 usleep,因此迴圈中的程式碼每 0.01 秒會執行一次。windows 上則改用 sleep。
fmod_sound_release(snd);
fmod_system_release
(sys);
fmod_system_createsound(sys,"
test.***",
fmod_loop_off
| fmod_3d
| fmod_hardware,0
,&sound);
接下來我們可以用 fmod_channel_set3dattributes 來設定 channel 在空間中的位置及速度:
fmod_vectorpos;
pos.x=
0.0f
;pos.y
= 0.0f;
pos.z=
2.0f
;fmod_channel_set3dattributes
(channel
, &pos
, null);
第二個引數即為位置,使用者預設是位於 (0,0,0) 的地方,前方為正z軸,左方為正x,上方為正y。第三個引數則是速度,如果不需要模擬都卜勒效應,給 null 即可。
上面的程式碼會把音源放在使用者前方兩個單位的位置。當然,如果聲源不會移動,就沒有意思了:
while(playing
)
fmod 在使用上還滿簡單的,複雜的解壓縮、混音、硬體控制等全部都被包裝起來,因此遊戲製作人員不需要再花額外的功夫處理。唯一不滿的地方就是它的 c++ inte***ce 實在設計不良,完全沒有用到 c++ 威力 (連 oop 都沾不上邊),這也是為什麼我都使用 c inte***ce 的原因:兩者並沒有明顯的不同。
ibatis 快速上手
簡介 例子 現在我們我們通過乙個簡單的案例,了解如何通過ibatis解決資料訪問問題。現在有有乙個資料庫,資料庫裡面有一張人員資訊表 需求是這樣 通過乙個web應用程式顯示人員資訊表裡面的資訊,並且可以新增 修改 刪除人員記錄 乙個並不複雜的案例,但是它覆蓋所有開發首先要學習的內容。第1步 the ...
Pro C快速上手
條件 winxp vc 6 裝在c program files microsoft visual studio vc98 oracle 9 裝在e oracle ora90 步驟 1 dos視窗設定環境變數,預編譯 oralce 給的關於pro c 例子 2 設定vc 環境 3 編譯執行 c程式。具...
Apache James快速上手
2,配置 2.1,環境配置 apache james執行需要jvm,保證所在主機安裝jdk即可 2.2,埠配置 apache james 使用到的埠包括 pop3埠 110 smtp埠 25 2.3,啟動應用 配置完畢james後,就可以啟動了,啟動命令很簡單,只需要執行bin run.sh即可 也...