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 #define SHND2PTR(HNDLE,PTR) {if(!dxpSoundData.init)return -1; if(HNDLE < 0 || HNDLE >= DXP_BUILDOPTION_SOUNDHANDLE_MAX)return -1;PTR = dxpSoundArray + HNDLE;if(!PTR->used)return -1;} 00015 00016 00017 typedef struct DXPAVCODEC_BUFFER 00018 { 00019 u32 reserved0[6]; 00020 u8* datIn; 00021 u32 frameSize0; 00022 u32* pcmOut; 00023 u32 decodeByte;//set 4608 (= 1152[sample per frame] * 2[byte per sample] * 2[channel]) 00024 u32 frameSize1; 00025 u32 reserved1[54]; 00026 }DXPAVCODEC_BUFFER; 00027 00028 typedef struct DXPAVCONTEXT_MP3 00029 { 00030 DXPAVCODEC_BUFFER *avBuf; 00031 int id3v1Pos; 00032 int id3v2Pos; 00033 u32 blockId;//メモリ確保に使う。 00034 u8 *mp3Buf; 00035 u32 mp3BufSize; 00036 }DXPAVCONTEXT_MP3; 00037 00038 typedef struct DXPAVCONTEXT 00039 { 00040 int fileHandle;//Uファイルハンドル 00041 int fileSize;//Uファイルサイズ 00042 00043 u32 *pcmOut;//U出力先 00044 00045 int sampleRate;//Dサンプルレート 00046 int nextPos;//Dデコーダが次にデコードするサンプル位置 00047 int outSampleNum;//Dデコーダが必要とする出力先バッファサイズ(サンプル数) 00048 u8 format;//Dフォーマット 00049 union 00050 { 00051 DXPAVCONTEXT_MP3 mp3; 00052 }; 00053 }DXPAVCONTEXT; 00054 00055 typedef struct DXPSOUNDHANDLE 00056 { 00057 //ハンドルステータス 00058 unsigned used : 1; 00059 int soundDataType; 00060 //ユーザーから指定する情報 00061 int cmd; 00062 int loopResumePos; 00063 u8 volume; 00064 int pan; 00065 int playing; 00066 union 00067 { 00068 struct{ 00069 int threadId; 00070 int gotoPos; 00071 int loop; 00072 }file; 00073 struct{ 00074 int length; 00075 u32 *pcmBuf; 00076 int cmdplaytype; 00077 }memnopress; 00078 }; 00079 00080 00081 DXPAVCONTEXT avContext; 00082 }DXPSOUNDHANDLE; 00083 00084 typedef struct DXPSOUNDDATA 00085 { 00086 u8 init; 00087 u8 createSoundDataType; 00088 }DXPSOUNDDATA; 00089 00090 extern DXPSOUNDHANDLE dxpSoundArray[]; 00091 extern DXPSOUNDDATA dxpSoundData; 00092 00093 int dxpSoundInit(); 00094 int dxpSoundTerm(); 00095 int dxpSoundReserveHandle(); 00096 int dxpSoundReleaseHandle(int handle); 00097 00098 int dxpSoundMp3Init(DXPAVCONTEXT *av); 00099 int dxpSoundMp3GetSampleLength(DXPAVCONTEXT *av); 00100 int dxpSoundMp3Seek(DXPAVCONTEXT *av,int sample); 00101 int dxpSoundMp3Decode(DXPAVCONTEXT *av); 00102 int dxpSoundMp3End(DXPAVCONTEXT *av); 00103 00104 int dxpSoundCodecInit(DXPSOUNDHANDLE *pHnd); 00105 int dxpSoundCodecGetSampleLength(DXPSOUNDHANDLE *pHnd); 00106 int dxpSoundCodecSeek(DXPSOUNDHANDLE *pHnd,int sample); 00107 int dxpSoundCodecDecode(DXPSOUNDHANDLE *pHnd); 00108 int dxpSoundCodecEnd(DXPSOUNDHANDLE *pHnd); 00109 00110 int dxpSoundThreadFunc_file(SceSize size,void* argp); 00111 int dxpSoundThreadFunc_memnopress(SceSize size,void* argp);