SDL學習筆記五(音樂播放)

    一直想寫個播放器之類的東西,但是缺少音頻文件的解碼知識,又懶得去學習,畢竟急着寫個像樣的軟件,而且自己寫解碼器需要太多時間,並且不能保證可以處理大部分情況,難免會有bug,幸好SDL再次提供了拓展庫SDL_mixer,它本身自帶的支持格式太少,不過拓展庫已經支持大部分的格式,現在來看看這些簡單且常用的函數吧!

int Mix OpenAudio(int frequency, Uint16 format, int channels, int chunksize )

這個函數用一定方式打開音頻,第一個參數是頻率Hz/s,一般使用MIX DEFAULT FREQUENCY(22050)

第二個參數是格式(其實我完全不知道是什麼= =),使用默認的MIX DEFAULT FORMAT即可

第三個參數是表示聲道,1爲單聲道,2爲雙聲道,也就是立體聲

最後一個參數大概是緩衝區什麼的,不清楚,一般設置4086,太小好像佔用CPU太多,太大也不好


反正大概就是使用默認的參數打開了音頻,然後我們可以開始加載並播放音樂了


Mix_Music *Mix LoadMUS(const char *file )

這個函數加載file制定的音樂文件,只要是支持的格式都可以

返回的結構用於播放

int Mix PlayMusic(Mix_Music *music, int loops )

播放music指定的音樂,循環播放loops+1次,如果loops爲-1,則無限循環

這裏注意下,PlayMusic函數是裏面返回的,所以必須處理到音樂停止後才退出,要不聽不到聲音就退出了

相應判斷是否在播放音樂的函數

int Mix PlayingMusic()


一個音樂文件不再播放了,就需要釋放下空間

void Mix FreeMusic(Mix_Music *music )


當然,如果只是播放一個音樂太單調了,再說遊戲經常需要有動作相應的聲音,下面來看看怎樣產生聲效

Mix_Chunk *Mix LoadWAV(char *file )

類似的,我們用這個函數來加載聲效文件,返回的結構用於播放聲效


int Mix PlayChannel(int channel, Mix_Chunk *chunk, int loops )

這個函數就是用來播放聲效的

第一個參數指定音軌來播放,一般設置爲-1表示第一個空閒音軌

第二個參數就是聲效文件

第三個參數是循環次數,與音樂相同


當然需要相應的函數來掃尾

void Mix FreeChunk(Mix_Chunk *chunk )


播放結束後相應的關掉音頻

void Mix CloseAudio()

上面這些函數對於基本的應用應該足夠了,最多再加一點控制的函數,不過一般遊戲聲音出了關掉和控制大小之外,是控制不了的,哈哈

所以暫時寫到這,等SDL基本部分學完在做個播放器總結下

恩,剩下的東西可以去看看官方的文檔,順便推薦一些聲效文件的網站http://bbs.9ria.com/thread-65247-1-1.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章