00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef ArmageTron_SOUND_H
00029 #define ArmageTron_SOUND_H
00030
00031 #include "rSDL.h"
00032 #include "defs.h"
00033
00034 #include "tString.h"
00035 #include "tLinkedList.h"
00036
00037 void se_SoundInit();
00038 void se_SoundExit();
00039 void se_SoundLock();
00040 void se_SoundUnlock();
00041 void se_SoundPause(bool p);
00042 void se_SoundMenu();
00043
00044 class eAudioPos{
00045 public:
00046 Uint32 pos;
00047 Uint32 fraction;
00048
00049 void Reset(int randomize=0);
00050
00051 eAudioPos(){Reset();}
00052 };
00053
00054 class eWavData: public tListItem<eWavData>{
00055 SDL_AudioSpec spec;
00056 Uint8 *data;
00057 Uint32 len;
00058 Uint32 samples;
00059 tString filename;
00060 tString filename_alt;
00061 bool freeData;
00062
00063 static eWavData* s_anchor;
00064
00065 public:
00066 bool alt;
00067
00068 eWavData(const char * fileName,const char *alternative_file="");
00069 ~eWavData();
00070
00071 void Load();
00072 void Unload();
00073 static void UnloadAll();
00074
00075
00076 bool Mix(Uint8 *dest,
00077 Uint32 len,
00078 eAudioPos &pos,
00079 REAL rvol,
00080 REAL lvol,
00081 REAL speed=1,
00082 bool loop=false);
00083
00084
00085
00086
00087
00088
00089
00090 void Loop();
00091
00092 };
00093
00094 class eSoundPlayer{
00095 int id;
00096 eWavData *wav;
00097 eAudioPos pos[MAX_VIEWERS];
00098 bool goon[MAX_VIEWERS];
00099 bool loop;
00100
00101 public:
00102 eSoundPlayer(eWavData &w,bool loop=false);
00103 ~eSoundPlayer();
00104
00105 bool Mix(Uint8 *dest,
00106 Uint32 len,
00107 int viewer,
00108 REAL rvol,
00109 REAL lvol,
00110 REAL speed=1);
00111
00112 void Reset(int randomize=0);
00113 void End();
00114
00115 void MakeGlobal();
00116
00117
00118 };
00119
00120
00121 #endif