一直想写个播放器之类的东西,但是缺少音频文件的解码知识,又懒得去学习,毕竟急着写个像样的软件,而且自己写解码器需要太多时间,并且不能保证可以处理大部分情况,难免会有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