diff options
-rw-r--r-- | utils/alsoft-config/mainwindow.cpp | 78 | ||||
-rw-r--r-- | utils/alsoft-config/mainwindow.h | 2 | ||||
-rw-r--r-- | utils/alsoft-config/mainwindow.ui | 645 |
3 files changed, 423 insertions, 302 deletions
diff --git a/utils/alsoft-config/mainwindow.cpp b/utils/alsoft-config/mainwindow.cpp index 01f59e4b..c05e343e 100644 --- a/utils/alsoft-config/mainwindow.cpp +++ b/utils/alsoft-config/mainwindow.cpp @@ -86,12 +86,12 @@ static const struct { { "", "" } }, resamplerList[] = { - { "Default", "" }, - { "Point (low quality, very fast)", "point" }, - { "Linear (basic quality, fast)", "linear" }, - { "4-Point Sinc (good quality)", "sinc4" }, - { "8-Point Sinc (high quality, slow)", "sinc8" }, - { "Band-limited Sinc (very high quality, very slow)", "bsinc" }, + { "Point", "point" }, + { "Linear", "linear" }, + { "Default (Linear)", "" }, + { "4-Point Sinc", "sinc4" }, + { "8-Point Sinc", "sinc8" }, + { "Band-limited Sinc", "bsinc" }, { "", "" } }, stereoModeList[] = { @@ -183,13 +183,15 @@ MainWindow::MainWindow(QWidget *parent) : for(int i = 0;sampleTypeList[i].name[0];i++) ui->sampleFormatCombo->addItem(sampleTypeList[i].name); ui->sampleFormatCombo->adjustSize(); - for(int i = 0;resamplerList[i].name[0];i++) - ui->resamplerComboBox->addItem(resamplerList[i].name); - ui->resamplerComboBox->adjustSize(); for(int i = 0;stereoModeList[i].name[0];i++) ui->stereoModeCombo->addItem(stereoModeList[i].name); ui->stereoModeCombo->adjustSize(); + int count; + for(count = 0;resamplerList[count].name[0];count++) { + } + ui->resamplerSlider->setRange(0, count-1); + ui->hrtfStateComboBox->adjustSize(); #if !defined(HAVE_NEON) && !defined(HAVE_SSE) @@ -251,6 +253,8 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->applyButton, SIGNAL(clicked()), this, SLOT(saveCurrentConfig())); + connect(ui->resamplerSlider, SIGNAL(valueChanged(int)), this, SLOT(updateResamplerLabel(int))); + connect(ui->periodSizeSlider, SIGNAL(valueChanged(int)), this, SLOT(updatePeriodSizeEdit(int))); connect(ui->periodSizeEdit, SIGNAL(editingFinished()), this, SLOT(updatePeriodSizeSlider())); connect(ui->periodCountSlider, SIGNAL(valueChanged(int)), this, SLOT(updatePeriodCountEdit(int))); @@ -352,29 +356,17 @@ void MainWindow::loadConfig(const QString &fname) ui->srcSendLineEdit->insert(settings.value("sends").toString()); QString resampler = settings.value("resampler").toString().trimmed(); - ui->resamplerComboBox->setCurrentIndex(0); - if(resampler.isEmpty() == false) + ui->resamplerSlider->setValue(0); + /* The "cubic" resampler is no longer supported. It's been replaced by + * "sinc4". */ + if(resampler == "cubic") + resampler = "sinc4"; + for(int i = 0;resamplerList[i].name[i];i++) { - /* The "cubic" resampler is no longer supported. It's been replaced by - * "sinc4". */ - if(resampler == "cubic") - resampler = "sinc4"; - - for(int i = 0;resamplerList[i].name[i];i++) + if(resampler == resamplerList[i].value) { - if(resampler == resamplerList[i].value) - { - for(int j = 1;j < ui->resamplerComboBox->count();j++) - { - QString item = ui->resamplerComboBox->itemText(j); - if(item == resamplerList[i].name) - { - ui->resamplerComboBox->setCurrentIndex(j); - break; - } - } - break; - } + ui->resamplerSlider->setValue(i); + break; } } @@ -442,6 +434,14 @@ void MainWindow::loadConfig(const QString &fname) hrtf_tables = hrtf_tables[0].split(QChar(',')); std::transform(hrtf_tables.begin(), hrtf_tables.end(), hrtf_tables.begin(), std::mem_fun_ref(&QString::trimmed)); + hrtf_tables.removeDuplicates(); + if(!hrtf_tables.empty() && !hrtf_tables.contains("%s.mhr")) + ui->defaultHrtfPathsCheckBox->setCheckState(Qt::Unchecked); + else + { + hrtf_tables.removeOne("%s.mhr"); + ui->defaultHrtfPathsCheckBox->setCheckState(Qt::Checked); + } ui->hrtfFileList->clear(); ui->hrtfFileList->addItems(hrtf_tables); updateHrtfRemoveButton(); @@ -562,15 +562,7 @@ void MainWindow::saveConfig(const QString &fname) const settings.setValue("sources", ui->srcCountLineEdit->text()); settings.setValue("slots", ui->effectSlotLineEdit->text()); - str = ui->resamplerComboBox->currentText(); - for(int i = 0;resamplerList[i].name[0];i++) - { - if(str == resamplerList[i].name) - { - settings.setValue("resampler", resamplerList[i].value); - break; - } - } + settings.setValue("resampler", resamplerList[ui->resamplerSlider->value()].value); str = ui->stereoModeCombo->currentText(); for(int i = 0;stereoModeList[i].name[0];i++) @@ -606,6 +598,8 @@ void MainWindow::saveConfig(const QString &fname) const QList<QListWidgetItem*> items = ui->hrtfFileList->findItems("*", Qt::MatchWildcard); foreach(const QListWidgetItem *item, items) strlist.append(item->text()); + if(!strlist.empty() && ui->defaultHrtfPathsCheckBox->isChecked()) + strlist.append("%s.mhr"); settings.setValue("hrtf_tables", strlist.join(QChar(','))); strlist.clear(); @@ -671,6 +665,12 @@ void MainWindow::saveConfig(const QString &fname) const } +void MainWindow::updateResamplerLabel(int num) +{ + ui->resamplerLabel->setText(resamplerList[num].name); +} + + void MainWindow::updatePeriodSizeEdit(int size) { ui->periodSizeEdit->clear(); diff --git a/utils/alsoft-config/mainwindow.h b/utils/alsoft-config/mainwindow.h index b5a1ae7c..0f94c0ce 100644 --- a/utils/alsoft-config/mainwindow.h +++ b/utils/alsoft-config/mainwindow.h @@ -22,6 +22,8 @@ private slots: void saveConfigAsFile(); void loadConfigFromFile(); + void updateResamplerLabel(int num); + void updatePeriodSizeEdit(int size); void updatePeriodSizeSlider(); void updatePeriodCountEdit(int size); diff --git a/utils/alsoft-config/mainwindow.ui b/utils/alsoft-config/mainwindow.ui index ab575fee..30e53d15 100644 --- a/utils/alsoft-config/mainwindow.ui +++ b/utils/alsoft-config/mainwindow.ui @@ -10,6 +10,18 @@ <height>454</height> </rect> </property> + <property name="minimumSize"> + <size> + <width>564</width> + <height>454</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>564</width> + <height>454</height> + </size> + </property> <property name="windowTitle"> <string>OpenAL Soft Configuration</string> </property> @@ -198,339 +210,475 @@ to stereo output.</string> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> </widget> + <widget class="QLabel" name="label_14"> + <property name="geometry"> + <rect> + <x>280</x> + <y>50</y> + <width>81</width> + <height>21</height> + </rect> + </property> + <property name="text"> + <string>Stereo Mode:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + <widget class="QComboBox" name="stereoModeCombo"> + <property name="geometry"> + <rect> + <x>370</x> + <y>50</y> + <width>78</width> + <height>22</height> + </rect> + </property> + <property name="toolTip"> + <string>How to treat stereo output. As headphones, HRTF or crossfeed +filters may be used to improve binaural quality, which may not +otherwise be suitable for speakers.</string> + </property> + </widget> <widget class="QGroupBox" name="groupBox"> <property name="geometry"> <rect> - <x>10</x> - <y>180</y> - <width>511</width> - <height>191</height> + <x>-11</x> + <y>200</y> + <width>551</width> + <height>181</height> </rect> </property> <property name="title"> - <string>HRTF (Stereo only)</string> + <string>Advanced Settings</string> </property> - <widget class="QListWidget" name="hrtfFileList"> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + <widget class="QGroupBox" name="groupBox_3"> <property name="geometry"> <rect> <x>20</x> <y>30</y> - <width>391</width> - <height>121</height> - </rect> - </property> - <property name="toolTip"> - <string>A list of files containing HRTF data sets. The listed data sets -are used in place of the default sets. The filenames may -contain these markers, which will be replaced as needed: -%r - Device sampling rate -%s - Non-greedy string (up to the following matching characters) -%% - Percent sign (%)</string> - </property> - <property name="dragEnabled"> - <bool>false</bool> - </property> - <property name="dragDropMode"> - <enum>QAbstractItemView::InternalMove</enum> - </property> - <property name="alternatingRowColors"> - <bool>true</bool> - </property> - <property name="selectionMode"> - <enum>QAbstractItemView::ExtendedSelection</enum> - </property> - <property name="textElideMode"> - <enum>Qt::ElideNone</enum> - </property> - </widget> - <widget class="QPushButton" name="hrtfAddButton"> - <property name="geometry"> - <rect> - <x>420</x> - <y>30</y> - <width>81</width> - <height>25</height> + <width>511</width> + <height>91</height> </rect> </property> - <property name="text"> - <string>Add...</string> - </property> - <property name="icon"> - <iconset theme="list-add"> - <normaloff/> - </iconset> + <property name="title"> + <string>Buffer Metrics</string> </property> - <property name="flat"> - <bool>false</bool> + <property name="alignment"> + <set>Qt::AlignCenter</set> </property> + <widget class="QWidget" name="widget" native="true"> + <property name="geometry"> + <rect> + <x>260</x> + <y>20</y> + <width>241</width> + <height>51</height> + </rect> + </property> + <property name="toolTip"> + <string>The number of update periods. Higher values create a larger +mix ahead, which helps protect against skips when the CPU is +under load, but increases the delay between a sound getting +mixed and being heard.</string> + </property> + <widget class="QLabel" name="label_11"> + <property name="geometry"> + <rect> + <x>20</x> + <y>0</y> + <width>201</width> + <height>21</height> + </rect> + </property> + <property name="text"> + <string>Period Count</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + <widget class="QSlider" name="periodCountSlider"> + <property name="geometry"> + <rect> + <x>70</x> + <y>20</y> + <width>160</width> + <height>23</height> + </rect> + </property> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>16</number> + </property> + <property name="singleStep"> + <number>1</number> + </property> + <property name="pageStep"> + <number>2</number> + </property> + <property name="value"> + <number>1</number> + </property> + <property name="tracking"> + <bool>true</bool> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="tickPosition"> + <enum>QSlider::TicksBelow</enum> + </property> + <property name="tickInterval"> + <number>1</number> + </property> + </widget> + <widget class="QLineEdit" name="periodCountEdit"> + <property name="geometry"> + <rect> + <x>20</x> + <y>20</y> + <width>51</width> + <height>22</height> + </rect> + </property> + <property name="placeholderText"> + <string>4</string> + </property> + </widget> + </widget> + <widget class="QWidget" name="widget_2" native="true"> + <property name="geometry"> + <rect> + <x>10</x> + <y>20</y> + <width>241</width> + <height>51</height> + </rect> + </property> + <property name="toolTip"> + <string>The update period size, in sample frames. This is the number of +frames needed for each mixing update.</string> + </property> + <widget class="QSlider" name="periodSizeSlider"> + <property name="geometry"> + <rect> + <x>60</x> + <y>20</y> + <width>160</width> + <height>23</height> + </rect> + </property> + <property name="minimum"> + <number>0</number> + </property> + <property name="maximum"> + <number>8192</number> + </property> + <property name="singleStep"> + <number>64</number> + </property> + <property name="pageStep"> + <number>1024</number> + </property> + <property name="value"> + <number>0</number> + </property> + <property name="tracking"> + <bool>true</bool> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="tickPosition"> + <enum>QSlider::TicksBelow</enum> + </property> + <property name="tickInterval"> + <number>512</number> + </property> + </widget> + <widget class="QLabel" name="label_10"> + <property name="geometry"> + <rect> + <x>10</x> + <y>0</y> + <width>201</width> + <height>21</height> + </rect> + </property> + <property name="text"> + <string>Period Samples</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + <widget class="QLineEdit" name="periodSizeEdit"> + <property name="geometry"> + <rect> + <x>10</x> + <y>20</y> + <width>51</width> + <height>22</height> + </rect> + </property> + <property name="placeholderText"> + <string>1024</string> + </property> + </widget> + </widget> </widget> - <widget class="QPushButton" name="hrtfRemoveButton"> + </widget> + <widget class="QGroupBox" name="groupBox_4"> + <property name="geometry"> + <rect> + <x>90</x> + <y>80</y> + <width>351</width> + <height>81</height> + </rect> + </property> + <property name="title"> + <string>Resampler Quality</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + <widget class="QLabel" name="resamplerLabel"> <property name="geometry"> <rect> - <x>420</x> - <y>60</y> - <width>81</width> - <height>25</height> + <x>20</x> + <y>50</y> + <width>311</width> + <height>21</height> </rect> </property> <property name="text"> - <string>Remove</string> - </property> - <property name="icon"> - <iconset theme="list-remove"> - <normaloff/> - </iconset> - </property> - </widget> - <widget class="QComboBox" name="hrtfStateComboBox"> - <property name="geometry"> - <rect> - <x>110</x> - <y>160</y> - <width>161</width> - <height>22</height> - </rect> + <string>Default</string> </property> - <property name="sizeAdjustPolicy"> - <enum>QComboBox::AdjustToContentsOnFirstShow</enum> + <property name="alignment"> + <set>Qt::AlignCenter</set> </property> - <item> - <property name="text"> - <string>Application preference</string> - </property> - </item> - <item> - <property name="text"> - <string>Force on</string> - </property> - </item> - <item> - <property name="text"> - <string>Force off</string> - </property> - </item> </widget> - <widget class="QLabel" name="label_15"> + <widget class="QSlider" name="resamplerSlider"> <property name="geometry"> <rect> - <x>30</x> - <y>160</y> - <width>71</width> - <height>21</height> + <x>20</x> + <y>30</y> + <width>311</width> + <height>23</height> </rect> </property> - <property name="text"> - <string>HRTF Mode:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + <property name="orientation"> + <enum>Qt::Horizontal</enum> </property> </widget> </widget> - <widget class="QGroupBox" name="groupBox_3"> + </widget> + <widget class="QWidget" name="tab_5"> + <attribute name="title"> + <string>HRTF</string> + </attribute> + <widget class="QGroupBox" name="groupBox_2"> <property name="geometry"> <rect> - <x>10</x> - <y>90</y> - <width>511</width> - <height>91</height> + <x>-10</x> + <y>200</y> + <width>551</width> + <height>181</height> </rect> </property> <property name="title"> - <string>Buffer Metrics</string> + <string>Advanced Settings</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + <property name="checkable"> + <bool>false</bool> + </property> + <property name="checked"> + <bool>false</bool> </property> - <widget class="QWidget" name="widget" native="true"> + <widget class="QGroupBox" name="groupBox_6"> <property name="geometry"> <rect> - <x>260</x> - <y>20</y> - <width>241</width> - <height>51</height> + <x>20</x> + <y>30</y> + <width>511</width> + <height>141</height> </rect> </property> - <property name="toolTip"> - <string>The number of update periods. Higher values create a larger -mix ahead, which helps protect against skips when the CPU is -under load, but increases the delay between a sound getting -mixed and being heard.</string> + <property name="title"> + <string>HRTF Profiles</string> </property> - <widget class="QLabel" name="label_11"> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + <widget class="QListWidget" name="hrtfFileList"> <property name="geometry"> <rect> <x>20</x> - <y>0</y> - <width>201</width> - <height>21</height> - </rect> - </property> - <property name="text"> - <string>Period Count</string> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - </widget> - <widget class="QSlider" name="periodCountSlider"> - <property name="geometry"> - <rect> - <x>70</x> <y>20</y> - <width>160</width> - <height>23</height> + <width>391</width> + <height>81</height> </rect> </property> - <property name="minimum"> - <number>1</number> - </property> - <property name="maximum"> - <number>16</number> - </property> - <property name="singleStep"> - <number>1</number> + <property name="toolTip"> + <string>A list of files containing HRTF data sets. The listed data sets +are used in place of the default sets. The filenames may +contain these markers, which will be replaced as needed: +%r - Device sampling rate +%s - Non-greedy string (up to the following matching characters) +%% - Percent sign (%)</string> </property> - <property name="pageStep"> - <number>2</number> + <property name="dragEnabled"> + <bool>false</bool> </property> - <property name="value"> - <number>1</number> + <property name="dragDropMode"> + <enum>QAbstractItemView::InternalMove</enum> </property> - <property name="tracking"> + <property name="alternatingRowColors"> <bool>true</bool> </property> - <property name="orientation"> - <enum>Qt::Horizontal</enum> + <property name="selectionMode"> + <enum>QAbstractItemView::ExtendedSelection</enum> </property> - <property name="tickPosition"> - <enum>QSlider::TicksBelow</enum> - </property> - <property name="tickInterval"> - <number>1</number> + <property name="textElideMode"> + <enum>Qt::ElideNone</enum> </property> </widget> - <widget class="QLineEdit" name="periodCountEdit"> + <widget class="QPushButton" name="hrtfAddButton"> <property name="geometry"> <rect> - <x>20</x> + <x>420</x> <y>20</y> - <width>51</width> - <height>22</height> + <width>81</width> + <height>25</height> </rect> </property> - <property name="placeholderText"> - <string>4</string> - </property> - </widget> - </widget> - <widget class="QWidget" name="widget_2" native="true"> - <property name="geometry"> - <rect> - <x>10</x> - <y>20</y> - <width>241</width> - <height>51</height> - </rect> - </property> - <property name="toolTip"> - <string>The update period size, in sample frames. This is the number of -frames needed for each mixing update.</string> - </property> - <widget class="QSlider" name="periodSizeSlider"> - <property name="geometry"> - <rect> - <x>60</x> - <y>20</y> - <width>160</width> - <height>23</height> - </rect> - </property> - <property name="minimum"> - <number>0</number> - </property> - <property name="maximum"> - <number>8192</number> - </property> - <property name="singleStep"> - <number>64</number> - </property> - <property name="pageStep"> - <number>1024</number> - </property> - <property name="value"> - <number>0</number> - </property> - <property name="tracking"> - <bool>true</bool> - </property> - <property name="orientation"> - <enum>Qt::Horizontal</enum> + <property name="text"> + <string>Add...</string> </property> - <property name="tickPosition"> - <enum>QSlider::TicksBelow</enum> + <property name="icon"> + <iconset theme="list-add"> + <normaloff/> + </iconset> </property> - <property name="tickInterval"> - <number>512</number> + <property name="flat"> + <bool>false</bool> </property> </widget> - <widget class="QLabel" name="label_10"> + <widget class="QCheckBox" name="defaultHrtfPathsCheckBox"> <property name="geometry"> <rect> - <x>10</x> - <y>0</y> - <width>201</width> + <x>180</x> + <y>110</y> + <width>151</width> <height>21</height> </rect> </property> <property name="text"> - <string>Period Samples</string> + <string>Include Default Paths</string> </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> + <property name="checked"> + <bool>true</bool> </property> </widget> - <widget class="QLineEdit" name="periodSizeEdit"> + <widget class="QPushButton" name="hrtfRemoveButton"> <property name="geometry"> <rect> - <x>10</x> - <y>20</y> - <width>51</width> - <height>22</height> + <x>420</x> + <y>50</y> + <width>81</width> + <height>25</height> </rect> </property> - <property name="placeholderText"> - <string>1024</string> + <property name="text"> + <string>Remove</string> + </property> + <property name="icon"> + <iconset theme="list-remove"> + <normaloff/> + </iconset> </property> </widget> </widget> </widget> - <widget class="QLabel" name="label_14"> + <widget class="QLabel" name="label_16"> <property name="geometry"> <rect> - <x>280</x> + <x>40</x> <y>50</y> - <width>81</width> + <width>71</width> <height>21</height> </rect> </property> <property name="text"> - <string>Stereo Mode:</string> + <string>HRTF Mode:</string> </property> <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> </widget> - <widget class="QComboBox" name="stereoModeCombo"> + <widget class="QComboBox" name="hrtfStateComboBox"> <property name="geometry"> <rect> - <x>370</x> + <x>130</x> <y>50</y> - <width>78</width> + <width>161</width> <height>22</height> </rect> </property> - <property name="toolTip"> - <string>How to treat stereo output. As headphones, HRTF or crossfeed -filters may be used to improve binaural quality, which may not -otherwise be suitable for speakers.</string> + <property name="sizeAdjustPolicy"> + <enum>QComboBox::AdjustToContentsOnFirstShow</enum> + </property> + <item> + <property name="text"> + <string>Application preference</string> + </property> + </item> + <item> + <property name="text"> + <string>Force on</string> + </property> + </item> + <item> + <property name="text"> + <string>Force off</string> + </property> + </item> + </widget> + <widget class="QLabel" name="label_12"> + <property name="geometry"> + <rect> + <x>20</x> + <y>20</y> + <width>91</width> + <height>21</height> + </rect> + </property> + <property name="text"> + <string>Preferred HRTF:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + <widget class="QComboBox" name="preferredHrtfComboBox"> + <property name="geometry"> + <rect> + <x>130</x> + <y>20</y> + <width>161</width> + <height>22</height> + </rect> </property> </widget> </widget> @@ -662,40 +810,11 @@ value currently possible is 4.</string> <string>Auto</string> </property> </widget> - <widget class="QLabel" name="label_9"> - <property name="geometry"> - <rect> - <x>30</x> - <y>120</y> - <width>71</width> - <height>21</height> - </rect> - </property> - <property name="text"> - <string>Resampler:</string> - </property> - </widget> - <widget class="QComboBox" name="resamplerComboBox"> - <property name="geometry"> - <rect> - <x>110</x> - <y>120</y> - <width>78</width> - <height>22</height> - </rect> - </property> - <property name="toolTip"> - <string>The resampling method used when mixing sources.</string> - </property> - <property name="sizeAdjustPolicy"> - <enum>QComboBox::AdjustToContents</enum> - </property> - </widget> <widget class="QGroupBox" name="cpuExtGroupBox"> <property name="geometry"> <rect> <x>10</x> - <y>150</y> + <y>120</y> <width>511</width> <height>121</height> </rect> |