2011年8月10日星期三

KAG教學---雨聲.人聲.敲門聲,播放音效(1)

(k ゚∀゚)<在一般AVG遊戲中,不時會用到音效,例如點擊選項音效、各種場景的音效等,甚至如果遊戲有語音,事實上也是用音效方法來播放,今次我們會介紹如何加上音效。

(k ゚∀゚)<正如上次介紹背景音樂所提及到,在不附加任何插件的情況下,吉里吉里所支援音樂格式有3種,包括有無壓縮的RIFF-WAVE格式(wav檔案)、MIDI(midi檔案)和CD-DA。

(k ゚∀゚)<吉里吉里內置了一個播放Ogg Vorbis格式的插件,ogg 檔案的好處是檔案容量比較小,使用時需要載入wuvorbis.dll這插件。

(k ゚∀゚)<吉里吉里還內置了其他的播放插件,包括TCWF和Microsoft ADPCM格式,不過我從來沒有聽過TCWF這格式,也找不到有關的資料,所以不介紹它了,而Microsoft ADPCM格式則是經過壓縮的wav 檔案,由於副檔案一樣,若果發生無法播放wav 檔案的情況可能就是這個原因,使用時需要載入wumsadp.dll這插件。

(k ゚∀゚)<但吉里吉里沒有內置任何播放mp3格式的插件,原本初期的吉里吉里的確附有wump3.dll這個播放mp3格式的插件,不過貌似是因為mp3的專利權問題而不提供,不過網絡上還能找到這插件,有興趣可以嘗試尋找一下。

(k ゚∀゚)<載入插件的方法可參考KAG教學---載入插件,loadplugin 這教學。

(k ゚∀゚)<不過我們不能把MIDI和CD-DA格式來做音效,我們會用wav檔案、ogg檔案或mp3檔案來做音效,相比背景音樂,音效的長度比較短,即使是wav檔案也不會太大。

(k ゚∀゚)<不同於背景音樂,吉里吉里可以同時播放多個音效,而不同的音效可存放在音效緩衝區(buffer)來進行同時播放,不同的音效存放在不同的緩衝區。

那麼可以同時播放多少個音效?>( ゚ω゚ s)

(k ゚∀゚)<音效緩衝區的數量受到Config.tjs 中的numSEBuffers 控制,在不修改的情況下,可使用3個音效緩衝區。

(k ゚∀゚)<我們可使用[playse]來播放音效,以下是範例。

[playse storage="se1"]
播放SE1

(k ゚∀゚)<[playse]的storage屬性指定檔案名稱,若果無法播放的話,可嘗試加上副檔名。

(k ゚∀゚)<當需要同時播放多個音效的時候,可以用buf屬性來指定放在哪個緩衝區,其值可設定0或以上的整數,而如果忽略這屬性,吉里吉里會預設為0,以下是範例。

[playse storage="se1" buf=0]
[playse storage="se2" buf=1]
同時播放SE1和SE2

(k ゚∀゚)<若果希望重複播放音效的話,可以用loop屬性來設定是否重複播放,當數值為true,音效就會重複播放,以下是範例。

[playse storage="se1" loop=true]
播放SE1

咦?有什麼時候會重複播放音效?>( ゚ω゚ s)

(k ゚∀゚)<通常是一些背景音效,例如人聲、蟬鳴聲等,一般播放的時間會較長,當想停止播放時,可以使用[stopse]來停止,看看以下的範例。

[playse storage="se1" loop=true]
播放SE1[p][cm]
[stopse]
停止播放SE1

可以指定某個音效停止?>( ゚ω゚ s)

(k ゚∀゚)<當然可以,只要用buf屬性就可以指定停止哪個緩衝區的音效,如果忽略這屬性,吉里吉里會預設為0,以下是範例。

[playse storage="se1" buf=0 loop=true]
播放SE1[p][cm]
[stopse buf=0]
停止播放SE1

(k ゚∀゚)<相反地,我們可以等待音效播放結束才繼續,[ws]可以用來等待,看看以下的範例。


[playse storage="se1"]
播放SE1
[ws]
[p][cm]
播放完SE1了

(k ゚∀゚)<請留意在音效重複播放的情況(即是loop=true),[ws]是無效的,同樣地只要用buf屬性就可以指定停止哪個緩衝區的音效。

(k ゚∀゚)<[ws]還有一個屬性canskip,可以設定[ws]可否被skip略過,若果是true,[ws]被skip略過,不會等待音效播放結束。

(k ゚∀゚)<今次最後介紹的是音效的淡入淡出,相比背景音樂,音效比較少用到這功能,我們
可用[fadeinse]和[fadeoutse]來進行淡入和淡出,用法和擁有的屬性大致上跟[playse]和[stopse]一樣,只是增加了一個time屬性,設定淡入或淡出所需的時間,以微秒(ms)為單位,以下是範例。

[fadeinse storage="se1" loop=true time=3000]
播放SE1[p][cm]
[fadeoutse time=3000]
停止播放SE1

(k ゚∀゚)<一般是播放時間較長的音效才用到,因為播放時間短的音效還沒有淡入淡出就已經播放完。

話說看著這篇教學,總覺得有似曾相識的感覺......>( ゚ω゚ s)

(k ゚∀゚)<因為播放背景音樂和音效的方法其實差不多,所以有部分是直接複製過來,請大家見諒。

(k ゚∀゚)<大致上介紹得差不多,下次再見吧!

1 則留言: