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,否將會提示錯誤,但是播放沒有問題
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章