ENGINES: Mute kPlainSoundType in Engine::syncSoundSettings()

The "Mute all" option rarely muted all audio streams, since we have
this abomination called kPlainSoundType (and there is no volume slider
for this type). Both, not-really-muting, and adding yet another slider is
a horrible user experience imho - especially on handheld ports.
So mute this sound in the default implementation, and unmute it to the
maximum volume.
When an engines has a volume level settings for sounds it plays with
this type, it should overwrite said member and set it there.
This commit is contained in:
dhewg 2011-03-19 17:51:02 +01:00
parent 6650e69a30
commit 46e397fb25
2 changed files with 10 additions and 1 deletions

View File

@ -430,7 +430,6 @@ int Engine::runDialog(GUI::Dialog &dialog) {
}
void Engine::syncSoundSettings() {
// Sync the engine with the config manager
int soundVolumeMusic = ConfMan.getInt("music_volume");
int soundVolumeSFX = ConfMan.getInt("sfx_volume");
@ -440,6 +439,7 @@ void Engine::syncSoundSettings() {
if (ConfMan.hasKey("mute"))
mute = ConfMan.getBool("mute");
_mixer->setVolumeForSoundType(Audio::Mixer::kPlainSoundType, (mute ? 0 : Audio::Mixer::kMaxMixerVolume));
_mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, (mute ? 0 : soundVolumeMusic));
_mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, (mute ? 0 : soundVolumeSFX));
_mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, (mute ? 0 : soundVolumeSpeech));

View File

@ -163,6 +163,15 @@ public:
* Notify the engine that the sound settings in the config manager may have
* changed and that it hence should adjust any internal volume etc. values
* accordingly.
* The default implementation sets the volume levels of all mixer sound
* types according to the config entries of the active domain.
* When overwriting, call the default implementation first, then adjust the
* volumes further (if required).
*
* @note When setting volume levels, respect the "mute" config entry.
* @note The volume for the plain sound type is reset to the maximum
* volume. If the engine can associate its own value for this
* type, it needs to overwrite this member and set it accordingly.
* @todo find a better name for this
*/
virtual void syncSoundSettings();