Merge pull request 'Gain Structure Optimization Option added' (#4) from dev-gain-structure into master

Reviewed-on: #4
master
Alexander Diamadis 4 years ago
commit 071f522f6d

@ -254,28 +254,24 @@ void library::printAllAmps()
void library::on_listWidget_ampView_currentRowChanged(int currentRow) void library::on_listWidget_ampView_currentRowChanged(int currentRow)
{ {
if (initAmps){ if (currentRow>=0){
if (currentRow>=0){ ui->lineEdit_ampName->setText(QString::fromStdString(m_pCamp[currentRow].getName()));
ui->lineEdit_ampName->setText(QString::fromStdString(m_pCamp[currentRow].getName())); ui->comboBox_sensUnit->setCurrentIndex(m_pCamp[currentRow].getSensivityUnit());
ui->comboBox_sensUnit->setCurrentIndex(m_pCamp[currentRow].getSensivityUnit()); ui->doubleSpinBox_inputSensitivity->setValue(m_pCamp[currentRow].getSensitivity());
ui->doubleSpinBox_inputSensitivity->setValue(m_pCamp[currentRow].getSensitivity()); refreshModeOverview();
refreshModeOverview(); ui->listWidget_modeSelector->setCurrentRow(0);
ui->listWidget_modeSelector->setCurrentRow(0); ui->lineEdit_ampName->setEnabled(true);
ui->lineEdit_ampName->setEnabled(true); ui->doubleSpinBox_inputSensitivity->setEnabled(true);
ui->doubleSpinBox_inputSensitivity->setEnabled(true); ui->comboBox_sensUnit->setEnabled(true);
ui->comboBox_sensUnit->setEnabled(true); ui->lineEdit_modeName->setEnabled(true);
ui->lineEdit_modeName->setEnabled(true); ui->listWidget_modeSelector->setEnabled(true);
ui->listWidget_modeSelector->setEnabled(true); ui->spinBox_ratedImp->setEnabled(true);
ui->spinBox_ratedImp->setEnabled(true); ui->spinBox_ratedPower->setEnabled(true);
ui->spinBox_ratedPower->setEnabled(true);
}else }else
{ {
ui->lineEdit_ampName->setEnabled(false); ui->lineEdit_ampName->setEnabled(false);
ui->doubleSpinBox_inputSensitivity->setEnabled(false); ui->doubleSpinBox_inputSensitivity->setEnabled(false);
}
}else {
initAmps =true;
} }
} }
@ -436,29 +432,25 @@ void library::on_pushButton_addSpeaker_clicked()
void library::on_listWidget_speakerView_currentRowChanged(int currentRow) void library::on_listWidget_speakerView_currentRowChanged(int currentRow)
{ {
if (initSpeaker){ if (currentRow>=0){
if (currentRow>=0){ ui->lineEdit_speakerName->setText(QString::fromStdString(m_pSpeaker[currentRow].getName()));
ui->lineEdit_speakerName->setText(QString::fromStdString(m_pSpeaker[currentRow].getName())); ui->spinBox_speakerImp->setValue(m_pSpeaker[currentRow].getImpedance());
ui->spinBox_speakerImp->setValue(m_pSpeaker[currentRow].getImpedance()); ui->spinBox_speakerRMSPower->setValue(m_pSpeaker[currentRow].getRMSPower());
ui->spinBox_speakerRMSPower->setValue(m_pSpeaker[currentRow].getRMSPower()); ui->spinBox_speakerPeakPower->setValue(m_pSpeaker[currentRow].getPeakPower());
ui->spinBox_speakerPeakPower->setValue(m_pSpeaker[currentRow].getPeakPower()); ui->spinBox_speakerHPF->setValue(m_pSpeaker[currentRow].getHPF());
ui->spinBox_speakerHPF->setValue(m_pSpeaker[currentRow].getHPF());
ui->lineEdit_speakerName->setEnabled(true); ui->lineEdit_speakerName->setEnabled(true);
ui->spinBox_speakerImp->setEnabled(true); ui->spinBox_speakerImp->setEnabled(true);
ui->spinBox_speakerRMSPower->setEnabled(true); ui->spinBox_speakerRMSPower->setEnabled(true);
ui->spinBox_speakerPeakPower->setEnabled(true); ui->spinBox_speakerPeakPower->setEnabled(true);
ui->spinBox_speakerHPF->setEnabled(true); ui->spinBox_speakerHPF->setEnabled(true);
}else { }else {
ui->lineEdit_speakerName->setEnabled(false); ui->lineEdit_speakerName->setEnabled(false);
//ui->spinBox_speakerImp->setEnabled(false); //ui->spinBox_speakerImp->setEnabled(false);
//ui->spinBox_speakerRMSPower->setEnabled(false); //ui->spinBox_speakerRMSPower->setEnabled(false);
//ui->spinBox_speakerPeakPower->setEnabled(false); //ui->spinBox_speakerPeakPower->setEnabled(false);
//ui->spinBox_speakerHPF->setEnabled(false); //ui->spinBox_speakerHPF->setEnabled(false);
}
}else{
initSpeaker=true;
} }
} }
@ -579,17 +571,13 @@ void library::on_pushButton_Apply_clicked()
void library::on_listWidget_dacView_currentRowChanged(int currentRow) void library::on_listWidget_dacView_currentRowChanged(int currentRow)
{ {
if (initDacs){ if (currentRow>=0){
if (currentRow>=0){ ui->lineEdit_dacName->setText(QString::fromStdString(m_pDac[currentRow].name()));
ui->lineEdit_dacName->setText(QString::fromStdString(m_pDac[currentRow].name())); ui->spinBox_dacOutputLevel->setValue(m_pDac[currentRow].outputLevel());
ui->spinBox_dacOutputLevel->setValue(m_pDac[currentRow].outputLevel()); ui->lineEdit_dacName->setEnabled(true);
ui->lineEdit_dacName->setEnabled(true); ui->spinBox_dacOutputLevel->setEnabled(true);
ui->spinBox_dacOutputLevel->setEnabled(true);
}else{
ui->lineEdit_dacName->setEnabled(false);
}
}else{ }else{
initDacs=true; ui->lineEdit_dacName->setEnabled(false);
} }
} }

@ -68,6 +68,7 @@ void MainWindow::on_pushButton_requestLimiter_clicked()
return; return;
} }
qreal vMaxSpeakerInRMS=20*std::log10(qSqrt(speakerImp*speakerRMS)/0.7746); qreal vMaxSpeakerInRMS=20*std::log10(qSqrt(speakerImp*speakerRMS)/0.7746);
qreal vMaxSpeakerInPeak=20*std::log10(qSqrt(speakerImp*speakerPeak)/0.7746); qreal vMaxSpeakerInPeak=20*std::log10(qSqrt(speakerImp*speakerPeak)/0.7746);
@ -91,6 +92,7 @@ void MainWindow::on_pushButton_requestLimiter_clicked()
qreal releaseTimeRMS=attackTimeRMS*8; qreal releaseTimeRMS=attackTimeRMS*8;
qreal releaseTimePeak=attackTimeRMS; qreal releaseTimePeak=attackTimeRMS;
bool rmsRequired=true;
@ -98,6 +100,7 @@ void MainWindow::on_pushButton_requestLimiter_clicked()
QMessageBox msgBox(QMessageBox::Warning,"Amplifier can't deliver maximum RMS power","The maximum power level of the amplifier is below the maximum RMS power level of the speaker. To protect the speaker from a distorted signal the amplifier might deliver, a peak limiter is required with the amplifiers input sensitivty set as its threshold."); QMessageBox msgBox(QMessageBox::Warning,"Amplifier can't deliver maximum RMS power","The maximum power level of the amplifier is below the maximum RMS power level of the speaker. To protect the speaker from a distorted signal the amplifier might deliver, a peak limiter is required with the amplifiers input sensitivty set as its threshold.");
msgBox.exec(); msgBox.exec();
ui->label_thresholdRMS->setText(QString("not required")); ui->label_thresholdRMS->setText(QString("not required"));
rmsRequired=false;
ui->label_attackTimeRMS->setText(QString::number(attackTimeRMS,'f',2)+QString(" ms")); ui->label_attackTimeRMS->setText(QString::number(attackTimeRMS,'f',2)+QString(" ms"));
ui->label_releaseTimeRMS->setText(QString::number(releaseTimeRMS,'f',2)+QString(" ms")); ui->label_releaseTimeRMS->setText(QString::number(releaseTimeRMS,'f',2)+QString(" ms"));
ui->label_UMaxSpeakerInRMS->setText(QString::number(vMaxSpeakerInRMS,'f',2)+QString(" dBU (")+QString::number(qSqrt(speakerImp*speakerRMS),'f',2)+QString(" V)")); ui->label_UMaxSpeakerInRMS->setText(QString::number(vMaxSpeakerInRMS,'f',2)+QString(" dBU (")+QString::number(qSqrt(speakerImp*speakerRMS),'f',2)+QString(" V)"));
@ -140,7 +143,20 @@ void MainWindow::on_pushButton_requestLimiter_clicked()
ui->label_UMaxAmpInPeak->setText(QString::number(vMaxAmpInPeak,'f',2)+QString(" dBU (")+QString::number(qPow(10,vMaxAmpInPeak/20)*0.7746,'f',2)+QString(" V)")); ui->label_UMaxAmpInPeak->setText(QString::number(vMaxAmpInPeak,'f',2)+QString(" dBU (")+QString::number(qPow(10,vMaxAmpInPeak/20)*0.7746,'f',2)+QString(" V)"));
} }
if (ui->checkBox_optimizeGain->checkState()){
qreal diff=0;
qreal digitalHeadroom=ui->spinBox_digitalHeadroom->value();
while (thresholdPeak+diff+1<=-digitalHeadroom){
diff++;
}
ui->label_thresholdPeak->setText(QString::number(thresholdPeak+diff,'f',1)+QString(" dBFS"));
if (rmsRequired){
ui->label_thresholdRMS->setText(QString::number(thresholdRMS+diff,'f',1)+QString(" dBFS"));
}
ui->label_inputVolumeControl->setText(QString::number(-diff)+QString(" dB"));
}else {
ui->label_inputVolumeControl->setText(QString("0 dB"));
}
} }
@ -354,3 +370,13 @@ void MainWindow::on_actionOpen_Loudness_Analyzer_triggered()
analyzerWindow.exec(); analyzerWindow.exec();
} }
void MainWindow::on_checkBox_optimizeGain_stateChanged(int arg1)
{
if (ui->checkBox_optimizeGain->checkState()){
ui->spinBox_digitalHeadroom->setEnabled(true);
}else{
ui->spinBox_digitalHeadroom->setEnabled(false);
}
}

