UI: Add audio monitoring to settings/adv audio props.

Adds audio monitoring selection to advanced audio properties, and adds
the ability to select the device in advanced settings.
This commit is contained in:
jp9000
2017-02-05 21:51:50 -08:00
parent 39d76cc76f
commit 7639b277ce
9 changed files with 166 additions and 17 deletions

View File

@@ -387,6 +387,9 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->colorRange, COMBO_CHANGED, ADV_CHANGED);
HookWidget(ui->disableOSXVSync, CHECK_CHANGED, ADV_CHANGED);
HookWidget(ui->resetOSXVSync, CHECK_CHANGED, ADV_CHANGED);
#if defined(_WIN32) || defined(__APPLE__)
HookWidget(ui->monitoringDevice, COMBO_CHANGED, ADV_CHANGED);
#endif
HookWidget(ui->filenameFormatting, EDIT_CHANGED, ADV_CHANGED);
HookWidget(ui->overwriteIfExists, CHECK_CHANGED, ADV_CHANGED);
HookWidget(ui->simpleRBPrefix, EDIT_CHANGED, ADV_CHANGED);
@@ -400,6 +403,15 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->processPriority, COMBO_CHANGED, ADV_CHANGED);
HookWidget(ui->bindToIP, COMBO_CHANGED, ADV_CHANGED);
#if !defined(_WIN32) && !defined(__APPLE__)
delete ui->monitoringDevice;
delete ui->monitoringDeviceLabel;
delete ui->advAudioGroupBox;
ui->monitoringDevice = nullptr;
ui->monitoringDeviceLabel = nullptr;
ui->advAudioGroupBox = nullptr;
#endif
#ifdef _WIN32
uint32_t winVer = GetWindowsVersion();
if (winVer > 0 && winVer < 0x602) {
@@ -531,6 +543,9 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
FillSimpleRecordingValues();
FillSimpleStreamingValues();
#if defined(_WIN32) || defined(__APPLE__)
FillAudioMonitoringDevices();
#endif
connect(ui->simpleOutRecQuality, SIGNAL(currentIndexChanged(int)),
this, SLOT(SimpleRecordingQualityChanged()));
@@ -1918,6 +1933,12 @@ void OBSBasicSettings::LoadAdvancedSettings()
"Video", "ColorSpace");
const char *videoColorRange = config_get_string(main->Config(),
"Video", "ColorRange");
#if defined(_WIN32) || defined(__APPLE__)
const char *monDevName = config_get_string(main->Config(), "Audio",
"MonitoringDeviceName");
const char *monDevId = config_get_string(main->Config(), "Audio",
"MonitoringDeviceId");
#endif
bool enableDelay = config_get_bool(main->Config(), "Output",
"DelayEnable");
int delaySec = config_get_int(main->Config(), "Output",
@@ -1940,11 +1961,31 @@ void OBSBasicSettings::LoadAdvancedSettings()
"RecRBPrefix");
const char *rbSuffix = config_get_string(main->Config(), "SimpleOutput",
"RecRBSuffix");
int idx;
loading = true;
LoadRendererList();
#if defined(_WIN32) || defined(__APPLE__)
QComboBox *cb = ui->monitoringDevice;
idx = cb->findData(monDevId);
if (idx == -1) {
cb->insertItem(0, monDevName, monDevId);
QStandardItemModel *model =
dynamic_cast<QStandardItemModel*>(cb->model());
if (!model)
return;
QStandardItem *item = model->item(0);
item->setFlags(Qt::NoItemFlags);
idx = 0;
}
cb->setCurrentIndex(idx);
#endif
ui->filenameFormatting->setText(filename);
ui->overwriteIfExists->setChecked(overwriteIfExists);
ui->simpleRBPrefix->setText(rbPrefix);
@@ -1979,7 +2020,7 @@ void OBSBasicSettings::LoadAdvancedSettings()
#elif _WIN32
const char *processPriority = config_get_string(App()->GlobalConfig(),
"General", "ProcessPriority");
int idx = ui->processPriority->findData(processPriority);
idx = ui->processPriority->findData(processPriority);
if (idx == -1)
idx = ui->processPriority->findData("Normal");
ui->processPriority->setCurrentIndex(idx);
@@ -2473,6 +2514,10 @@ void OBSBasicSettings::SaveAdvancedSettings()
SaveCombo(ui->colorFormat, "Video", "ColorFormat");
SaveCombo(ui->colorSpace, "Video", "ColorSpace");
SaveComboData(ui->colorRange, "Video", "ColorRange");
#if defined(_WIN32) || defined(__APPLE__)
SaveCombo(ui->monitoringDevice, "Audio", "MonitoringDeviceName");
SaveComboData(ui->monitoringDevice, "Audio", "MonitoringDeviceId");
#endif
SaveEdit(ui->filenameFormatting, "Output", "FilenameFormatting");
SaveEdit(ui->simpleRBPrefix, "SimpleOutput", "RecRBPrefix");
SaveEdit(ui->simpleRBSuffix, "SimpleOutput", "RecRBSuffix");
@@ -2484,6 +2529,13 @@ void OBSBasicSettings::SaveAdvancedSettings()
SaveSpinBox(ui->reconnectRetryDelay, "Output", "RetryDelay");
SaveSpinBox(ui->reconnectMaxRetries, "Output", "MaxRetries");
SaveComboData(ui->bindToIP, "Output", "BindIP");
#if defined(_WIN32) || defined(__APPLE__)
obs_set_audio_monitoring_device(
QT_TO_UTF8(ui->monitoringDevice->currentText()),
QT_TO_UTF8(ui->monitoringDevice->currentData()
.toString()));
#endif
}
static inline const char *OutputModeFromIdx(int idx)
@@ -3429,6 +3481,23 @@ void OBSBasicSettings::FillSimpleStreamingValues()
#undef ENCODER_STR
}
void OBSBasicSettings::FillAudioMonitoringDevices()
{
QComboBox *cb = ui->monitoringDevice;
auto enum_devices = [] (void *param, const char *name, const char *id)
{
QComboBox *cb = (QComboBox*)param;
cb->addItem(name, id);
return true;
};
cb->addItem(QTStr("Basic.Settings.Advanced.Audio.MonitoringDevice"
".Default"), "default");
obs_enum_audio_monitoring_devices(enum_devices, cb);
}
void OBSBasicSettings::SimpleRecordingQualityChanged()
{
QString qual = ui->simpleOutRecQuality->currentData().toString();