From 097ed84a871dbf467342740de6eea1c8f53f898e Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sun, 12 Mar 2017 13:24:16 -0700 Subject: [PATCH] Handle the nfc-ref-delay config option --- alsoftrc.sample | 10 ++++ utils/alsoft-config/mainwindow.cpp | 34 ++++++++++++ utils/alsoft-config/mainwindow.h | 4 ++ utils/alsoft-config/mainwindow.ui | 84 +++++++++++++++++++++++++++++- 4 files changed, 131 insertions(+), 1 deletion(-) diff --git a/alsoftrc.sample b/alsoftrc.sample index 26ef9153..fcdd4027 100644 --- a/alsoftrc.sample +++ b/alsoftrc.sample @@ -247,6 +247,16 @@ distance-comp = true # in the decoder configuration file. Requires hq-mode to be enabled. nfc = true +## nfc-ref-delay +# Specifies the reference delay value for ambisonic output. When channels is +# set to one of the ambi* formats, this option enables NFC-HOA output with the +# specified Reference Delay parameter. The specified value can then be shared +# with an appropriate NFC-HOA decoder to reproduce correct near-field effects. +# Keep in mind that despite being designed for higher-order ambisonics, this +# applies to first-order output all the same. When left unset, normal output +# is created with no near-field simulation. +nfc-ref-delay = + ## quad: # Decoder configuration file for Quadrophonic channel output. See # docs/ambdec.txt for a description of the file format. diff --git a/utils/alsoft-config/mainwindow.cpp b/utils/alsoft-config/mainwindow.cpp index caa2d5d4..e06c9e17 100644 --- a/utils/alsoft-config/mainwindow.cpp +++ b/utils/alsoft-config/mainwindow.cpp @@ -293,6 +293,9 @@ MainWindow::MainWindow(QWidget *parent) : mPeriodCountValidator = new QIntValidator(2, 16, this); ui->periodCountEdit->setValidator(mPeriodCountValidator); + mRefDelayValidator = new QDoubleValidator(0.0, 1000.0, 3, this); + ui->decoderNFRefDelayEdit->setValidator(mRefDelayValidator); + mSourceCountValidator = new QIntValidator(0, 4096, this); ui->srcCountLineEdit->setValidator(mSourceCountValidator); mEffectSlotValidator = new QIntValidator(0, 64, this); @@ -332,6 +335,8 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->decoderHQModeCheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->decoderDistCompCheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->decoderNFEffectsCheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); + connect(ui->decoderNFRefDelaySlider, SIGNAL(valueChanged(int)), this, SLOT(updateRefDelayEdit(int))); + connect(ui->decoderNFRefDelayEdit, SIGNAL(editingFinished()), this, SLOT(updateRefDelaySlider())); connect(ui->decoderQuadLineEdit, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton())); connect(ui->decoderQuadButton, SIGNAL(clicked()), this, SLOT(selectQuadDecoderFile())); connect(ui->decoder51LineEdit, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton())); @@ -425,6 +430,7 @@ MainWindow::~MainWindow() delete ui; delete mPeriodSizeValidator; delete mPeriodCountValidator; + delete mRefDelayValidator; delete mSourceCountValidator; delete mEffectSlotValidator; delete mSourceSendValidator; @@ -668,6 +674,13 @@ void MainWindow::loadConfig(const QString &fname) ui->decoderDistCompCheckBox->setChecked(distcomp); bool nfeffects = settings.value("decoder/nfc", true).toBool(); ui->decoderNFEffectsCheckBox->setChecked(nfeffects); + double refdelay = settings.value("decoder/nfc-ref-delay", 0.0).toDouble(); + ui->decoderNFRefDelayEdit->clear(); + if(refdelay > 0.0) + { + ui->decoderNFRefDelayEdit->insert(QString::number(refdelay)); + updateRefDelaySlider(); + } ui->decoderQuadLineEdit->setText(settings.value("decoder/quad").toString()); ui->decoder51LineEdit->setText(settings.value("decoder/surround51").toString()); @@ -900,6 +913,7 @@ void MainWindow::saveConfig(const QString &fname) const settings.setValue("decoder/nfc", ui->decoderNFEffectsCheckBox->isChecked() ? QString(/*"true"*/) : QString("false") ); + settings.setValue("decoder/nfc-ref-delay", ui->decoderNFRefDelayEdit->text()); settings.setValue("decoder/quad", ui->decoderQuadLineEdit->text()); settings.setValue("decoder/surround51", ui->decoder51LineEdit->text()); @@ -1115,6 +1129,26 @@ void MainWindow::updatePeriodCountSlider() } +void MainWindow::updateRefDelayEdit(int delay) +{ + ui->decoderNFRefDelayEdit->clear(); + if(delay > 0) + { + QString str = QString::asprintf("%0.03f", delay/1000.0); + ui->decoderNFRefDelayEdit->insert(str); + } + enableApplyButton(); +} + +void MainWindow::updateRefDelaySlider() +{ + double pos = ui->decoderNFRefDelayEdit->text().toDouble(); + if(pos > 1.0) pos = 1.0; + ui->decoderNFRefDelaySlider->setSliderPosition((int)(pos*1000.0)); + enableApplyButton(); +} + + void MainWindow::selectQuadDecoderFile() { selectDecoderFile(ui->decoderQuadLineEdit, "Select Quadrophonic Decoder");} void MainWindow::select51DecoderFile() diff --git a/utils/alsoft-config/mainwindow.h b/utils/alsoft-config/mainwindow.h index 8b763845..766c138c 100644 --- a/utils/alsoft-config/mainwindow.h +++ b/utils/alsoft-config/mainwindow.h @@ -35,6 +35,9 @@ private slots: void updatePeriodCountEdit(int size); void updatePeriodCountSlider(); + void updateRefDelayEdit(int delay); + void updateRefDelaySlider(); + void selectQuadDecoderFile(); void select51DecoderFile(); void select61DecoderFile(); @@ -63,6 +66,7 @@ private: QValidator *mPeriodSizeValidator; QValidator *mPeriodCountValidator; + QValidator *mRefDelayValidator; QValidator *mSourceCountValidator; QValidator *mEffectSlotValidator; QValidator *mSourceSendValidator; diff --git a/utils/alsoft-config/mainwindow.ui b/utils/alsoft-config/mainwindow.ui index a077e8a5..3a5a3190 100644 --- a/utils/alsoft-config/mainwindow.ui +++ b/utils/alsoft-config/mainwindow.ui @@ -621,7 +621,7 @@ configuration file. -10 - 120 + 160 551 161 @@ -818,6 +818,88 @@ Quality Mode to be enabled. true + + + + -10 + 110 + 551 + 21 + + + + The reference delay value for ambisonic output. When +Channels is set to one of the Ambisonic formats, this +option enables NFC-HOA output with the specified +Reference Delay parameter. The specified value can then +be shared with an appropriate NFC-HOA decoder to +reproduce correct near-field effects. Keep in mind that +despite being designed for higher-order ambisonics, this +applies to first-order output all the same. When left unset, +normal output is created with no near-field simulation. + + + + + 20 + 0 + 161 + 21 + + + + Near-Field Reference Delay: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 190 + 0 + 251 + 20 + + + + 1000 + + + Qt::Horizontal + + + + + + 450 + 0 + 51 + 21 + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + off + + + + + + 510 + 0 + 31 + 21 + + + + sec. + + +