Chinaunix首页 | 论坛 | 博客
  • 博客访问: 30820956
  • 博文数量: 230
  • 博客积分: 2868
  • 博客等级: 少校
  • 技术积分: 2223
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-08 21:48
个人简介

Live & Learn

文章分类

全部博文(230)

文章存档

2022年(2)

2019年(5)

2018年(15)

2017年(42)

2016年(24)

2015年(13)

2014年(1)

2012年(5)

2011年(58)

2010年(56)

2009年(9)

我的朋友

分类: 嵌入式

2010-09-07 09:37:09

二. SDL_mixer. 前面说了,SDL默认情况下只支持WAV格式的声音文件,如果要播放更多格式的生硬文件,我们可以采用SDL_mixer库,他虽然只支持WAV, MP3,MIDI,OGG,MOD这几种格式,但对于我们平常作游戏,普通界面,完全够用了. 1. 操作步骤. 其实,SDL_mixer的操作步骤非常简单,甚 ...
二. 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形式播放,用
Mix_LoadMUS
打开,
Mix_PlayMusic
(或其他同等功能的函数)播放,其他声音全部以Channel的形式.用
Mix_LoadWAV
打开多个文件,再用
Mix_AllocateChannels
分配多个通道(Channels),然后用
Mix_PlayChannel
(或其他同等功能的函数),在不同的通道上播放,每个通道对应一个文件(前面用
Mix_LoadWAV
打开的文件),这样,就可以同时播放多个(>2)个声音
[/url]
注意:
(1) 如果需要播放mp3文件,那么在安装SDL_mixer之前,需要安装SMPEG(SDL MPEG),可以从这里
[url=ftp://sunsite.auc.dk/pub/os/linux/loki/open-source/smpeg/]ftp://sunsite.auc.dk/pub/os/linux/loki/open-source/smpeg/
下载,
安装方式是:
    ./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即可

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