Skip to content

Commit 73b3820

Browse files
authored
Audio mute options (#2504)
* Audio mute toggle hotkey * Mute while fastforwarding option * Fix capitalization in "Toggle audio mute"
1 parent 93048ed commit 73b3820

File tree

9 files changed

+47
-14
lines changed

9 files changed

+47
-14
lines changed

src/frontend/qt_sdl/Config.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,7 @@ LegacyEntry LegacyFile[] =
307307
{"MouseHide", 1, "Mouse.Hide", false},
308308
{"MouseHideSeconds", 0, "Mouse.HideSeconds", false},
309309
{"PauseLostFocus", 1, "PauseLostFocus", false},
310+
{"MuteFastForward", 1, "MuteFastForward", false},
310311
{"UITheme", 2, "UITheme", false},
311312

312313
{"RTCOffset", 3, "RTC.Offset", true},

src/frontend/qt_sdl/EmuInstance.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ enum
4848
HK_PowerButton,
4949
HK_VolumeUp,
5050
HK_VolumeDown,
51+
HK_AudioMuteToggle,
5152
HK_SlowMo,
5253
HK_FastForwardToggle,
5354
HK_SlowMoToggle,
@@ -222,7 +223,9 @@ class EmuInstance
222223
void audioDeInit();
223224
void audioEnable();
224225
void audioDisable();
225-
void audioMute();
226+
void updateAudioMuteByWindowFocus();
227+
void toggleAudioMute();
228+
void updateFastForwardMute(bool fastForward);
226229
void audioSync();
227230
void audioUpdateSettings();
228231

@@ -313,7 +316,9 @@ class EmuInstance
313316
int audioFreq;
314317
int audioBufSize;
315318
float audioSampleFrac;
316-
bool audioMuted;
319+
bool audioMutedToggle;
320+
bool audioMutedByFastForward;
321+
bool audioMutedByWindowFocus;
317322
SDL_cond* audioSyncCond;
318323
SDL_mutex* audioSyncLock;
319324

src/frontend/qt_sdl/EmuInstanceAudio.cpp

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ void EmuInstance::audioInit()
3636
audioVolume = localCfg.GetInt("Audio.Volume");
3737
audioDSiVolumeSync = localCfg.GetBool("Audio.DSiVolumeSync");
3838

39-
audioMuted = false;
39+
audioMutedToggle = false;
40+
audioMutedByFastForward = false;
41+
audioMutedByWindowFocus = false;
4042
audioSyncCond = SDL_CreateCond();
4143
audioSyncLock = SDL_CreateMutex();
4244

@@ -97,32 +99,42 @@ void EmuInstance::audioDeInit()
9799
micLock = nullptr;
98100
}
99101

100-
void EmuInstance::audioMute()
102+
void EmuInstance::updateAudioMuteByWindowFocus()
101103
{
102-
audioMuted = false;
104+
audioMutedByWindowFocus = false;
103105
if (numEmuInstances() < 2) return;
104106

105107
switch (mpAudioMode)
106108
{
107109
case 1: // only instance 1
108-
if (instanceID > 0) audioMuted = true;
110+
if (instanceID > 0) audioMutedByWindowFocus = true;
109111
break;
110112

111113
case 2: // only currently focused instance
112-
audioMuted = true;
114+
audioMutedByWindowFocus = true;
113115
for (int i = 0; i < kMaxWindows; i++)
114116
{
115117
if (!windowList[i]) continue;
116118
if (windowList[i]->isFocused())
117119
{
118-
audioMuted = false;
120+
audioMutedByWindowFocus = false;
119121
break;
120122
}
121123
}
122124
break;
123125
}
124126
}
125127

