CMusicHandler.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #ifndef __CMUSICHANDLER_H__
  2. #define __CMUSICHANDLER_H__
  3. #include <boost/thread/mutex.hpp>
  4. #include "CSoundBase.h"
  5. #include "CMusicBase.h"
  6. /*
  7. * CMusicHandler.h, part of VCMI engine
  8. *
  9. * Authors: listed in file AUTHORS in main folder
  10. *
  11. * License: GNU General Public License v2.0 or later
  12. * Full text of license available in license.txt file, in main folder
  13. *
  14. */
  15. class CSndHandler;
  16. class CSpell;
  17. struct _Mix_Music;
  18. typedef struct _Mix_Music Mix_Music;
  19. struct Mix_Chunk;
  20. class CAudioBase {
  21. protected:
  22. bool initialized;
  23. int volume; // from 0 (mute) to 100
  24. public:
  25. CAudioBase(): initialized(false), volume(0) {};
  26. virtual void init() = 0;
  27. virtual void release() = 0;
  28. virtual void setVolume(unsigned int percent);
  29. unsigned int getVolume() { return volume; };
  30. };
  31. class CSoundHandler: public CAudioBase
  32. {
  33. private:
  34. CSndHandler *sndh;
  35. soundBase::soundID getSoundID(std::string &fileName);
  36. std::map<soundBase::soundID, Mix_Chunk *> soundChunks;
  37. Mix_Chunk *GetSoundChunk(soundBase::soundID soundID);
  38. public:
  39. CSoundHandler();
  40. void init();
  41. void release();
  42. void initCreaturesSounds(std::vector<CCreature> &creatures);
  43. void initSpellsSounds(std::vector<CSpell> &spells);
  44. void setVolume(unsigned int percent);
  45. // Sounds
  46. int playSound(soundBase::soundID soundID, int repeats=0);
  47. int playSoundFromSet(std::vector<soundBase::soundID> &sound_vec);
  48. void stopSound(int handler);
  49. // Sets
  50. std::vector<soundBase::soundID> pickupSounds;
  51. std::vector<soundBase::soundID> horseSounds;
  52. };
  53. class CMusicHandler: public CAudioBase
  54. {
  55. private:
  56. // Because we use the SDL music callback, our music variables must
  57. // be protected
  58. boost::mutex musicMutex;
  59. Mix_Music *currentMusic;
  60. Mix_Music *nextMusic;
  61. int nextMusicLoop;
  62. Mix_Music * LoadMUS(const char *file); //calls Mix_LoadMUS and checks for errors
  63. int PlayMusic(Mix_Music *music, int loops); //calls Mix_PlayMusic and checks for errors
  64. public:
  65. CMusicHandler();
  66. void init();
  67. void release();
  68. void setVolume(unsigned int percent);
  69. // Musics
  70. std::map<musicBase::musicID, std::string> musics;
  71. std::vector<musicBase::musicID> battleMusics;
  72. void playMusic(musicBase::musicID musicID, int loop=1);
  73. void playMusicFromSet(std::vector<musicBase::musicID> &music_vec, int loop=1);
  74. void stopMusic(int fade_ms=1000);
  75. void musicFinishedCallback(void);
  76. };
  77. #endif // __CMUSICHANDLER_H__