Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2087831
  • 博文数量: 413
  • 博客积分: 10926
  • 博客等级: 上将
  • 技术积分: 3862
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-09 18:14
文章分类

全部博文(413)

文章存档

2015年(5)

2014年(1)

2013年(5)

2012年(6)

2011年(138)

2010年(85)

2009年(42)

2008年(46)

2007年(26)

2006年(59)

分类: LINUX

2006-04-13 14:42:03

二. 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即可

阅读(3131) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~