From ae01890fb7661acfb94bd9a51b5269c6ada2c66b Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 15 Sep 2017 01:29:38 +0300 Subject: Add option for change number of max parallel sounds. --- src/defaults.cpp | 1 + src/gui/widgets/tabs/setup_audio.cpp | 4 ++++ src/soundmanager.cpp | 11 ++++++++++- src/soundmanager.h | 2 ++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/defaults.cpp b/src/defaults.cpp index 5dade038f..5dad898dd 100644 --- a/src/defaults.cpp +++ b/src/defaults.cpp @@ -418,6 +418,7 @@ void setConfigDefaults(Configuration &cfg) AddDEF("sdlLogLevel", 0); AddDEF("allowHighDPI", false); AddDEF("sdlDriver", ""); + AddDEF("parallelAudioChannels", 16); } void setConfigDefaults2(Configuration &cfg) diff --git a/src/gui/widgets/tabs/setup_audio.cpp b/src/gui/widgets/tabs/setup_audio.cpp index bd8097318..6275ff59a 100644 --- a/src/gui/widgets/tabs/setup_audio.cpp +++ b/src/gui/widgets/tabs/setup_audio.cpp @@ -107,6 +107,10 @@ Setup_Audio::Setup_Audio(const Widget2 *const widget) : MainConfig_true, DoNotAlign_false); + // TRANSLATORS: settings option + new SetupItemIntTextField(_("Parallel number of sounds"), "", + "parallelAudioChannels", this, "parallelAudioChannelsEvent", 1, 1000); + // TRANSLATORS: settings group new SetupItemLabel(_("Sound effects"), "", this); diff --git a/src/soundmanager.cpp b/src/soundmanager.cpp index 37a6321a7..a4ee3acee 100644 --- a/src/soundmanager.cpp +++ b/src/soundmanager.cpp @@ -117,6 +117,8 @@ void SoundManager::optionChanged(const std::string &value) mFadeoutMusic = (config.getIntValue("fadeoutmusic") != 0); else if (value == "uselonglivesounds") mCacheSounds = (config.getIntValue("uselonglivesounds") != 0); + else if (value == "parallelAudioChannels") + setChannels(config.getIntValue("parallelAudioChannels")); } void SoundManager::init() @@ -142,6 +144,7 @@ void SoundManager::init() config.addListener("musicVolume", this); config.addListener("fadeoutmusic", this); config.addListener("uselonglivesounds", this); + config.addListener("parallelAudioChannels", this); if (SDL_InitSubSystem(SDL_INIT_AUDIO) == -1) { @@ -176,7 +179,7 @@ void SoundManager::init() logger->log("Fallback to stereo audio"); } - Mix_AllocateChannels(16); + Mix_AllocateChannels(config.getIntValue("parallelAudioChannels")); Mix_VolumeMusic(mMusicVolume); Mix_Volume(-1, mSfxVolume); @@ -570,3 +573,9 @@ void SoundManager::volumeRestore() const Mix_Volume(-1, mSfxVolume); } } + +void SoundManager::setChannels(const int channels) const +{ + if (mInstalled) + Mix_AllocateChannels(channels); +} diff --git a/src/soundmanager.h b/src/soundmanager.h index 01c2d5627..f4dca4cd1 100644 --- a/src/soundmanager.h +++ b/src/soundmanager.h @@ -142,6 +142,8 @@ class SoundManager final : public ConfigListener void shutdown(); + void setChannels(const int channels) const; + private: /** Logs various info about sound device. */ static void info(); -- cgit v1.2.3-60-g2f50