Restructure alsoft-config UI

The HRTF stuff is moved to its own tab, and a Preferred HRTF combo box is added
for future use. The resampler option is moved to the main Playback tab, and
some options are moved to an Advanced Settings section on the tab.
This commit is contained in:
Chris Robinson
2016-02-22 03:05:13 -08:00
parent bd233c8cdb
commit 9d94f792de
3 changed files with 494 additions and 373 deletions
+39 -39
View File
@@ -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();
+2
View File
@@ -22,6 +22,8 @@ private slots:
void saveConfigAsFile();
void loadConfigFromFile();
void updateResamplerLabel(int num);
void updatePeriodSizeEdit(int size);
void updatePeriodSizeSlider();
void updatePeriodCountEdit(int size);
+453 -334
View File
@@ -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,310 +210,6 @@ to stereo output.</string>
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QGroupBox" name="groupBox">
<property name="geometry">
<rect>
<x>10</x>
<y>180</y>
<width>511</width>
<height>191</height>
</rect>
</property>
<property name="title">
<string>HRTF (Stereo only)</string>
</property>
<widget class="QListWidget" name="hrtfFileList">
<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>
</rect>
</property>
<property name="text">
<string>Add...</string>
</property>
<property name="icon">
<iconset theme="list-add">
<normaloff/>
</iconset>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
<widget class="QPushButton" name="hrtfRemoveButton">
<property name="geometry">
<rect>
<x>420</x>
<y>60</y>
<width>81</width>
<height>25</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>
</property>
<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_15">
<property name="geometry">
<rect>
<x>30</x>
<y>160</y>
<width>71</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>HRTF Mode:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_3">
<property name="geometry">
<rect>
<x>10</x>
<y>90</y>
<width>511</width>
<height>91</height>
</rect>
</property>
<property name="title">
<string>Buffer Metrics</string>
</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="QLabel" name="label_14">
<property name="geometry">
<rect>
@@ -533,6 +241,446 @@ 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>-11</x>
<y>200</y>
<width>551</width>
<height>181</height>
</rect>
</property>
<property name="title">
<string>Advanced Settings</string>
</property>
<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>511</width>
<height>91</height>
</rect>
</property>
<property name="title">
<string>Buffer Metrics</string>
</property>
<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>
<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>20</x>
<y>50</y>
<width>311</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Default</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QSlider" name="resamplerSlider">
<property name="geometry">
<rect>
<x>20</x>
<y>30</y>
<width>311</width>
<height>23</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</widget>
</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>200</y>
<width>551</width>
<height>181</height>
</rect>
</property>
<property name="title">
<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="QGroupBox" name="groupBox_6">
<property name="geometry">
<rect>
<x>20</x>
<y>30</y>
<width>511</width>
<height>141</height>
</rect>
</property>
<property name="title">
<string>HRTF Profiles</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<widget class="QListWidget" name="hrtfFileList">
<property name="geometry">
<rect>
<x>20</x>
<y>20</y>
<width>391</width>
<height>81</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>20</y>
<width>81</width>
<height>25</height>
</rect>
</property>
<property name="text">
<string>Add...</string>
</property>
<property name="icon">
<iconset theme="list-add">
<normaloff/>
</iconset>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
<widget class="QCheckBox" name="defaultHrtfPathsCheckBox">
<property name="geometry">
<rect>
<x>180</x>
<y>110</y>
<width>151</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Include Default Paths</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
<widget class="QPushButton" name="hrtfRemoveButton">
<property name="geometry">
<rect>
<x>420</x>
<y>50</y>
<width>81</width>
<height>25</height>
</rect>
</property>
<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_16">
<property name="geometry">
<rect>
<x>40</x>
<y>50</y>
<width>71</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>HRTF Mode:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QComboBox" name="hrtfStateComboBox">
<property name="geometry">
<rect>
<x>130</x>
<y>50</y>
<width>161</width>
<height>22</height>
</rect>
</property>
<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>
<widget class="QWidget" name="tab_2">
<attribute name="title">
@@ -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>