掌叔
2009-02-10 09:46:50
摘自:[url]http://bbs.khors.com[/url]
作者:Dr.Watson
相信大家对欣赏默片的兴趣都不会很大, 游戏也一样, 要是没有声音的辅助, 效果肯定会大打折扣! 所以这一篇我们研究一下怎样在PSP上弄点噪音 ;)
当我把跟随PSPSDK的声音范例会来一看, 不禁吓了一跳, 弄点声音, 不用这麽一大段代码吧? 还好, 前人种树, 后人遮荫, 在svn.ps2dev.org 这个大宝藏里, 又找到宝藏: mikmodlib, 这样一来, 一切就变得容易得多了 :)
[code=c]UNIMOD *music = NULL; // 音乐
SAMPLE *sample = NULL; // 声效
int voice; // 声效handle
...
InitMikMod();
music = MikMod_LoadSong("china.mod", MAX_CHANNEL);
Player_Start(music); // 播音乐
sample = WAV_LoadFN("right.wav");
....
if ((pad.Buttons&PSP_CTRL_CIRCLE) && !(oldButtons&PSP_CTRL_CIRCLE))
{
voice = MikMod_PlaySample(sample, 0, 0); // 播声效
}[/code]
mikmodlib支援的音乐/声效格式不算太多, 但足够我们用以写一般的游戏了, 声效方面支援的是WAV, 而音乐方面则主要是mod 和一些由mod演变出来的格式, 如.it, .xm 和 .s3m.
WAV大家都应该耳熟能详了, 至于mod是什麽呢? 或者在这里和大家简单介绍一下: mod 是一种源自Amiga电脑的音乐格式, 它的主要特点是把音乐所用的乐器的样本数据(sample), 也存在档桉内, 所以用mod格式, 只要我们用的样本数据是高质量的, 播放出来的音乐基本上和wav 或 mp3的分别不大, 但它的档桉比wav要小很多, 而播放时又不会像mp3般浪费系统资源.
用cygwin自行安装mikmodlib的方法大约如下:
- 打开cygwin
- svn export svn://svn.ps2dev.org/psp/trunk/mikmodlib
- cd mikmodlib
- make install
但这时应该有错 ;)
10月21日新拿到的mikmodlib似乎未有更新至应用最新的pspsdk. 所以我们要打开 mikmodlib/playercode/drv_psp.c, 把 PSP_Init(void)中,
pspAudioSetChannelCallback(0, (void *)sound_callback);
改为
pspAudioSetChannelCallback(0, (void *)sound_callback, NULL);
再 "make install" 一次就应该行了!
而用devkitPSP r5的朋友, 郄可以直接编译安装呢 :)
现在让我们跟这隻可爱的老鼠一起闻歌起舞吧!
[attach]758[/attach]
附带的执行包是1.50的 :) 自行编译, 要把mouse.png, cursor.png, bg.png, china.mod和right.wav放在记忆棒game05的目录内!
后记:
记得N年前, 我曾经在DOS环境下用watcom c++ 和 assembler 写过一个简单的mod player, 试听用的就是附录在示范包内一个叫"china.mod"的音乐, 经过几个晚上的苦战, 终于从sound blaster 卡内听到她美妙的乐章, 当时的感觉真是兴奋莫名! N年后, 再次从PSP听到同一首熟悉的音乐, 感觉依然是那麽美妙!
我想这一篇应该可以作为我们"学习"阶段的一个小结了! 运用我们现在已有的函数库, 我们应该可以写些不太複杂的游戏了, 所以跟着我打算开始写一个简单的射击游戏, 而在写游戏中另外需要的函数, 我们再一一加进去! 还有一样我准备做的, 就是由c 转到c++, 在此要感谢[url=http://bbs.pspchina.net/read.php?tid=34660&fpage=1]nj-zero[/url]在这方面的研究和分享 :)
TW241
2009-08-07 21:55:57
支持你 兄弟