mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-07-11 01:25:07 +02:00
@@ -769,6 +769,11 @@ static int DefaultAchievementVolume() {
|
||||
return MultiplierToVolume100((float)g_Config.iLegacyAchievementVolume / 10.0f);
|
||||
}
|
||||
|
||||
static int DefaultGamePreviewVolume() {
|
||||
// This was previously controlled by the UI volume, so transfer the default value over.
|
||||
return g_Config.iUIVolume;
|
||||
}
|
||||
|
||||
static const ConfigSetting soundSettings[] = {
|
||||
ConfigSetting("Enable", &g_Config.bEnableSound, true, CfgFlag::PER_GAME),
|
||||
ConfigSetting("ExtraAudioBuffering", &g_Config.bExtraAudioBuffering, false, CfgFlag::DEFAULT),
|
||||
@@ -786,6 +791,7 @@ static const ConfigSetting soundSettings[] = {
|
||||
ConfigSetting("AltSpeedRelativeVolume", &g_Config.iAltSpeedVolume, VOLUMEHI_FULL, CfgFlag::PER_GAME),
|
||||
ConfigSetting("AchievementVolume", &g_Config.iAchievementVolume, &DefaultAchievementVolume, CfgFlag::PER_GAME),
|
||||
ConfigSetting("UIVolume", &g_Config.iUIVolume, 75, CfgFlag::DEFAULT),
|
||||
ConfigSetting("GamePreviewVolume", &g_Config.iGamePreviewVolume, &DefaultGamePreviewVolume, CfgFlag::DEFAULT),
|
||||
|
||||
ConfigSetting("AudioDevice", &g_Config.sAudioDevice, "", CfgFlag::DEFAULT),
|
||||
ConfigSetting("AutoAudioDevice", &g_Config.bAutoAudioDevice, true, CfgFlag::DEFAULT),
|
||||
|
||||
@@ -298,6 +298,7 @@ public:
|
||||
int iGameVolume;
|
||||
int iReverbVolume;
|
||||
int iUIVolume;
|
||||
int iGamePreviewVolume; // Volume for the game preview sound in the game grid.
|
||||
int iAchievementVolume;
|
||||
int iAltSpeedVolume;
|
||||
|
||||
|
||||
+14
-14
@@ -273,19 +273,19 @@ private:
|
||||
BackgroundAudio g_BackgroundAudio;
|
||||
|
||||
BackgroundAudio::BackgroundAudio() {
|
||||
buffer = new int[BUFSIZE]();
|
||||
buffer_ = new int[BUFSIZE]();
|
||||
sndLoadPending_.store(false);
|
||||
}
|
||||
|
||||
BackgroundAudio::~BackgroundAudio() {
|
||||
delete at3Reader_;
|
||||
delete[] buffer;
|
||||
delete[] buffer_;
|
||||
}
|
||||
|
||||
void BackgroundAudio::Clear(bool hard) {
|
||||
if (!hard) {
|
||||
fadingOut_ = true;
|
||||
volume_ = 1.0f;
|
||||
volumeFader_ = 1.0f;
|
||||
return;
|
||||
}
|
||||
if (at3Reader_) {
|
||||
@@ -313,7 +313,7 @@ void BackgroundAudio::SetGame(const Path &path) {
|
||||
sndLoadPending_ = true;
|
||||
fadingOut_ = false;
|
||||
}
|
||||
volume_ = 1.0f;
|
||||
volumeFader_ = 1.0f;
|
||||
bgGamePath_ = path;
|
||||
}
|
||||
|
||||
@@ -335,30 +335,30 @@ bool BackgroundAudio::Play() {
|
||||
|
||||
sz = std::min(BUFSIZE / 2, sz);
|
||||
if (at3Reader_) {
|
||||
if (at3Reader_->Read(buffer, sz)) {
|
||||
if (at3Reader_->Read(buffer_, sz)) {
|
||||
if (fadingOut_) {
|
||||
float vol = volume_;
|
||||
float vol = volumeFader_;
|
||||
// TODO: This isn't optimized. But hardly matters...
|
||||
for (int i = 0; i < sz * 2; i += 2) {
|
||||
const float v = vol;
|
||||
buffer[i] = (int)((float)buffer[i] * v);
|
||||
buffer[i + 1] = (int)((float)buffer[i + 1] * v);
|
||||
buffer_[i] = (int)((float)buffer_[i] * v);
|
||||
buffer_[i + 1] = (int)((float)buffer_[i + 1] * v);
|
||||
vol += delta_;
|
||||
}
|
||||
volume_ = vol;
|
||||
volumeFader_ = vol;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < sz * 2; i += 2) {
|
||||
buffer[i] = 0;
|
||||
buffer[i + 1] = 0;
|
||||
buffer_[i] = 0;
|
||||
buffer_[i + 1] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
float multiplier = Volume100ToMultiplier(g_Config.iUIVolume);
|
||||
System_AudioPushSamples(buffer, sz, multiplier);
|
||||
float multiplier = Volume100ToMultiplier(g_Config.iGamePreviewVolume);
|
||||
System_AudioPushSamples(buffer_, sz, multiplier);
|
||||
|
||||
if (at3Reader_ && fadingOut_ && volume_ <= 0.0f) {
|
||||
if (at3Reader_ && fadingOut_ && volumeFader_ <= 0.0f) {
|
||||
Clear(true);
|
||||
fadingOut_ = false;
|
||||
gameLastChanged_ = 0;
|
||||
|
||||
@@ -79,9 +79,9 @@ private:
|
||||
AT3PlusReader *at3Reader_ = nullptr;
|
||||
double gameLastChanged_ = 0.0;
|
||||
double lastPlaybackTime_ = 0.0;
|
||||
int *buffer = nullptr;
|
||||
int *buffer_ = nullptr;
|
||||
bool fadingOut_ = true;
|
||||
float volume_ = 0.0f;
|
||||
float volumeFader_ = 0.0f;
|
||||
float delta_ = -0.0001f;
|
||||
SoundEffectMixer sfxMixer_;
|
||||
};
|
||||
|
||||
@@ -677,6 +677,11 @@ void GameSettingsScreen::CreateAudioSettings(UI::ViewGroup *audioSettings) {
|
||||
return UI::EVENT_DONE;
|
||||
});
|
||||
|
||||
PopupSliderChoice *gamePreviewVolume = audioSettings->Add(new PopupSliderChoice(&g_Config.iGamePreviewVolume, VOLUME_OFF, VOLUMEHI_FULL, NO_DEFAULT_INT, a->T("Game preview volume"), screenManager()));
|
||||
gamePreviewVolume->SetFormat("%d%%");
|
||||
gamePreviewVolume->SetEnabledPtr(&g_Config.bEnableSound);
|
||||
gamePreviewVolume->SetZeroLabel(a->T("Mute"));
|
||||
|
||||
bool sdlAudio = false;
|
||||
|
||||
#if defined(SDL)
|
||||
|
||||
Reference in New Issue
Block a user