UI: Add audio meter decay rate option

The decay rate of the audio meters can now be selected in the audio
settings.  The values are:

- "Fast"   (OBS default, 40 dB / 1.7s)
- "Medium" (Type I PPM,  20 dB / 1.7s)
- "Slow"   (Type II PPM, 24 dB / 2.8s)

Closes jp9000/obs-studio#1143
This commit is contained in:
Shaolin
2018-01-09 18:45:20 -02:00
committed by jp9000
parent bba37a7069
commit 53d936c5dc
11 changed files with 112 additions and 15 deletions

View File

@@ -400,6 +400,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->advRBMegsMax, SCROLL_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->channelSetup, COMBO_CHANGED, AUDIO_RESTART);
HookWidget(ui->sampleRate, COMBO_CHANGED, AUDIO_RESTART);
HookWidget(ui->meterDecayRate, COMBO_CHANGED, AUDIO_CHANGED);
HookWidget(ui->desktopAudioDevice1, COMBO_CHANGED, AUDIO_CHANGED);
HookWidget(ui->desktopAudioDevice2, COMBO_CHANGED, AUDIO_CHANGED);
HookWidget(ui->auxAudioDevice1, COMBO_CHANGED, AUDIO_CHANGED);
@@ -2119,6 +2120,8 @@ void OBSBasicSettings::LoadAudioSettings()
"SampleRate");
const char *speakers = config_get_string(main->Config(), "Audio",
"ChannelSetup");
double meterDecayRate = config_get_double(main->Config(), "Audio",
"MeterDecayRate");
loading = true;
@@ -2147,6 +2150,13 @@ void OBSBasicSettings::LoadAudioSettings()
else
ui->channelSetup->setCurrentIndex(1);
if (meterDecayRate == VOLUME_METER_DECAY_MEDIUM)
ui->meterDecayRate->setCurrentIndex(1);
else if (meterDecayRate == VOLUME_METER_DECAY_SLOW)
ui->meterDecayRate->setCurrentIndex(2);
else
ui->meterDecayRate->setCurrentIndex(0);
LoadAudioDevices();
LoadAudioSources();
@@ -3079,6 +3089,28 @@ void OBSBasicSettings::SaveAudioSettings()
config_set_string(main->Config(), "Audio", "ChannelSetup",
channelSetup);
if (WidgetChanged(ui->meterDecayRate)) {
double meterDecayRate;
switch (ui->meterDecayRate->currentIndex()) {
case 0:
meterDecayRate = VOLUME_METER_DECAY_FAST;
break;
case 1:
meterDecayRate = VOLUME_METER_DECAY_MEDIUM;
break;
case 2:
meterDecayRate = VOLUME_METER_DECAY_SLOW;
break;
default:
meterDecayRate = VOLUME_METER_DECAY_FAST;
break;
}
config_set_double(main->Config(), "Audio", "MeterDecayRate",
meterDecayRate);
main->UpdateVolumeControlsDecayRate();
}
for (auto &audioSource : audioSources) {
auto source = OBSGetStrongRef(get<0>(audioSource));
if (!source)