00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef SDLFILESOUND_H
00023 #define SDLFILESOUND_H
00024
00025 #include <list>
00026 #include "sdlaudio.h"
00027 #include "SDL/SDL_mixer.h"
00028
00029 using namespace std;
00030
00045 class DECLSPEC SdlSound : public SdlAudio
00046 {
00047 public:
00053 DECLSPEC SdlSound( const char *name );
00054 virtual DECLSPEC ~SdlSound();
00055
00056 virtual DECLSPEC int play( int loops = 0 );
00057 virtual DECLSPEC int fadeIn( int ms, int loops = 0 );
00058 virtual DECLSPEC bool isPlaying();
00059 virtual DECLSPEC void pause();
00060 virtual DECLSPEC bool isPaused();
00061 virtual DECLSPEC void resume();
00062 virtual DECLSPEC void stop();
00063 virtual DECLSPEC int fadeOut( int ms );
00064 virtual DECLSPEC Mix_Fading fadeStatus();
00065
00066 virtual DECLSPEC void setVolume( int v );
00067 virtual int getVolume() { return nVolume; }
00068
00069 virtual DECLSPEC int getChannel();
00070
00071 virtual bool isMusic() { return false; }
00072
00079 static DECLSPEC void setGlbVolume( int v );
00080 protected:
00086 DECLSPEC void destroy();
00087
00089 Mix_Chunk *mixSound;
00091 int nChannel;
00093 int nVolume;
00094
00096 static int g_nVolume;
00098 static list<SdlSound*> lPlayingSounds;
00104 static void onChannelFinished( int channel )
00105 {
00106 for( list<SdlSound*>::iterator i = lPlayingSounds.begin(); i != lPlayingSounds.end(); ++i )
00107 if( !(*i)->nChannel == channel ) {
00108 (*i)->nChannel = -1;
00109 if( (*i)->cb )
00110 (*(*i)->cb)( *i, (*i)->cbData );
00111
00112 lPlayingSounds.erase( i );
00113 break;
00114 }
00115 }
00116 };
00117
00118
00127 class DECLSPEC SdlFileSound : public SdlSound
00128 {
00129 public:
00138 DECLSPEC SdlFileSound( const char *fn, const char *name = 0 );
00139 virtual DECLSPEC ~SdlFileSound();
00140
00147 DECLSPEC bool load( const char *fn );
00148 };
00149
00150 #endif