00001 #ifndef _PA_Sound9
00002 #define _PA_Sound9
00003
00004
00005
00013 #include "../Sound9.h"
00014 #include "PA_GBFS.h"
00015 #include "PA_FS.h"
00016 #include <PA9.h>
00017
00018
00019
00020 #define SND_MEM_POOL_SIZE 256*1024
00021
00022
00023
00024 extern TransferSound snd;
00025 extern u32 *sndMemPool;
00026
00027 typedef struct{
00028 u8 volume;
00029 s16 freq;
00030 s16 format;
00031 } PA_SoundOptions;
00032
00033 extern PA_SoundOptions PA_SoundOption;
00034
00035 extern u32 *FS_mod;
00036 extern u32 *FS_wav[16];
00037
00038
00039
00040
00041 extern u32 *Stream_Gap[16];
00042 extern u32 *Stream_End[16];
00043 extern u32 *Stream_Datas[16];
00044 extern u32 *Stream_Regen_Ptr[16];
00045 extern s64 Stream_Length[16];
00046 extern u32 Stream_Last_Tick[16];
00047 extern s32 Stream_Repeat[16];
00048 extern u8 Stream_Timer[16];
00049
00050
00051
00052
00053
00054
00055
00056
00077 void PA_SetDefaultSound(u8 volume, int freq, s16 format);
00078
00079
00085 extern inline void PA_InitSound(void) {
00086 SndInit9 ();
00087 sndMemPool = (u32*)0x2200000;
00088 SndSetMemPool(sndMemPool, SND_MEM_POOL_SIZE);
00089 PA_SetDefaultSound(127, 11025, 0);
00090 FS_mod = NULL;
00091 u8 i;
00092 for (i = 0; i < 16; i++)
00093 {
00094 FS_wav[i] = NULL;
00095 }
00096
00097 }
00098
00104 extern void PA_InitStreamSound(void);
00105
00111 extern void PA_RegenStream(void);
00112
00118 extern void FillTheGap(u8 PA_Channel, u32 size);
00119
00149 void PA_PlaySoundEx2(u8 PA_Channel, const void* data, s32 length, u8 volume, int freq, s16 format, BOOL repeat, int repeatPoint);
00150
00174 extern inline void PA_PlaySoundEx(u8 PA_Channel, const void* data, s32 length, u8 volume, int freq, s16 format){
00175 PA_PlaySoundEx2(PA_Channel, data, length, volume, freq, format,false,0);
00176 }
00177
00198 extern inline void PA_PlayGBFSSoundEx(u8 PA_Channel, u16 FS_wav_number, u8 volume, int freq, s16 format){
00199 s32 length = (PA_GBFSfile[FS_wav_number].Length >> 2) + 1;
00200 free(FS_wav[PA_Channel]);
00201 FS_wav[PA_Channel] = (u32*)malloc(length << 2);
00202
00203 DMA_Copy(PA_GBFSfile[FS_wav_number].File, FS_wav[PA_Channel], length, DMA_32NOW);
00204
00205 PA_PlaySoundEx(PA_Channel, (void*)FS_wav[PA_Channel], length << 2, volume, freq, format);
00206 }
00207
00234 extern inline void PA_PlayGBFSSoundEx2(u8 PA_Channel, u16 FS_wav_number, u8 volume, int freq, s16 format, BOOL repeat, int repeatPoint){
00235 s32 length = (PA_GBFSfile[FS_wav_number].Length >> 2) + 1;
00236 free(FS_wav[PA_Channel]);
00237 FS_wav[PA_Channel] = (u32*)malloc(length << 2);
00238
00239 DMA_Copy(PA_GBFSfile[FS_wav_number].File, FS_wav[PA_Channel], length, DMA_32NOW);
00240
00241 PA_PlaySoundEx2(PA_Channel, (void*)FS_wav[PA_Channel], length << 2, volume, freq, format, repeat, repeatPoint);
00242
00243 }
00244
00271 void PA_PlayGBFSStreamSoundEx2(u8 PA_Channel, u16 FS_wav_number, u8 volume, int freq, s16 format, BOOL repeat, int repeatPoint);
00272
00273
00294 extern inline void PA_PlayFSSoundEx(u8 PA_Channel, u16 PAFS_wav_number, u8 volume, int freq, s16 format){
00295 PA_Malloc((void**)&FS_wav[PA_Channel], PA_FSFile[PAFS_wav_number].Length+4);
00296
00297 s32 i;
00298 s32 length = (PA_FSFile[PAFS_wav_number].Length>>2) + 1;
00299 for (i = 0; i < length; i++) FS_wav[PA_Channel][i] = ((u32*)PA_PAFSFile(PAFS_wav_number))[i];
00300
00301 PA_PlaySoundEx(PA_Channel, (void*)FS_wav[PA_Channel], length << 2, volume, freq, format);
00302 }
00303
00330 extern inline void PA_PlayFSSoundEx2(u8 PA_Channel, u16 PAFS_wav_number, u8 volume, int freq, s16 format, BOOL repeat, int repeatPoint){
00331 PA_Malloc((void**)&FS_wav[PA_Channel], PA_FSFile[PAFS_wav_number].Length+4);
00332
00333 s32 i;
00334 s32 length = (PA_FSFile[PAFS_wav_number].Length>>2) + 1;
00335 for (i = 0; i < length; i++) FS_wav[PA_Channel][i] = ((u32*)PA_PAFSFile(PAFS_wav_number))[i];
00336
00337 PA_PlaySoundEx2(PA_Channel, (void*)FS_wav[PA_Channel], length << 2, volume, freq, format, repeat, repeatPoint);
00338 }
00339
00366 extern inline void PA_PlayFSStreamSoundEx2(u8 PA_Channel, u16 PAFS_wav_number, u8 volume, int freq, s16 format, BOOL repeat, int repeatPoint);
00367
00388 extern inline void PA_PlaySound(u8 PA_Channel, const void* data, s32 length, u8 volume, u32 freq){
00389 PA_PlaySoundEx2(PA_Channel, data, length, volume, freq, 1,false,0);
00390 }
00391
00409 extern inline void PA_PlayGBFSSound(u8 PA_Channel, u16 FS_wav_number, u8 volume, u32 freq){
00410 s32 length = (PA_GBFSfile[FS_wav_number].Length >> 2) + 1;
00411 free(FS_wav[PA_Channel]);
00412 FS_wav[PA_Channel] = (u32*)malloc(length << 2);
00413
00414 DMA_Copy(PA_GBFSfile[FS_wav_number].File, FS_wav[PA_Channel], length, DMA_32NOW);
00415
00416 PA_PlaySound(PA_Channel, (void*)FS_wav[PA_Channel], length << 2, volume, freq);
00417
00418 SndPlay(PA_Channel, (void*)FS_wav[PA_Channel], length << 2, volume, freq, 0, false, 0);
00419 }
00420
00421
00439 extern inline void PA_PlayFSSound(u8 PA_Channel, u16 PAFS_wav_number, u8 volume, u32 freq){
00440 PA_Malloc((void**)(&FS_wav[PA_Channel]), PA_FSFile[PAFS_wav_number].Length+4);
00441
00442 s32 i;
00443 s32 length = (PA_FSFile[PAFS_wav_number].Length>>2) + 1;
00444 for (i = 0; i < length; i++) FS_wav[PA_Channel][i] = ((u32*)PA_PAFSFile(PAFS_wav_number))[i];
00445
00446 PA_PlaySound(PA_Channel, (void*)FS_wav[PA_Channel], length << 2, volume, freq);
00447 }
00448
00449
00450
00463 #define PA_PlaySimpleSound(PA_Channel, sound) PA_PlaySoundEx(PA_Channel, (void*)sound, (u32)sound##_size, PA_SoundOption.volume, PA_SoundOption.freq, PA_SoundOption.format)
00464
00465
00477 extern inline void PA_PlayGBFSSimpleSound(u8 PA_Channel, u16 FS_wav_number){
00478 s32 length = (PA_GBFSfile[FS_wav_number].Length >> 2) + 1;
00479 free(FS_wav[PA_Channel]);
00480 FS_wav[PA_Channel] = (u32*)malloc(length << 2);
00481
00482 DMA_Copy(PA_GBFSfile[FS_wav_number].File, FS_wav[PA_Channel], length, DMA_32NOW);
00483
00484 PA_PlaySound(PA_Channel, (void*)FS_wav[PA_Channel], length << 2, PA_SoundOption.volume, PA_SoundOption.freq);
00485 }
00486
00487
00488
00489
00501 extern inline void PA_PlayFSSimpleSound(u8 PA_Channel, u16 PAFS_wav_number){
00502 PA_Malloc((void**)(&FS_wav[PA_Channel]), PA_FSFile[PAFS_wav_number].Length+4);
00503
00504 s32 i;
00505 s32 length = (PA_FSFile[PAFS_wav_number].Length>>2) + 1;
00506 for (i = 0; i < length; i++) FS_wav[PA_Channel][i] = ((u32*)PA_PAFSFile(PAFS_wav_number))[i];
00507
00508 PA_PlaySound(PA_Channel, (void*)FS_wav[PA_Channel], PA_FSFile[PAFS_wav_number].Length, PA_SoundOption.volume, PA_SoundOption.freq);
00509 }
00510
00511
00512
00513
00514
00515
00524 #define PA_PlayMod(mod_snd) SndPlayMOD((u8*)mod_snd)
00525
00526
00535 extern inline void PA_PlayGBFSMod(u16 FS_mod_number){
00536 s32 length = (PA_GBFSfile[FS_mod_number].Length >> 2) + 1;
00537 free(FS_mod);
00538 FS_mod = (u32*)malloc(length << 2);
00539
00540 DMA_Copy(PA_GBFSfile[FS_mod_number].File, FS_mod, length, DMA_32NOW);
00541
00542 PA_PlayMod(FS_mod);
00543 }
00544
00545
00554 extern inline void PA_PlayFSMod(u16 PAFS_mod_number){
00555 PA_Malloc((void**)((u32)(&FS_mod)), PA_FSFile[PAFS_mod_number].Length+4);
00556
00557 s32 i;
00558 s32 length = (PA_FSFile[PAFS_mod_number].Length>>2) + 1;
00559 for (i = 0; i < length; i++) FS_mod[i] = ((u32*)PA_PAFSFile(PAFS_mod_number))[i];
00560
00561 PA_PlayMod(FS_mod);
00562 }
00563
00564
00565
00571 #define PA_StopMod() SndStopMOD()
00572
00573
00582 #define PA_PauseMod(bool) SndPauseMOD(bool)
00583
00584
00585
00594 void PA_StopStream(u8 PA_Channel);
00595
00604 void PA_PauseStream(u8 PA_Channel);
00605
00614 void PA_UnpauseStream(u8 PA_Channel);
00615
00616
00628 extern inline void PA_MicStartRecording(s8* buffer, int length){StartRecording(buffer, length);}
00629
00635 #define PA_MicStopRecording() StopRecording()
00636
00638
00639
00640
00641 #endif