SDL学习笔记五(音乐播放)

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

你可能感兴趣的:(SDL学习笔记五(音乐播放))