@ -42,6 +42,8 @@ private slots:
void on_actionOpen_Loudness_Analyzer_triggered(); void on_actionOpen_Loudness_Analyzer_triggered();
void on_checkBox_optimizeGain_stateChanged(int arg1);
private: private:
Ui::MainWindow *ui; Ui::MainWindow *ui;
cAmp* m_pCAmp; cAmp* m_pCAmp;

@ -51,6 +51,9 @@
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
<item> <item>
<layout class="QFormLayout" name="formLayout"> <layout class="QFormLayout" name="formLayout">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label"> <widget class="QLabel" name="label">
<property name="text"> <property name="text">
@ -226,6 +229,9 @@
<property name="sizeConstraint"> <property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum> <enum>QLayout::SetDefaultConstraint</enum>
</property> </property>
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label_4"> <widget class="QLabel" name="label_4">
<property name="text"> <property name="text">
@ -407,6 +413,9 @@
<layout class="QVBoxLayout" name="verticalLayout_4"> <layout class="QVBoxLayout" name="verticalLayout_4">
<item> <item>
<layout class="QFormLayout" name="formLayout_3"> <layout class="QFormLayout" name="formLayout_3">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label_8"> <widget class="QLabel" name="label_8">
<property name="text"> <property name="text">
@ -427,16 +436,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="0">
<widget class="QLabel" name="label_22">
<property name="text">
<string>Load DAC from library</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QComboBox" name="comboBox_dacPreset"/>
</item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_23"> <widget class="QLabel" name="label_23">
<property name="text"> <property name="text">
@ -444,6 +443,23 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0">
<widget class="QLabel" name="label_25">
<property name="text">
<string>Output Gain Structure</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="checkBox_optimizeGain">
<property name="text">
<string>Optimize</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="1"> <item row="4" column="1">
<spacer name="verticalSpacer_5"> <spacer name="verticalSpacer_5">
<property name="orientation"> <property name="orientation">
@ -460,6 +476,16 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="5" column="0">
<widget class="QLabel" name="label_22">
<property name="text">
<string>Load DAC from library</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QComboBox" name="comboBox_dacPreset"/>
</item>
<item row="6" column="0" colspan="2"> <item row="6" column="0" colspan="2">
<widget class="QPushButton" name="pushButton_loadDac"> <widget class="QPushButton" name="pushButton_loadDac">
<property name="font"> <property name="font">
@ -472,31 +498,34 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1">
<spacer name="verticalSpacer_7">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="3" column="1"> <item row="3" column="1">
<spacer name="verticalSpacer_8"> <widget class="QSpinBox" name="spinBox_digitalHeadroom">
<property name="orientation"> <property name="enabled">
<enum>Qt::Vertical</enum> <bool>true</bool>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="suffix">
<size> <string> dB</string>
<width>20</width>
<height>40</height>
</size>
</property> </property>
</spacer> <property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>30</number>
</property>
<property name="value">
<number>5</number>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_26">
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="text">
<string>Digital Headroom</string>
</property>
</widget>
</item> </item>
</layout> </layout>
</item> </item>
@ -538,6 +567,12 @@
<layout class="QVBoxLayout" name="verticalLayout_5"> <layout class="QVBoxLayout" name="verticalLayout_5">
<item> <item>
<layout class="QFormLayout" name="formLayout_4"> <layout class="QFormLayout" name="formLayout_4">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="formAlignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
<item row="4" column="0"> <item row="4" column="0">
<widget class="QLabel" name="label_9"> <widget class="QLabel" name="label_9">
<property name="text"> <property name="text">
@ -568,9 +603,15 @@
</item> </item>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label_11"> <widget class="QLabel" name="label_11">
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="text"> <property name="text">
<string>Threshold:</string> <string>Threshold:</string>
</property> </property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="0" column="1">
@ -655,6 +696,9 @@
<layout class="QVBoxLayout" name="verticalLayout_6"> <layout class="QVBoxLayout" name="verticalLayout_6">
<item> <item>
<layout class="QFormLayout" name="formLayout_5"> <layout class="QFormLayout" name="formLayout_5">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="4" column="0"> <item row="4" column="0">
<widget class="QLabel" name="label_13"> <widget class="QLabel" name="label_13">
<property name="text"> <property name="text">
@ -759,6 +803,41 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item>
<widget class="QGroupBox" name="groupBox_6">
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="title">
<string>Amplifier</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
<layout class="QFormLayout" name="formLayout_6">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_27">
<property name="text">
<string>Input Volume Control:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_inputVolumeControl">
<property name="text">
<string>0 dB</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout> </layout>
</item> </item>
</layout> </layout>

Loading…
Cancel
Save