mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2024-11-24 23:25:38 +00:00
Fix sounds not playing after launching a game
Correctly re-initialize SDL_Audio after launching a game.
This commit is contained in:
parent
fa57968c04
commit
a1cb5bdda1
|
@ -51,6 +51,34 @@ void AudioManager::mixAudio(void *unused, Uint8 *stream, int len)
|
||||||
|
|
||||||
AudioManager::AudioManager()
|
AudioManager::AudioManager()
|
||||||
{
|
{
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
AudioManager::~AudioManager()
|
||||||
|
{
|
||||||
|
deinit();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<AudioManager> & AudioManager::getInstance()
|
||||||
|
{
|
||||||
|
//check if an AudioManager instance is already created, if not create one
|
||||||
|
if (sInstance == nullptr) {
|
||||||
|
sInstance = std::shared_ptr<AudioManager>(new AudioManager);
|
||||||
|
}
|
||||||
|
return sInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AudioManager::init()
|
||||||
|
{
|
||||||
|
//stop playing all Sounds
|
||||||
|
for(unsigned int i = 0; i < sSoundVector.size(); i++)
|
||||||
|
{
|
||||||
|
if(sSoundVector.at(i)->isPlaying())
|
||||||
|
{
|
||||||
|
sSoundVector[i]->stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Set up format and callback. Play 16-bit stereo audio at 44.1Khz
|
//Set up format and callback. Play 16-bit stereo audio at 44.1Khz
|
||||||
sAudioFormat.freq = 44100;
|
sAudioFormat.freq = 44100;
|
||||||
sAudioFormat.format = AUDIO_S16;
|
sAudioFormat.format = AUDIO_S16;
|
||||||
|
@ -65,27 +93,35 @@ AudioManager::AudioManager()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AudioManager::~AudioManager()
|
void AudioManager::deinit()
|
||||||
{
|
{
|
||||||
|
//stop playing all Sounds
|
||||||
|
for(unsigned int i = 0; i < sSoundVector.size(); i++)
|
||||||
|
{
|
||||||
|
if(sSoundVector.at(i)->isPlaying())
|
||||||
|
{
|
||||||
|
sSoundVector[i]->stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//pause audio and close SDL connection
|
||||||
SDL_PauseAudio(1);
|
SDL_PauseAudio(1);
|
||||||
SDL_CloseAudio();
|
SDL_CloseAudio();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioManager::registerSound(std::shared_ptr<Sound> & sound)
|
void AudioManager::registerSound(std::shared_ptr<Sound> & sound)
|
||||||
{
|
{
|
||||||
//check if an AudioManager instance is already created, if not create one
|
getInstance();
|
||||||
if (sInstance == nullptr) {
|
|
||||||
sInstance = std::shared_ptr<AudioManager>(new AudioManager);
|
|
||||||
}
|
|
||||||
sSoundVector.push_back(sound);
|
sSoundVector.push_back(sound);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioManager::unregisterSound(std::shared_ptr<Sound> & sound)
|
void AudioManager::unregisterSound(std::shared_ptr<Sound> & sound)
|
||||||
{
|
{
|
||||||
|
getInstance();
|
||||||
for(unsigned int i = 0; i < sSoundVector.size(); i++)
|
for(unsigned int i = 0; i < sSoundVector.size(); i++)
|
||||||
{
|
{
|
||||||
if(sSoundVector.at(i) == sound)
|
if(sSoundVector.at(i) == sound)
|
||||||
{
|
{
|
||||||
|
sSoundVector[i]->stop();
|
||||||
sSoundVector.erase(sSoundVector.begin() + i);
|
sSoundVector.erase(sSoundVector.begin() + i);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -95,6 +131,7 @@ void AudioManager::unregisterSound(std::shared_ptr<Sound> & sound)
|
||||||
|
|
||||||
void AudioManager::play()
|
void AudioManager::play()
|
||||||
{
|
{
|
||||||
|
getInstance();
|
||||||
//unpause audio, the mixer will figure out if samples need to be played...
|
//unpause audio, the mixer will figure out if samples need to be played...
|
||||||
SDL_PauseAudio(0);
|
SDL_PauseAudio(0);
|
||||||
}
|
}
|
|
@ -20,6 +20,11 @@ class AudioManager
|
||||||
AudioManager();
|
AudioManager();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
static std::shared_ptr<AudioManager> & getInstance();
|
||||||
|
|
||||||
|
void init();
|
||||||
|
void deinit();
|
||||||
|
|
||||||
static void registerSound(std::shared_ptr<Sound> & sound);
|
static void registerSound(std::shared_ptr<Sound> & sound);
|
||||||
static void unregisterSound(std::shared_ptr<Sound> & sound);
|
static void unregisterSound(std::shared_ptr<Sound> & sound);
|
||||||
|
|
||||||
|
|
|
@ -68,6 +68,7 @@ void SystemData::launchGame(Window* window, GameData* game)
|
||||||
{
|
{
|
||||||
LOG(LogInfo) << "Attempting to launch game...";
|
LOG(LogInfo) << "Attempting to launch game...";
|
||||||
|
|
||||||
|
AudioManager::getInstance()->deinit();
|
||||||
window->deinit();
|
window->deinit();
|
||||||
|
|
||||||
std::string command = mLaunchCommand;
|
std::string command = mLaunchCommand;
|
||||||
|
@ -86,6 +87,7 @@ void SystemData::launchGame(Window* window, GameData* game)
|
||||||
}
|
}
|
||||||
|
|
||||||
window->init();
|
window->init();
|
||||||
|
AudioManager::getInstance()->init();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SystemData::populateFolder(FolderData* folder)
|
void SystemData::populateFolder(FolderData* folder)
|
||||||
|
|
Loading…
Reference in a new issue