128+
void EmuInstance::toggleAudioMute()
129+
{
130+
audioMutedToggle = !audioMutedToggle;
131+
}
132+
133+
void EmuInstance::updateFastForwardMute(bool fastForward)
134+
{
135+
audioMutedByFastForward = fastForward && globalCfg.GetBool("MuteFastForward");
136+
}
137+
126138
void EmuInstance::audioSync()
127139
{
128140
if (audioDevice)
@@ -164,7 +176,7 @@ void EmuInstance::audioCallback(void* data, Uint8* stream, int len)
164176
SDL_CondSignal(inst->audioSyncCond);
165177
SDL_UnlockMutex(inst->audioSyncLock);
166178

167-
if ((num_in < 1) || inst->audioMuted)
179+
if ((num_in < 1) || inst->audioMutedByWindowFocus || inst->audioMutedToggle || inst->audioMutedByFastForward)
168180
{
169181
memset(stream, 0, len*sizeof(s16)*2);
170182
return;

src/frontend/qt_sdl/EmuInstanceInput.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ const char* EmuInstance::hotkeyNames[HK_MAX] =
6060
"HK_PowerButton",
6161
"HK_VolumeUp",
6262
"HK_VolumeDown",
63+
"HK_AudioMuteToggle",
6364
"HK_SlowMo",
6465
"HK_FastForwardToggle",
6566
"HK_SlowMoToggle",

src/frontend/qt_sdl/EmuThread.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,8 @@ void EmuThread::run()
344344
if (emuInstance->hotkeyPressed(HK_FastForwardToggle)) emuInstance->fastForwardToggled = !emuInstance->fastForwardToggled;
345345
if (emuInstance->hotkeyPressed(HK_SlowMoToggle)) emuInstance->slowmoToggled = !emuInstance->slowmoToggled;
346346

347+
if (emuInstance->hotkeyPressed(HK_AudioMuteToggle)) emuInstance->toggleAudioMute();
348+
347349
bool enablefastforward = emuInstance->hotkeyDown(HK_FastForward) | emuInstance->fastForwardToggled;
348350
bool enableslowmo = emuInstance->hotkeyDown(HK_SlowMo) | emuInstance->slowmoToggled;
349351

@@ -362,6 +364,7 @@ void EmuThread::run()
362364

363365
fastforward = enablefastforward;
364366
slowmo = enableslowmo;
367+
emuInstance->updateFastForwardMute(fastforward);
365368

366369
if (slowmo) emuInstance->curFPS = emuInstance->slowmoFPS;
367370
else if (fastforward) emuInstance->curFPS = emuInstance->fastForwardFPS;

src/frontend/qt_sdl/InputConfig/InputConfigDialog.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ static constexpr std::initializer_list<int> hk_general =
6767
HK_SwapScreenEmphasis,
6868
HK_PowerButton,
6969
HK_VolumeUp,
70-
HK_VolumeDown
70+
HK_VolumeDown,
71+
HK_AudioMuteToggle
7172
};
7273

7374
static constexpr std::initializer_list<const char*> hk_general_labels =
@@ -87,7 +88,8 @@ static constexpr std::initializer_list<const char*> hk_general_labels =
8788
"Swap screen emphasis",
8889
"DSi Power button",
8990
"DSi Volume up",
90-
"DSi Volume down"
91+
"DSi Volume down",
92+
"Toggle audio mute"
9193
};
9294

9395
static_assert(hk_general.size() == hk_general_labels.size());

src/frontend/qt_sdl/InterfaceSettingsDialog.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ InterfaceSettingsDialog::InterfaceSettingsDialog(QWidget* parent) : QDialog(pare
3939
ui->spinMouseHideSeconds->setEnabled(ui->cbMouseHide->isChecked());
4040
ui->spinMouseHideSeconds->setValue(cfg.GetInt("Mouse.HideSeconds"));
4141
ui->cbPauseLostFocus->setChecked(cfg.GetBool("PauseLostFocus"));
42+
ui->cbMuteFastForward->setChecked(cfg.GetBool("MuteFastForward"));
4243
ui->spinTargetFPS->setValue(cfg.GetDouble("TargetFPS"));
4344
ui->spinFFW->setValue(cfg.GetDouble("FastForwardFPS"));
4445
ui->spinSlow->setValue(cfg.GetDouble("SlowmoFPS"));
@@ -118,6 +119,7 @@ void InterfaceSettingsDialog::done(int r)
118119
cfg.SetBool("Mouse.Hide", ui->cbMouseHide->isChecked());
119120
cfg.SetInt("Mouse.HideSeconds", ui->spinMouseHideSeconds->value());
120121
cfg.SetBool("PauseLostFocus", ui->cbPauseLostFocus->isChecked());
122+
cfg.SetBool("MuteFastForward", ui->cbMuteFastForward->isChecked());
121123

122124
double val = ui->spinTargetFPS->value();
123125
if (val == 0.0) cfg.SetDouble("TargetFPS", 0.0001);

src/frontend/qt_sdl/InterfaceSettingsDialog.ui

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,13 @@
9090
</property>
9191
</widget>
9292
</item>
93+
<item>
94+
<widget class="QCheckBox" name="cbMuteFastForward">
95+
<property name="text">
96+
<string>Mute audio while fast forwarding</string>
97+
</property>
98+
</widget>
99+
</item>
93100
</layout>
94101
</widget>
95102
</item>

src/frontend/qt_sdl/Window.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1073,7 +1073,7 @@ void MainWindow::onFocusIn()
10731073
{
10741074
focused = true;
10751075
if (emuInstance)
1076-
emuInstance->audioMute();
1076+
emuInstance->updateAudioMuteByWindowFocus();
10771077
}
10781078

10791079
void MainWindow::onFocusOut()
@@ -1082,7 +1082,7 @@ void MainWindow::onFocusOut()
10821082
// prevent use after free
10831083
focused = false;
10841084
if (emuInstance)
1085-
emuInstance->audioMute();
1085+
emuInstance->updateAudioMuteByWindowFocus();
10861086
}
10871087

10881088
void MainWindow::onAppStateChanged(Qt::ApplicationState state)
@@ -2004,7 +2004,7 @@ void MainWindow::onOpenMPSettings()
20042004
void MainWindow::onMPSettingsFinished(int res)
20052005
{
20062006
emuInstance->mpAudioMode = globalCfg.GetInt("MP.AudioMode");
2007-
emuInstance->audioMute();
2007+
emuInstance->updateAudioMuteByWindowFocus();
20082008
MPInterface::Get().SetRecvTimeout(globalCfg.GetInt("MP.RecvTimeout"));
20092009

20102010
emuThread->emuUnpause();

0 commit comments

Comments
 (0)