`

PSP dev lesson 06

    博客分类:
  • PSP
阅读更多
本课中将为你在程序中播放音乐来一点小小的提示。音效和背景音乐经常被忽略,但它往往能让你的程序变得更有趣。幸运的是,这篇教程会教你如何在程序里加入音乐。

首先我们先要通过SVN得到libmad(libmad是一个遵循GPL的MPED的音频解码器开发包)
打开cygwin,输入:
svn checkout svn://svn.ps2dev.org/psp/trunk/libmad
你会看到一个很长的列表,我们进到libmad目录,编译这个库
cd libmad
make
下一步回合我们第4课中学习到的安装库文件的方法有些不同,平常我只需要输入“make install”,就会自动的安装文件到相应的目录里。这里不同了,libmad的安装脚本对make install不感冒,,不过不要担心,我们自己动手来解决它
cp -Rf ./include /usr/local/pspdev/psp/
cp -Rf ./lib/libmad.a /usr/local/pspdev/psp/lib
注意:"./include" 和"/usr..." ,libmad.a" 和 "/usr..."之间各有一个空格
所有的文件就会被拷贝到相应的位置。“-Rf”标签的意思是"Recursive"(递归) 和 "final"(最后)--帮助你保证准确无误的拷贝所有文件。
接下来,下载另外一些必要的文件mp3player.c 和 mp3player.h在一个新建的文件夹里(下载地址:http://www.scriptscribbler.com/psp/tutorials/lesson06.zip)
下面进入本课中有趣的部分:建立main.c,写把注释写上吧!
// Mp3 Player Sample on PSP
// By *YOUR NAME HERE*
下面这段代码你是否感觉似曾相识啊,只有两个新的.h文件看起来眼生,他们是在程序中加入音频处理部分所必须的。
#include <pspkernel.h>
#include <pspctrl.h>
#include <pspdebug.h>
#include <pspaudio.h>
#include <pspaudiolib.h>
#include <psppower.h>

#include "mp3player.h"

PSP_MODULE_INFO("Mp3 Player Example", 0, 1, 1);
#define printf pspDebugScreenPrintf
你肯定还发现了刚才下载的mp3player.h(它一定要和你的源代码在同一文件夹里),我们还定义了printf和PSP_MODULE_INFO。
现在这个时候是本课中的黎明前时分,因为我们不知道下面这段代码怎么工作,不过我们以后会明白的。但是可以肯定它对你的程序是十分必须的。
// TWILIGHT ZONE! <do doo do doo>
/* Exit callback */
int exit_callback(int arg1, int arg2, void *common) {
          sceKernelExitGame();
          return 0;
}

/* Callback thread */
int CallbackThread(SceSize args, void *argp) {
          int cbid;

          cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
          sceKernelRegisterExitCallback(cbid);

          sceKernelSleepThreadCB();

          return 0;
}

/* Sets up the callback thread and returns its thread id */
int SetupCallbacks(void) {
          int thid = 0;

          thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
          if(thid >= 0) {
                    sceKernelStartThread(thid, 0, 0);
          }

          return thid;
}
// END OF TWILIGHT ZONE! <do doo do do>
现在开始我们的main部分吧,首先我们让psp的时钟满负荷,不用担心绝对不会让你心爱的小p受到任何伤害。值得注意的是:“pspAudioInit()”函数,它跟我们经常调用的“pspDebugScreenInit()”函数有些类似之处,它让psp为发声做好准备。
int main() {
          scePowerSetClockFrequency(333, 333, 166);

          pspDebugScreenInit();
          SetupCallbacks();

          pspAudioInit();
          SceCtrlData pad;
          int i;
擦亮你的眼睛,新东西哦
          MP3_Init(1);
          MP3_Load("test.mp3");
          MP3_Play();
MP3_Init() 初始化了一个结构体,传入的参数代表psp播放时所使用的声道(本例中选择的是1)。MP3_Load() 负责读取你的mp3文件(文件名是test.mp3).。MP3_Play() 让你的psp开始播放mp3。
下面是一些你可以选择的部分,会给你提供一个简单的用户界面。
                 while(1) {
                    sceCtrlReadBufferPositive(&pad, 1);
                    if(pad.Buttons & PSP_CTRL_CROSS) {
                              break;
                    } else if(pad.Buttons & PSP_CTRL_CIRCLE) {
                              MP3_Pause();
                              for(i=0; i<10; i++) {
                                        sceDisplayWaitVblankStart();
                              }
                    }

                    if (MP3_EndOfStream() == 1) {
                              MP3_Stop();
                    }
          }
这样我们就可以读取用户的按键输入(第3课中已经说明了),如果我们按了“X”,我们就会退出播放循环,如果按下“O”,MP3_Stop() 函数会帮我们暂停mp3的播放。最后我们用MP3_EndOfStream()函数来检查mp3是不是播放完了。如果播放完,函数返回1,没有播放完就返回0。如果播放完了,我们要将重复播放的功能停止,不然它一直播放到psp没电。
接下来,我们添加一些当用户退出播放循环起约束作用的代码
        MP3_Stop();
          MP3_FreeTune();

          sceKernelSleepThread();

          return 0;
          }
关闭我们的程序,首先我们先要停止mp3,还要释放播放mp3文件时使用的内存空间。释放空间对程序来说是十分重要的。如果那你不释放内存的话,这部分内存在MP3停止之后不能被其他程序使用。
这就是本课所的c程序。很简单吧。接下来还是要Makefile
记住了,Makefile没有后缀名。
最大的改动是我们添加了新的库“lmad”,用来连接libmad,给mp3编码,"pspaudiolib" 和 "pspaudio"
为我们访问psp的声音设备提供了接口。
TARGET = mp3
OBJS = mp3player.o main.o
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
LIBDIR =

LIBS = -lmad -lpspaudiolib -lpspaudio -lpsppower
LDFLAGS =
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = MP3 Player Example
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

现在,我们进入cygwin,找到我们的工程文件夹,输入那个有魔力的单词“make”!
你需要拷贝test.mp3文件到你的psp,1.50版本, 你把它放在文件名结尾没有 "%"的那个文件夹。另外mp3文件的比特率必须小于等于160 KBPS,否则将会提示错误,但是播放没有问题。
分享到:
评论

相关推荐

    PSP刷机.rar psp2000和psp3000都亲自试验过,没问题,

    标题中的"PSP刷机.rar"指的是为PlayStation Portable(PSP)掌上游戏机进行固件更新或系统修改的过程,通常是为了安装自制软件、增强功能或者运行未授权的游戏。这个压缩包文件可能包含了用于刷机的所有必要工具和...

    psp 2000(v3)psp3000可用fc金手指

    本主题聚焦于“psp 2000(v3)psp3000可用fc金手指”,这表示这些金手指是专门为索尼PlayStation Portable(PSP)的两个特定型号——PSP 2000 v3 和 PSP 3000 设计的。这些金手指不适用于所有PSP型号,如PSP 1000...

    PSP CTF主题 PSP美化

    【PSP CTF主题与PSP美化】 在个人数字娱乐领域,PlayStation Portable(PSP)是一款备受喜爱的游戏掌机。为了使用户拥有更加个性化和独特的体验,PSP支持CTF(Custom Theme Format)主题,这使得玩家可以改变游戏...

    PSP官方系统6.61

    《PSP官方系统6.61详解:兼容性与功能解析》 PSP(PlayStation Portable)是由日本索尼公司推出的便携式游戏机,自2004年首次发布以来,凭借其强大的游戏性能和多媒体功能,赢得了全球众多玩家的喜爱。在PSP的发展...

    psp6.61官方系统

    【标题】"PSP6.61官方系统"是指PlayStation Portable(PSP)游戏掌机的第六次重大系统更新,版本号为6.61。这个系统固件升级主要目的是提升系统的稳定性和兼容性,同时也可能包含了一些新的功能或者对现有功能的优化...

    PSP官方系统6.39.rar

    标题"PSP官方系统6.39.rar"表明这是一个与PlayStation Portable(PSP)设备相关的文件,具体来说,是该设备的操作系统更新至版本6.39的档案。PSP是一款由索尼公司推出的掌上游戏机,具有强大的多媒体功能,包括玩...

    psp6.20_PRO-B6刷机包_2011_06_01

    标题“psp6.20_PRO-B6刷机包_2011_06_01”指的是针对PlayStation Portable(PSP)游戏设备的一个特定版本的固件升级包,该版本为6.20,并且是PRO-B6系列的。这个刷机包在2011年6月1日发布,旨在为用户提供更稳定的...

    PSP6.60可用金手指

    PSP(PlayStation Portable)是一款由索尼公司推出的掌上游戏机,其系统版本历经多次更新,其中6.60是一个较为常见的系统版本。在PSP游戏社区中,“金手指”是一个术语,指的是通过修改游戏内存数据来实现作弊效果的...

    psp3.71升级固件包

    标题“PSP3.71升级固件包”指的是针对PlayStation Portable(PSP)游戏机的系统固件更新,版本号为3.71。这个固件升级旨在改进设备的功能,修复已知问题,以及可能增加对新游戏或媒体格式的支持。固件更新对于保持...

    PSP图标顺序管理.rar

    在IT领域,PSP(PlayStation Portable)是一款由索尼公司推出的便携式游戏设备,它以其强大的游戏性能和多媒体功能深受玩家喜爱。本资源“PSP图标顺序管理.rar”是针对PSP用户的一个实用工具,专门用于管理PSP游戏主...

    PSP官方系统5.00.rar

    标题中的"PSP官方系统5.00.rar"指的是PlayStation Portable(PSP)游戏设备的固件更新文件,版本号为5.00。PSP是由索尼公司开发的一款掌上游戏机,它不仅用于游戏,还可以播放音乐、视频、浏览图片,甚至上网冲浪。...

    psp光驱屏蔽插件

    标题中的“PSP光驱屏蔽插件”是指针对PlayStation Portable(PSP)游戏机的一种特殊软件工具。PSP是一款由索尼公司推出的便携式游戏设备,它配备了一个内置的光驱,主要用于读取UMD(Universal Media Disc)游戏和...

    PSP ISO Compressor 1.4

    《PSP ISO Compressor 1.4:优化存储空间的高效工具》 PSP ISO Compressor 1.4是一款专为PlayStation Portable(PSP)用户设计的ISO文件压缩工具,旨在帮助玩家更加有效地管理他们的游戏库,节省宝贵的存储空间。在...

    PSP 1000 维修资料

    【PSP 1000 维修资料详解】 PSP(PlayStation Portable)1000是一款由日本索尼公司推出的便携式游戏机,自2004年发布以来,因其强大的游戏性能和多媒体功能,深受全球玩家喜爱。这份维修资料主要针对PSP 1000的硬件...

    psp CMF金手指

    【psp CMF金手指】是一种在PSP(PlayStation Portable)游戏机上使用的修改工具,主要用于游戏的作弊和优化。CMF(Cheating Made Fun)金手指是PSP玩家社区中广泛流行的软件,它允许用户在游戏中开启各种作弊功能,...

    【FC3.71】PSP金手指3.71(PSP2000适用)

    【FC3.71】PSP金手指3.71是专为PSP2000型号游戏机设计的一款作弊工具,它允许玩家在游戏中启用各种修改功能,如无限生命、无限子弹、快速升级等,从而提升游戏体验。PSP金手指的概念源自早期家用游戏机的作弊代码,...

    PSP官方固件6.35升级包

    PSP,全称为PlayStation Portable,是索尼公司推出的一款便携式游戏掌机。这款设备以其强大的游戏性能和多媒体功能赢得了广大玩家的喜爱。在本文中,我们将深入探讨关于" PSP官方固件6.35升级包 "的相关知识,以及...

    idstoragemanager(psp key备份器)

    标题中的“idstoragemanager”指的是PSP(PlayStation Portable)设备上的一个应用程序,它主要用于管理PSP的密钥备份。在PSP游戏系统中,密钥存储着重要的安全信息,比如游戏的版权验证和系统权限。这个工具,即...

    PSP 程序设计基础

    随后,在2005年6月,PSP-DEV团队发现了一种名为kxploit的方法,使自制软件能够在1.5固件版本上运行,这极大地推动了PSP Homebrew的发展。同年9月,PSP在欧洲市场正式发售,并且libTIFF漏洞被曝光,使得用户可以将2.0...

    psp系统恢复.zip

    【标题】"psp系统恢复.zip"涉及到的主要知识点是关于PlayStation Portable(PSP)游戏机的系统恢复过程。这通常是指当PSP遇到软件问题,如无法启动、系统崩溃或者需要降级固件时,用户采取的一种修复方法。 【描述...

Global site tag (gtag.js) - Google Analytics