-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaudio.cpp
More file actions
73 lines (61 loc) · 1.41 KB
/
audio.cpp
File metadata and controls
73 lines (61 loc) · 1.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include "audio.h"
Audio::Audio()
{
int m_audiorate = 22050;
unsigned int m_audioformat = AUDIO_S16;
int m_audiochannels = 2;
int m_audiobuffers = 4096;
Mix_OpenAudio(m_audiorate,m_audioformat,m_audiochannels,m_audiobuffers);
}
void Audio::addMusic(const std::string& name, const std::string& file)
{
m_musics[name] = Mix_LoadMUS(file.c_str());
}
void Audio::addSound(const std::string& name, const std::string& file)
{
m_chunks[name] = Mix_LoadWAV(file.c_str());
}
void Audio::removeMusic(const std::string& name)
{
Mix_HaltMusic();
Mix_FreeMusic(m_musics[name]);
m_musics.erase(name);
}
void Audio::removeSound(const std::string& name)
{
Mix_FreeChunk(m_chunks[name]);
m_chunks.erase(name);
}
int Audio::playSound(const std::string& name)
{
int channel = Mix_PlayChannel(-1, m_chunks[name], 0);
while(Mix_Playing(channel) != 0);
return channel;
}
void Audio::haltSound(int channel)
{
Mix_HaltChannel(channel);
}
void Audio::haltMusic()
{
Mix_HaltMusic();
}
void Audio::playMusic(const std::string& name)
{
Mix_PlayMusic(m_musics[name], 0);
}
Audio::~Audio()
{
Mix_HaltMusic();
std::map<std::string, Mix_Music*>::iterator iterm;
for(iterm = m_musics.begin(); iterm != m_musics.end(); ++iterm)
{
Mix_FreeMusic(iterm->second);
}
std::map<std::string, Mix_Chunk*>::iterator iters;
for(iters = m_chunks.begin(); iters != m_chunks.end(); ++iters)
{
Mix_FreeChunk(iters->second);
}
Mix_CloseAudio();
}