jubilant-funicular
AudioManager.cpp
1 #include "nta/AudioManager.h"
2 #include "nta/Logger.h"
3 #include "nta/utils.h"
4 
5 namespace nta {
6  std::map<std::string, SoundEffect*> AudioManager::m_effectMap;
7  std::map<std::string, Music*> AudioManager::m_musicMap;
9  Logger::writeToLog("Initializing AudioManager...");
10  if (Mix_Init(MIX_INIT_MP3 | MIX_INIT_OGG) == -1) {
11  Logger::writeErrorToLog("Failed to initialize SDL_mixer: "
12  + utils::to_string(Mix_GetError()));
13  }
14  if (Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, 1024) == -1) {
15  Logger::writeErrorToLog("Failed to open audio: " + utils::to_string(Mix_GetError()));
16  }
17  Logger::writeToLog("Initialized AudioManager");
18  }
20  Logger::writeToLog("Destroying AudioManager...");
21  for (auto& it : m_effectMap) {
22  Logger::writeToLog("Deleting sound effect: " + it.first + "...");
23  delete it.second;
24  Logger::writeToLog("Deleted sound effect");
25  }
26  for (auto& it : m_musicMap) {
27  Logger::writeToLog("Deleting music: " + it.first + "...");
28  delete it.second;
29  Logger::writeToLog("Deleted music");
30  }
31  m_effectMap.clear();
32  m_musicMap.clear();
33  Mix_CloseAudio();
34  Mix_Quit();
35  Logger::writeToLog("Destroyed AudioManager");
36  }
37  SoundEffect* AudioManager::getSoundEffect(crstring effectPath) {
38  if (m_effectMap.find(effectPath) == m_effectMap.end()) {
39  nta::Logger::writeToLog("Loading sound effect: " + effectPath + "...");
40  Mix_Chunk* newChunk = Mix_LoadWAV((effectPath).c_str());
41  if (!newChunk) {
42  nta::Logger::writeErrorToLog("Unable to load sound effect: "
43  + utils::to_string(Mix_GetError()));
44  }
45  m_effectMap[effectPath] = new SoundEffect(newChunk);
46  nta::Logger::writeToLog("Loaded sound effect");
47  }
48  return m_effectMap[effectPath];
49  }
50  Music* AudioManager::getMusic(crstring musicPath) {
51  if (m_musicMap.find(musicPath) == m_musicMap.end()) {
52  nta::Logger::writeToLog("Loading music file: " + musicPath + "...");
53  Mix_Music* newMusic = Mix_LoadMUS((musicPath).c_str());
54  if (!newMusic) {
55  nta::Logger::writeErrorToLog("Unable to load music file: "
56  + utils::to_string(Mix_GetError()));
57  }
58  m_musicMap[musicPath] = new Music(newMusic);
59  nta::Logger::writeToLog("Loaded music file");
60  }
61  return m_musicMap[musicPath];
62  }
63 };
nta::Logger::writeToLog
static void writeToLog(crstring entry)
writes an entry in the log
Definition: Logger.cpp:17
nta::AudioManager::destroy
static void destroy()
frees all music
Definition: AudioManager.cpp:19
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
Represents a sound effect or short audio clip.
Definition: AudioManager.h:12
nta
Definition: Animation2D.h:6
nta::AudioManager::getSoundEffect
static SoundEffect * getSoundEffect(crstring effectPath)
returns sound
Definition: AudioManager.cpp:37
nta::utils::to_string
std::string to_string(const T &input, std::size_t precision=0)
converts input to a std::string
Definition: utils.h:36
nta::Logger::writeErrorToLog
static Error writeErrorToLog(crstring error, ErrorType type=OTHER)
writes entry in log and then notifies ErrorManager
Definition: Logger.cpp:31
nta::Music
Represents a longer piece of music.
Definition: AudioManager.h:33