1
Audio / When the first sound ends, so does the second.
« on: December 13, 2013, 02:58:36 pm »
Are there any obvious mistakes I'm making here?
Noteworthy: m_Sounds and m_SoundBuffer are static private member variables. m_Sounds is a vector and m_SoundBuffer is a map.
only when I close the RenderWindow do I get the segmentation fault
Noteworthy: m_Sounds and m_SoundBuffer are static private member variables. m_Sounds is a vector and m_SoundBuffer is a map.
void ResourceManager::Update()
{
for (unsigned int i = 0; i < m_Sounds.size(); ++i)
{
std::cout << "Sound " << i << " = " << m_Sounds[i].getPlayingOffset().asSeconds() << "\n";
if (m_Sounds[i].getStatus() == sf::Sound::Stopped)
{
std::cout << i+1 << " / " << m_Sounds.size() << " was Killed\n";
m_Sounds.erase(m_Sounds.begin() + i);
continue;
}
}
}
sf::SoundBuffer& ResourceManager::soundBuffer(std::string fileName)
{
std::map<std::string, sf::SoundBuffer>::iterator it = m_SoundBuffers.find(fileName);
if (it == m_SoundBuffers.end()) //not found
{
sf::SoundBuffer sb;
assert(sb.loadFromFile("audio/" + fileName + ".wav"));
std::cout << "SoundBuffer Loaded: " << "audio/" << fileName << ".wav\n";
m_SoundBuffers.insert(std::make_pair(fileName, sb));
return m_SoundBuffers.find(fileName)->second;
}
return it->second;
}
void ResourceManager::sound(std::string fileName)
{
sf::Sound s(this->soundBuffer(fileName));
m_Sounds.push_back(s);
m_Sounds.back().play();
}
{
for (unsigned int i = 0; i < m_Sounds.size(); ++i)
{
std::cout << "Sound " << i << " = " << m_Sounds[i].getPlayingOffset().asSeconds() << "\n";
if (m_Sounds[i].getStatus() == sf::Sound::Stopped)
{
std::cout << i+1 << " / " << m_Sounds.size() << " was Killed\n";
m_Sounds.erase(m_Sounds.begin() + i);
continue;
}
}
}
sf::SoundBuffer& ResourceManager::soundBuffer(std::string fileName)
{
std::map<std::string, sf::SoundBuffer>::iterator it = m_SoundBuffers.find(fileName);
if (it == m_SoundBuffers.end()) //not found
{
sf::SoundBuffer sb;
assert(sb.loadFromFile("audio/" + fileName + ".wav"));
std::cout << "SoundBuffer Loaded: " << "audio/" << fileName << ".wav\n";
m_SoundBuffers.insert(std::make_pair(fileName, sb));
return m_SoundBuffers.find(fileName)->second;
}
return it->second;
}
void ResourceManager::sound(std::string fileName)
{
sf::Sound s(this->soundBuffer(fileName));
m_Sounds.push_back(s);
m_Sounds.back().play();
}
case sf::Event::MouseButtonPressed:
{
ResMan.sound("fireworks");
break;
}
{
ResMan.sound("fireworks");
break;
}
only when I close the RenderWindow do I get the segmentation fault