二. SDL_mixer.
前面说了,SDL默认情况下只支持WAV格式的声音文件,如果要播放更多格式的生硬文件,我们可以采用SDL_mixer库,他虽然只支持WAV,
MP3,MIDI,OGG,MOD这几种格式,但对于我们平常作游戏,普通界面,完全够用了.
1. 操作步骤.
其实,SDL_mixer的操作步骤非常简单,甚至比直接用SDL播放WAV文件都要简单的多.
(1) 打开声音设备,设置播放参数(采样率,帧格式--位数,声道--单声道双声道,帧队列的数量)
(2) 打开声音文件.
(3) 播放.播放是异步的,它在一个单独的线程中执行.在播放过程中,我们可以暂停,恢复,重新播放,快进快退,停止播放.可以以渐强的方式开始播放,以渐弱的声音停止播放.
(4) 关闭声音设备
2. example
int Sound_Init()
{
const int TMP_FREQ = MIX_DEFAULT_FREQUENCY;
const Uint16 TMP_FORMAT = MIX_DEFAULT_FORMAT;
const int TMP_CHAN = 2;
const int TMP_CHUNK_SIZE = 512;
return Mix_OpenAudio(TMP_FREQ,TMP_FORMAT,TMP_CHAN,TMP_CHUNK_SIZE);
}
int Sound_Play(const char *file_name)
{
Mix_Music *mix_music;
debug("Enter %s\n",__func__);
if((mix_music = Mix_LoadMUS(file_name)) == NULL)
{
debug("call Mix_LoadMUS failed:%s\n",Mix_GetError());
return -1;
}
if(Mix_PlayMusic(mix_music,-1) == -1)
{
debug("call Mix_PlayMusic failed\n");
return -1;
}
debug("after call Mix_PlayMusic\n");
return 0;
}
播放时调用
Sound_Init();
Sound_Play("123.mp3");
即可,
3.同时播放多个声音.
在游戏中,我们经常遇到的是一边在播放背景音,当执行某些操作时(如射击,翻车等),又有一个响应的声音,用SDL_mixer也可以做到这一点,就是用
Music和Channel,同时播放两种声音.这种情况下,声音设备只需打开一次.比如,背景音乐以Music形式播放,用打开,(或其他同等功能的函数)播放,其他声音全部以Channel的形式.用打开多个文件,再用分配多个通道(Channels),然后用(或其他同等功能的函数),在不同的通道上播放,每个通道对应一个文件(前面用打开的文件),这样,就可以同时播放多个(>2)个声音
注意:
(1) 如果需要播放mp3文件,那么在安装SDL_mixer之前,需要安装SMPEG(SDL MPEG),可以从这里下载,
安装方式是:
./configure
make LIBS="${LIBS} -lstdc++ -lSDL -lpthread"
(2) 如果需要播放midi文件,需要安装插件timididy,可以从这里下载,将解压后的文件夹timidity直接拷贝到/usr/local/lib/下即可.
(3) 如果要播放ogg文件,需要安装libogg,可以从这里下载
(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即可
阅读(3136) | 评论(0) | 转发(0) |