[PSP教程06]采用硬解码播放mp3声音的libcoolaudio



掌叔
2008-06-05 17:06:43

摘自:TOPOC studio
作者:newcreat
音频播放库采用下面的接口
psp音频播放的库,mp3, aac,atrac3,atrac3plus,pcmwav,ogg,midi,mod采用下面的接口,实现相应的操作,这样各个解码器都能够协同工作.
mp3,aac,atrac3,atrac3plusc采用硬解
这个项目主要由cooleyes完成psp部分,由newcreat完成windows部分.供给nge以及其他应用程序使用.目前是一个初始版本.
项目计划详细请看
[url]http://topoc.5d6d.com/thread-9-1-1.html[/url]
下面是nge使用libcoolaudio播放mp3.
下载libcoolaudio v0.1按照里面的安装说明安装.如果不会安装请留言.
[url]http://code.google.com/p/topoc/downloads/list[/url]
libnge 使用libcoolaudio,以下假设都是安装的topoc整合包,没安装整合包的请自己放在相应目录下。
psp版
1 拷贝libSDLmain.a到pspdevpspdevpsplib覆盖原来的libSDLmain.a。(主要是启用核心态)
2 设置demo makefile指定include和lib路径。编译即可。
如果不会设置makefile的请按下面傻瓜安装:
3 将include和lib下的文件加入到pspdevlibnge_pspinclude 和pspdevlibnge_psplib。(或者你自己写makefile指定目录)
4 将demo/lesson5拷贝到pspdevlibnge_pspdemo,和那些lesson放一起。然后make即可。
win版:
1 打开demo工程
2 加入libcoolaudio的include和lib。
3 拷贝SDL_mixer.dll到system32下,这个是支持mp3的dll。

运行请放test.mp3到demolesson5(win)和demolesson5\__SCE__lesson5(psp)下
下面简述一下接口:
各个函数说明:


函数名 功能 备注
int load(const char* filename) 加载文件,并做相应的初始化工作
int play(void) 播放声音
void pause(void) 暂停声音.但不释放资源,可以用resume再次从暂停地方播放.
stop 停止声音,并释放当前加载资源.但是不是所有资源.
resume 再次从暂停地方播放.
seek 从流的某一位置播放 可选
time 音频的时间信息 可选
eos 播放是否结束(end of stream),结束返回1
volume 音量设置0-128

下面是基本调用方式:

int main(int argc, char *argv[])
{
//init

CoolAudioDefaultInit();

MP3PlayInit(&ops);
//load and play
ops.load("test1.mp3");
ops.play();
printf("playing....
");
do{
Menu();
}while( ops.eos()!=1);

//another
ops.load("test2.mp3");
ops.play();
printf("playing....
");
do{
Menu();
}while( ops.eos()!=1);
//clean up
MP3PlayFini();
return 0;

}

测试时请将test.mp3放到相应目录.

可以发现mp3采用硬解码对fps影响极小,在播放mp3的情况下旋转缩放512*512*32的图片nge能达到200+的fps,这对做游戏的人是一大好消息.(windows版由于不是硬解码所以fps会下降不少)
[attach]22[/attach]