00001 #ifndef CSMusic_h
00002 #define CSMusic_h
00003
00004 #include <string>
00005 #include <vector>
00006 #include "SDLMain.h"
00007 #include "CSLoadable.h"
00008 #include "CSLog.h"
00009
00010 #ifdef WIN32
00011 #pragma warning(disable : 4786 )
00012 #endif
00013
00014 class CSMusic;
00015 class CSMusicLoader;
00016
00017 typedef std::vector<CSMusic *> CSMusics;
00018
00019 class CSMusicData
00020 {
00021 public:
00022 char *id;
00023 char *filename;
00024
00025 CSMusicData()
00026 {
00027 id = 0;
00028 filename = 0;
00029 }
00030
00031 ~CSMusicData()
00032 {
00033 if (id != 0)
00034 {
00035 free(id);
00036 id = 0;
00037 }
00038 if (filename != 0)
00039 {
00040 free(filename);
00041 filename = 0;
00042 }
00043 }
00044 };
00045
00046 class CSMusic
00047 {
00048 friend CSMusicLoader;
00049 private:
00050 Mix_Music *mMusic;
00051 SMPEG *mMPEG;
00052
00053 CSMusic(const std::string &filename);
00054 void initialize(const CSMusicData &data);
00055 static void loadMusicData(const std::string &filename, CSMusicData &data);
00056 static isMP3(const char *name);
00057
00058 public:
00059
00060 CSMusic(const CSMusic &Music);
00061
00062
00063 virtual ~CSMusic();
00064 static const char *CLASS;
00065 virtual std::string getType() {return (std::string) CLASS;}
00066
00067 void play();
00068 void pause();
00069 void resume();
00070 void stop();
00071 };
00072
00073
00074
00075 class CSMusicLoader : public Loadable<CSMusic>
00076 {
00077 protected:
00078 virtual CSMusic *create(const std::string &filename)
00079 {
00080 return new CSMusic(filename);
00081 }
00082
00083 public:
00084 static CSMusicLoader INSTANCE;
00085 };
00086
00087
00088 #endif // CSMusic_h