jubilant-funicular
AudioManager.h
1 #ifndef AUDIOMANAGER_H_INCLUDED
2 #define AUDIOMANAGER_H_INCLUDED
3 
4 #include <SDL2/SDL_mixer.h>
5 #include <map>
6 
7 #include "MyEngine.h"
8 
9 namespace nta {
10  class AudioManager;
12  class SoundEffect {
13  private:
15  SoundEffect(Mix_Chunk* c) : m_chunk(c) {
16  }
19  if (m_chunk) {
20  Mix_FreeChunk(m_chunk);
21  }
22  }
24  Mix_Chunk* m_chunk;
25  public:
27  void play(int numLoops = 0) const {
28  Mix_PlayChannel(-1, m_chunk, numLoops);
29  }
30  friend class AudioManager;
31  };
33  class Music {
34  private:
36  Music(Mix_Music* m) : m_music(m) {
37  }
39  ~Music() {
40  if (m_music) {
41  Mix_FreeMusic(m_music);
42  }
43  }
45  Mix_Music* m_music = nullptr;
46  public:
48  void play(int numLoops = 1) const {
49  Mix_PlayMusic(m_music, numLoops);
50  }
52  void pause() const {
53  Mix_PauseMusic();
54  }
56  void stop() const {
57  Mix_HaltMusic();
58  }
60  void resume() const {
61  Mix_ResumeMusic();
62  }
63  friend class AudioManager;
64  };
65  class AudioManager {
66  private:
68  static std::map<std::string, SoundEffect*> m_effectMap;
69  static std::map<std::string, Music*> m_musicMap;
70  public:
72  static void init();
74  static void destroy();
76  static SoundEffect* getSoundEffect(crstring effectPath);
77  static Music* getMusic(crstring musicPath);
78  };
79 }
80 
81 #endif // AUDIOMANAGER_H_INCLUDED
nta::Music::pause
void pause() const
pauses music (can be resumed)
Definition: AudioManager.h:52
nta::AudioManager
Definition: AudioManager.h:65
nta::AudioManager::destroy
static void destroy()
frees all music
Definition: AudioManager.cpp:19
nta::Music::stop
void stop() const
stops music (must be replayed from beginning)
Definition: AudioManager.h:56
nta::Music::Music
Music(Mix_Music *m)
constructor simply stores music
Definition: AudioManager.h:36
nta::SoundEffect::SoundEffect
SoundEffect(Mix_Chunk *c)
Constructor simple stores a chunk.
Definition: AudioManager.h:15
nta::AudioManager::m_effectMap
static std::map< std::string, SoundEffect * > m_effectMap
maps for associating sounds with their files
Definition: AudioManager.h:68
nta::AudioManager::init
static void init()
initializes SDL_Mixer
Definition: AudioManager.cpp:8
nta::SoundEffect::m_chunk
Mix_Chunk * m_chunk
the chunk representing the stored sound effect
Definition: AudioManager.h:24
nta::SoundEffect
Represents a sound effect or short audio clip.
Definition: AudioManager.h:12
nta
Definition: Animation2D.h:6
nta::SoundEffect::~SoundEffect
~SoundEffect()
Destructor frees chunk.
Definition: AudioManager.h:18
nta::AudioManager::getSoundEffect
static SoundEffect * getSoundEffect(crstring effectPath)
returns sound
Definition: AudioManager.cpp:37
nta::Music::m_music
Mix_Music * m_music
the stored music
Definition: AudioManager.h:45
nta::Music::~Music
~Music()
destructor frees stored music
Definition: AudioManager.h:39
nta::SoundEffect::play
void play(int numLoops=0) const
plays the sound effect
Definition: AudioManager.h:27
nta::Music::resume
void resume() const
resumes paused music
Definition: AudioManager.h:60
nta::Music
Represents a longer piece of music.
Definition: AudioManager.h:33
nta::Music::play
void play(int numLoops=1) const
plays music
Definition: AudioManager.h:48