SDL下播放聲音文件

SDL在默認情況下,只支持WAV格式,如果要播放其他格式的文件我們能採用SDL_mixer,他支持WAV,MP3,MIDI,OGG,MOD,如果要支持更多的文件格式,我們就不得不採用其他庫了.
一. SDL 下播放WAV 格式的聲音文件.
1 步驟:
    (1) 打開WAV文件,將WAV文件中的聲音數據全部拷貝到內存.
    (2) 設置播放參數(採樣率,比特數,聲道),分配內存,將(1)中獲得的數據轉換成前面設置格式,將轉換後的數據保存到所分配的內存中.
    (3) 關閉聲音文件.
    (4) 打開聲音設備,並設置參數,這裏的參數跟(2)中設置的播放參數一致,並設置回掉函數,回調函數用於在播放每一幀數據之前,對其進行處理.
    (5) 開始播放
    (6) 播放完成後釋放(2)中所分配的內存.
    (7) 關閉聲音設備.
example:

播放時,調用函數PlaySound()即可,如:
PlaySound("test.wav);
注意:

(1) 由於回調函數是在一個獨立的線程中執行的,所以要注意保護資源,本例中的SDL_LockAudio,SDL_UnlockAudio正是起這樣的作用

(2) 由於SDL一次將WAV文件中全部數據都拷貝到內存中,所以這種播放方式只適合較小的WAV文件的播放.

二. SDL_mixer.
    前面說了,SDL默認情況下只支持WAV格式的聲音文件,如果要播放更多格式的生硬文件,我們可以採用SDL_mixer庫,他雖然只支持WAV, MP3,MIDI,OGG,MOD這幾種格式,但對於我們平常作遊戲,普通界面,完全夠用了.
1. 操作步驟.
其實,SDL_mixer的操作步驟非常簡單,甚至比直接用SDL播放WAV文件都要簡單的多.
(1) 打開聲音設備,設置播放參數(採樣率,幀格式--位數,聲道--單聲道雙聲道,幀隊列的數量)
(2) 打開聲音文件.
(3) 播放.播放是異步的,它在一個單獨的線程中執行.在播放過程中,我們可以暫停,恢復,重新播放,快進快退,停止播放.可以以漸強的方式開始播放,以漸弱的聲音停止播放.
(4) 關閉聲音設備
example

播放時調用
        Sound_Init();
        Sound_Play("123.mp3");
即可,

3.同時播放多個聲音.
   在遊戲中,我們經常遇到的是一邊在播放背景音,當執行某些操作時(如射擊,翻車等),又有一個響應的聲音,用SDL_mixer也可以做到這一點,就是用 Music和Channel,同時播放兩種聲音.這種情況下,聲音設備只需打開一次.比如,背景音樂以Music形式播放,用Mix_LoadMUS打開,Mix_PlayMusic(或其他同等功能的函數)播放,其他聲音全部以Channel的形式.用Mix_LoadWAV打開多個文件,再用Mix_AllocateChannels分配多個通道(Channels),然後用Mix_PlayChannel(或其他同等功能的函數),在不同的通道上播放,每個通道對應一個文件(前面用Mix_LoadWAV打開的文件),這樣,就可以同時播放多個(>2)個聲音

注意:
(1) 如果需要播放mp3文件,那麼在安裝SDL_mixer之前,需要安裝SMPEG(SDL MPEG),可以從這裏ftp://sunsite.auc.dk/pub/os/linux/loki/open-source/smpeg/下載,
安裝方式是:
    ./configure
    make LIBS="${LIBS} -lstdc++ -lSDL -lpthread"
(2) 如果需要播放midi文件,需要安裝插件timididy,可以從這裏http://www.libsdl.org/projects/mixer/timidity/timidity.tar.gz下載,將解壓後的文件夾timidity直接拷貝到/usr/local/lib/下即可.
(3) 如果要播放ogg文件,需要安裝libogg,可以從這裏http://www.xiph.org/ogg/下載
(3) SDL_mixer的安裝方法.
  a. X86下, ./configure;make;sudo make install;很簡單的.但必須先安裝SDL.
  b. ARM下,自動配置的腳本如下,在配置之前,我們需要修改SDL_PATH,OGG_PATH及PREFIX的值.

#!/bin/sh

SDL_PATH=/apps/src/paragui/paragui_static/install/
PREFIX=/apps/src/paragui/useful_lib/install
OGG_PATH=${PREFIX}
VORBIAS_PATH=${PREFIX}

./configure /
--prefix=${PREFIX} /
--host=arm-linux /
--enable-music-ogg  /
--enable-music-wave /
--disable-music-mp3 /
--with-sdl-prefix=${SDL_PATH} /
CC=arm-linux-gcc /
CXX=arm-linux-g++ /
CFLAGS="-I${SDL_PATH}/include /
        -I${OGG_PATH}/include/ -I${VORBIAS_PATH}/include/" /
LDFLAGS="-L${SDL_PATH}/lib/ /
        -L${OGG_PATH}/lib/ -L${VORBIAS_PATH}/lib/"

然後make;sudo make install即可

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