Update sound_openal.cpp

This commit is contained in:
Ian Giestas Pauli 2017-01-27 22:25:18 -02:00 committed by GitHub
parent 2aab9be249
commit 54d622a141
1 changed files with 35 additions and 4 deletions

View File

@ -444,6 +444,7 @@ public:
void deleteSound(int id)
{
UNORDERED_MAP<int, PlayingSound*>::iterator i = m_sounds_playing.find(id);
std::cout << "DELETE SOUND" << i->second << "HOLA" << std::endl;
if(i == m_sounds_playing.end())
return;
PlayingSound *sound = i->second;
@ -454,6 +455,25 @@ public:
m_sounds_playing.erase(id);
}
void pauseSnd(int id)
{
UNORDERED_MAP<int, PlayingSound*>::iterator i = m_sounds_playing.find(id);
std::cout << "PAUSE SOUND"<< i->second << "HOLA" << std::endl;
if(i == m_sounds_playing.end())
return;
PlayingSound *sound = i->second;
alSourcePause(sound->source_id);
}
void resumeSnd(int id)
{
UNORDERED_MAP<int, PlayingSound*>::iterator i = m_sounds_playing.find(id);
std::cout << "RESUME SOUND" << i->second << "HOLA" << std::endl;
if(i == m_sounds_playing.end())
return;
PlayingSound *sound = i->second;
alSourcePlay(sound->source_id);
}
/* If buffer does not exist, consult the fetcher */
SoundBuffer* getFetchBuffer(const std::string &name)
{
@ -484,15 +504,17 @@ public:
<<m_buffers.size()<<" sound names loaded"<<std::endl;
std::set<int> del_list;
for(UNORDERED_MAP<int, PlayingSound*>::iterator i = m_sounds_playing.begin();
i != m_sounds_playing.end(); ++i) {
i != m_sounds_playing.end(); ++i)
{
int id = i->first;
PlayingSound *sound = i->second;
// If not playing, remove it
{
ALint state;
alGetSourcei(sound->source_id, AL_SOURCE_STATE, &state);
if(state != AL_PLAYING){
del_list.insert(id);
if(state != AL_PLAYING && state != AL_PAUSED)
{
del_list.insert(id);
}
}
}
@ -573,6 +595,16 @@ public:
maintain();
deleteSound(sound);
}
void pauseSound(int sound)
{
maintain();
pauseSnd(sound);
}
void resumeSound(int sound)
{
maintain();
resumeSnd(sound);
}
bool soundExists(int sound)
{
maintain();
@ -600,4 +632,3 @@ ISoundManager *createOpenALSoundManager(OnDemandSoundFetcher *fetcher)
delete m;
return NULL;
};