From aad3aa02e77be0394a23b5dce0ce7c244be91ab4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Wed, 12 Feb 2025 10:23:26 -0600 Subject: [PATCH] Upgrade the achievement sound volume setting to the new format --- Core/Config.cpp | 12 ++++++++++-- Core/Config.h | 5 +++-- UI/BackgroundAudio.cpp | 4 ++-- UI/EmuScreen.cpp | 2 +- UI/GameSettingsScreen.cpp | 4 +++- UI/RetroAchievementScreens.cpp | 9 +++++---- headless/Headless.cpp | 2 +- 7 files changed, 25 insertions(+), 13 deletions(-) diff --git a/Core/Config.cpp b/Core/Config.cpp index bc605badc5..5a4a520c01 100644 --- a/Core/Config.cpp +++ b/Core/Config.cpp @@ -758,6 +758,12 @@ static int DefaultReverbVolume() { return LegacyVolumeToNewVolume(g_Config.iLegacyReverbVolume, 200); } +static int DefaultAchievementVolume() { + // NOTE: The old achievemnt volume was a straight percentage so it doesn't convert + // the same as the others. + return MultiplierToVolume100((float)g_Config.iLegacyAchievementVolume / 10.0f); +} + static const ConfigSetting soundSettings[] = { ConfigSetting("Enable", &g_Config.bEnableSound, true, CfgFlag::PER_GAME), ConfigSetting("AudioBackend", &g_Config.iAudioBackend, 0, CfgFlag::PER_GAME), @@ -767,12 +773,14 @@ static const ConfigSetting soundSettings[] = { // The default settings here are still relevant, they will get propagated into the new ones. ConfigSetting("GlobalVolume", &g_Config.iLegacyGameVolume, VOLUME_FULL, CfgFlag::PER_GAME | CfgFlag::DONT_SAVE), ConfigSetting("ReverbVolume", &g_Config.iLegacyReverbVolume, VOLUME_FULL, CfgFlag::PER_GAME | CfgFlag::DONT_SAVE), + ConfigSetting("AchievementSoundVolume", &g_Config.iLegacyAchievementVolume, 6, CfgFlag::PER_GAME | CfgFlag::DONT_SAVE), + // Current volume settings. ConfigSetting("GameVolume", &g_Config.iGameVolume, &DefaultGameVolume, CfgFlag::PER_GAME), ConfigSetting("ReverbRelativeVolume", &g_Config.iReverbVolume, &DefaultReverbVolume, CfgFlag::PER_GAME), ConfigSetting("AltSpeedRelativeVolume", &g_Config.iAltSpeedVolume, VOLUMEHI_FULL, CfgFlag::PER_GAME), - ConfigSetting("AchievementSoundVolume", &g_Config.iAchievementSoundVolume, 6, CfgFlag::PER_GAME), - ConfigSetting("UIVolume", &g_Config.iUIVolume, 70, CfgFlag::DEFAULT), + ConfigSetting("AchievementVolume", &g_Config.iAchievementVolume, &DefaultAchievementVolume, CfgFlag::PER_GAME), + ConfigSetting("UIVolume", &g_Config.iUIVolume, 75, CfgFlag::DEFAULT), ConfigSetting("AudioDevice", &g_Config.sAudioDevice, "", CfgFlag::DEFAULT), ConfigSetting("AutoAudioDevice", &g_Config.bAutoAudioDevice, true, CfgFlag::DEFAULT), diff --git a/Core/Config.h b/Core/Config.h index 2f9465511f..706fcce91b 100644 --- a/Core/Config.h +++ b/Core/Config.h @@ -283,13 +283,14 @@ public: // Legacy volume settings, 0-10. These get auto-upgraded and should not be used. int iLegacyGameVolume; int iLegacyReverbVolume; - int iAltSpeedVolume; - int iAchievementSoundVolume; + int iLegacyAchievementVolume; // Newer volume settings, 0-100 int iGameVolume; int iReverbVolume; int iUIVolume; + int iAchievementVolume; + int iAltSpeedVolume; bool bExtraAudioBuffering; // For bluetooth std::string sAudioDevice; diff --git a/UI/BackgroundAudio.cpp b/UI/BackgroundAudio.cpp index 8dc33b8797..a4adcc444f 100644 --- a/UI/BackgroundAudio.cpp +++ b/UI/BackgroundAudio.cpp @@ -534,9 +534,9 @@ void SoundEffectMixer::Mix(int16_t *buffer, int sz, int sampleRateHz) { } } -void SoundEffectMixer::Play(UI::UISound sfx, float volume) { +void SoundEffectMixer::Play(UI::UISound sfx, float multiplier) { std::lock_guard guard(mutex_); - queue_.push_back(PlayInstance{ sfx, 0, (int)(255.0f * volume), false }); + queue_.push_back(PlayInstance{ sfx, 0, (int)(255.0f * multiplier), false }); } void SoundEffectMixer::UpdateSample(UI::UISound sound, Sample *sample) { diff --git a/UI/EmuScreen.cpp b/UI/EmuScreen.cpp index b2d409e898..befe5a13a2 100644 --- a/UI/EmuScreen.cpp +++ b/UI/EmuScreen.cpp @@ -630,7 +630,7 @@ void EmuScreen::sendMessage(UIMessage message, const char *value) { } } else if (message == UIMessage::REQUEST_PLAY_SOUND) { if (g_Config.bAchievementsSoundEffects && g_Config.bEnableSound) { - float achievementVolume = Volume10ToMultiplier(g_Config.iAchievementSoundVolume) * Volume100ToMultiplier(g_Config.iGameVolume); + float achievementVolume = Volume100ToMultiplier(g_Config.iAchievementVolume) * Volume100ToMultiplier(g_Config.iGameVolume); // TODO: Handle this some nicer way. if (!strcmp(value, "achievement_unlocked")) { g_BackgroundAudio.SFX().Play(UI::UISound::ACHIEVEMENT_UNLOCKED, achievementVolume); diff --git a/UI/GameSettingsScreen.cpp b/UI/GameSettingsScreen.cpp index 0999ba8630..7c8c02a6b9 100644 --- a/UI/GameSettingsScreen.cpp +++ b/UI/GameSettingsScreen.cpp @@ -661,6 +661,7 @@ void GameSettingsScreen::CreateAudioSettings(UI::ViewGroup *audioSettings) { volume->SetZeroLabel(a->T("Mute")); PopupSliderChoice *reverbVolume = audioSettings->Add(new PopupSliderChoice(&g_Config.iReverbVolume, VOLUME_OFF, 2 * VOLUMEHI_FULL, VOLUMEHI_FULL, a->T("Reverb volume"), screenManager())); + reverbVolume->SetFormat("%d%%"); reverbVolume->SetEnabledPtr(&g_Config.bEnableSound); reverbVolume->SetZeroLabel(a->T("Disabled")); @@ -669,7 +670,8 @@ void GameSettingsScreen::CreateAudioSettings(UI::ViewGroup *audioSettings) { altVolume->SetEnabledPtr(&g_Config.bEnableSound); altVolume->SetZeroLabel(a->T("Mute")); - PopupSliderChoice *achievementVolume = audioSettings->Add(new PopupSliderChoice(&g_Config.iAchievementSoundVolume, VOLUME_OFF, VOLUME_FULL, VOLUME_FULL, ac->T("Achievement sound volume"), screenManager())); + PopupSliderChoice *achievementVolume = audioSettings->Add(new PopupSliderChoice(&g_Config.iAchievementVolume, VOLUME_OFF, VOLUMEHI_FULL, MultiplierToVolume100(0.6f), ac->T("Achievement sound volume"), screenManager())); + achievementVolume->SetFormat("%d%%"); achievementVolume->SetEnabledPtr(&g_Config.bEnableSound); achievementVolume->SetZeroLabel(a->T("Mute")); diff --git a/UI/RetroAchievementScreens.cpp b/UI/RetroAchievementScreens.cpp index ac740185cb..0017211a37 100644 --- a/UI/RetroAchievementScreens.cpp +++ b/UI/RetroAchievementScreens.cpp @@ -36,7 +36,7 @@ AudioFileChooser::AudioFileChooser(RequesterToken token, std::string *value, std layoutParams_->height = ITEM_HEIGHT; } Add(new Choice(ImageID("I_PLAY"), new LinearLayoutParams(ITEM_HEIGHT, ITEM_HEIGHT)))->OnClick.Add([=](UI::EventParams &) { - float achievementVolume = g_Config.iAchievementSoundVolume * 0.1f; + float achievementVolume = Volume100ToMultiplier(g_Config.iAchievementVolume); g_BackgroundAudio.SFX().Play(sound_, achievementVolume); return UI::EVENT_DONE; }); @@ -363,9 +363,10 @@ void RetroAchievementsSettingsScreen::CreateCustomizeTab(UI::ViewGroup *viewGrou viewGroup->Add(new AudioFileChooser(GetRequesterToken(), &g_Config.sAchievementsUnlockAudioFile, ac->T("Achievement unlocked"), UISound::ACHIEVEMENT_UNLOCKED)); viewGroup->Add(new AudioFileChooser(GetRequesterToken(), &g_Config.sAchievementsLeaderboardSubmitAudioFile, ac->T("Leaderboard score submission"), UISound::LEADERBOARD_SUBMITTED)); } - PopupSliderChoice *volume = viewGroup->Add(new PopupSliderChoice(&g_Config.iAchievementSoundVolume, VOLUME_OFF, VOLUME_FULL, VOLUME_FULL, ac->T("Achievement sound volume"), screenManager())); - volume->SetEnabledPtr(&g_Config.bEnableSound); - volume->SetZeroLabel(a->T("Mute")); + PopupSliderChoice *achievementVolume = viewGroup->Add(new PopupSliderChoice(&g_Config.iAchievementVolume, VOLUME_OFF, VOLUMEHI_FULL, MultiplierToVolume100(0.6f), ac->T("Achievement sound volume"), screenManager())); + achievementVolume->SetFormat("%d%%"); + achievementVolume->SetEnabledPtr(&g_Config.bEnableSound); + achievementVolume->SetZeroLabel(a->T("Mute")); static const char *positions[] = { "None", "Bottom Left", "Bottom Center", "Bottom Right", "Top Left", "Top Center", "Top Right", "Center Left", "Center Right" }; diff --git a/headless/Headless.cpp b/headless/Headless.cpp index 59bc9c8772..53f41c6516 100644 --- a/headless/Headless.cpp +++ b/headless/Headless.cpp @@ -528,7 +528,7 @@ int main(int argc, const char* argv[]) g_Config.iFirmwareVersion = PSP_DEFAULT_FIRMWARE; g_Config.iPSPModel = PSP_MODEL_SLIM; g_Config.iGameVolume = VOLUMEHI_FULL; - g_Config.iReverbVolume = VOLUME_FULL; + g_Config.iReverbVolume = VOLUMEHI_FULL; g_Config.internalDataDirectory.clear(); g_Config.bUseExperimentalAtrac = newAtrac;