一直想寫個播放器之類的東西,但是缺少音頻文件的解碼知識,又懶得去學習,畢竟急着寫個像樣的軟件,而且自己寫解碼器需要太多時間,並且不能保證可以處理大部分情況,難免會有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