FMOD 快速上手

2021-09-07 23:18:19 字數 2553 閱讀 8034

聲音一向是遊戲中不可或缺的一部份,不管是動人的背景音樂或營造氣氛的音效,少了聲音就完全沒有玩遊戲的感覺,甚至許多遊戲的重點就放在聲音上,比如說利用聲音來判斷敵人的位置等等。

從遊戲開發者的角度來看,在聲音方面至少有以下的需求:

讀取音樂/音效檔案。當然,音樂資料不一定存在檔案上,也可能放在 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_bool

playing= 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_vector

pos;

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即可 也...