00001 #include "dxlibp.h" 00002 #include <pspmp3.h> 00003 #include <psputility.h> 00004 00005 #define DXP_BUILDOPTION_SOUNDHANDLE_MAX 32 00006 00007 #define DXP_SOUNDCMD_NONE 0 00008 #define DXP_SOUNDCMD_PLAY 1 00009 #define DXP_SOUNDCMD_STOP 2 00010 #define DXP_SOUNDCMD_EXIT 3 00011 00012 #define DXP_SOUNDFMT_MP3 1 00013 00014 typedef struct DXPAVCODEC_BUFFER 00015 { 00016 u32 reserved0[6]; 00017 u8* datIn; 00018 u32 frameSize0; 00019 u16* pcmOut; 00020 u32 decodeByte;//set 4608 (= 1152[sample per frame] * 2[byte per sample] * 2[channel]) 00021 u32 frameSize1; 00022 u32 reserved1[54]; 00023 }DXPAVCODEC_BUFFER; 00024 00025 typedef struct DXPSOUNDHANDLE 00026 { 00027 //ステータス 00028 unsigned used : 1; 00029 SceUID threadId; 00030 //メインスレッドからの指示 00031 unsigned loop : 1; 00032 unsigned cmd : 2;//DXP_SOUNDCMD_XXXX 00033 int gotoPos; 00034 int loopPos[2];//A-B in sample num. 00035 u8 volume; 00036 int pan; 00037 char filename[256]; 00038 int soundDataType; 00039 00040 //再生スレッドからの情報 00041 int length; 00042 int currentPos; 00043 int sampleRate; 00044 int id3v1; 00045 int id3v2; 00046 int loadstatus; 00047 unsigned playing : 1; 00048 00049 //デコード関連 00050 u8 format; 00051 u16* pcmOut; 00052 int pcmOutSize; 00053 union{ 00054 struct 00055 { 00056 int handle; 00057 DXPAVCODEC_BUFFER *avBuf; 00058 u8 *mp3Buf; 00059 u32 mp3BufSize; 00060 }mp3; 00061 }; 00062 }DXPSOUNDHANDLE; 00063 00064 typedef struct DXPSOUNDDATA 00065 { 00066 u8 init; 00067 u8 createSoundDataType; 00068 }DXPSOUNDDATA; 00069 00070 extern DXPSOUNDHANDLE dxpSoundArray[]; 00071 extern DXPSOUNDDATA dxpSoundData; 00072 00073 int dxpSoundInit(); 00074 int dxpSoundTerm(); 00075 int dxpSoundReserveHandle(); 00076 int dxpSoundReleaseHandle(int handle); 00077 int dxpSoundThread(SceSize datLen,void* datPtr); 00078 00079 00080 int dxpSoundMp3Init(DXPSOUNDHANDLE *pHnd,int fh); 00081 int dxpSoundMp3Seek(DXPSOUNDHANDLE *pHnd,int fh,int sample); 00082 int dxpSoundMp3Decode(DXPSOUNDHANDLE *pHnd,int fh); 00083 int dxpSoundMp3End(DXPSOUNDHANDLE *pHnd,int fh);