19#include <QDialogButtonBox>
23#include <QStandardPaths>
27#include "ui_sonivoxsettingsdialog.h"
38const QString SonivoxSettingsDialog::QSTR_PREFERENCES = QStringLiteral(
"SonivoxEAS");
39const QString SonivoxSettingsDialog::QSTR_BUFFERTIME = QStringLiteral(
"BufferTime");
40const QString SonivoxSettingsDialog::QSTR_REVERBTYPE = QStringLiteral(
"ReverbType");
41const QString SonivoxSettingsDialog::QSTR_REVERBAMT = QStringLiteral(
"ReverbAmt");
42const QString SonivoxSettingsDialog::QSTR_CHORUSTYPE = QStringLiteral(
"ChorusType");
43const QString SonivoxSettingsDialog::QSTR_CHORUSAMT = QStringLiteral(
"ChorusAmt");
44const QString SonivoxSettingsDialog::QSTR_SOUNDFONT = QStringLiteral(
"InstrumentsDefinition");
45const QString SonivoxSettingsDialog::QSTR_DATADIR = QStringLiteral(
"soundfonts");
46const QString SonivoxSettingsDialog::QSTR_DATADIR2 = QStringLiteral(
"sounds/sf2");
47const QString SonivoxSettingsDialog::QSTR_SYNTHLIB = QStringLiteral(
"SynthLib");
48const QString SonivoxSettingsDialog::QSTR_GAIN = QStringLiteral(
"Gain");
49const int SonivoxSettingsDialog::SYNTHLIB_WT = 1;
50const int SonivoxSettingsDialog::SYNTHLIB_FM = 2;
52SonivoxSettingsDialog::SonivoxSettingsDialog(QWidget *parent) :
54 ui(new Ui::SonivoxSettingsDialog)
57 ui->combo_Reverb->addItem(QStringLiteral(
"Large Hall"), 0);
58 ui->combo_Reverb->addItem(QStringLiteral(
"Hall"), 1);
59 ui->combo_Reverb->addItem(QStringLiteral(
"Chamber"), 2);
60 ui->combo_Reverb->addItem(QStringLiteral(
"Room"), 3);
61 ui->combo_Reverb->addItem(QStringLiteral(
"None"), -1);
62 ui->combo_Reverb->setCurrentIndex(4);
64 ui->combo_Chorus->addItem(QStringLiteral(
"Preset 1"), 0);
65 ui->combo_Chorus->addItem(QStringLiteral(
"Preset 2"), 1);
66 ui->combo_Chorus->addItem(QStringLiteral(
"Preset 3"), 2);
67 ui->combo_Chorus->addItem(QStringLiteral(
"Preset 4"), 3);
68 ui->combo_Chorus->addItem(QStringLiteral(
"None"), -1);
69 ui->combo_Chorus->setCurrentIndex(4);
70 connect(ui->btn_soundfont, &QToolButton::clicked,
this, &SonivoxSettingsDialog::showFileDialog);
71 connect(ui->buttonBox->button(QDialogButtonBox::RestoreDefaults), &QPushButton::pressed,
72 this, &SonivoxSettingsDialog::restoreDefaults);
73 connect(ui->sliderGain,
74 &QSlider::valueChanged,
76 QOverload<int>::of(&QLabel::setNum));
83SonivoxSettingsDialog::~SonivoxSettingsDialog()
86 if (m_driver !=
nullptr) {
92void SonivoxSettingsDialog::accept()
96 if (m_driver !=
nullptr) {
98 QVariant varStatus = m_driver->property(
"status");
99 if (varStatus.isValid()) {
100 title = varStatus.toBool() ? tr(
"Sonivox Initialized") : tr(
"Sonivox Initialization Failed");
101 QVariant varDiag = m_driver->property(
"diagnostics");
102 if (varDiag.isValid()) {
103 QString text = varDiag.toStringList().join(QChar::LineFeed).trimmed();
104 if (varStatus.toBool()) {
105 if (!text.isEmpty()) {
106 QMessageBox::information(this, title, text);
109 QMessageBox::critical(this, title, text);
118void SonivoxSettingsDialog::showEvent(QShowEvent *event)
125void SonivoxSettingsDialog::readSettings()
128 SettingsFactory settings;
129 settings->beginGroup(QSTR_PREFERENCES);
130 int bufferTime = settings->value(QSTR_BUFFERTIME, 30).toInt();
131 int reverbType = settings->value(QSTR_REVERBTYPE, 1).toInt();
132 int reverbAmt = settings->value(QSTR_REVERBAMT, 25800).toInt();
133 int chorusType = settings->value(QSTR_CHORUSTYPE, -1).toInt();
134 int chorusAmt = settings->value(QSTR_CHORUSAMT, 0).toInt();
135 int synthLib = settings->value(QSTR_SYNTHLIB, SYNTHLIB_WT).toInt();
136 QString soundfont = settings->value(QSTR_SOUNDFONT, QString()).toString();
137 int gain = settings->value(QSTR_GAIN, m_driver ? m_driver->property(
"defaultGain") : 100).toInt();
138 settings->endGroup();
140 if (qEnvironmentVariableIsSet(
"PULSE_LATENCY_MSEC")) {
141 bufferTime = qEnvironmentVariableIntValue(
"PULSE_LATENCY_MSEC");
144 ui->spnTime->setValue(bufferTime);
145 ui->soundfont_dls->setText(soundfont);
146 ui->dial_Reverb->setValue(reverbAmt);
147 ui->dial_Chorus->setValue(chorusAmt);
148 int reverbIndex = ui->combo_Reverb->findData(reverbType);
149 int chorusIndex = ui->combo_Chorus->findData(chorusType);
150 ui->combo_Reverb->setCurrentIndex(reverbIndex);
151 ui->combo_Chorus->setCurrentIndex(chorusIndex);
154 ui->rbWT->setChecked(
true);
157 ui->rbFM->setChecked(
true);
162 ui->btn_soundfont->setEnabled(synthLib == 1);
163 ui->soundfont_dls->setEnabled(synthLib == 1);
164 ui->sliderGain->setValue(gain);
166 chkDriverProperties(settings.getQSettings());
169void SonivoxSettingsDialog::writeSettings()
172 SettingsFactory settings;
173 settings->beginGroup(QSTR_PREFERENCES);
174 settings->setValue(QSTR_BUFFERTIME, ui->spnTime->value());
175 settings->setValue(QSTR_REVERBTYPE, ui->combo_Reverb->currentData());
176 settings->setValue(QSTR_CHORUSTYPE, ui->combo_Chorus->currentData());
177 settings->setValue(QSTR_REVERBAMT, ui->dial_Reverb->value());
178 settings->setValue(QSTR_CHORUSAMT, ui->dial_Chorus->value());
179 settings->setValue(QSTR_SOUNDFONT, ui->soundfont_dls->text());
180 settings->setValue(QSTR_SYNTHLIB, ui->rbFM->isChecked() ? SYNTHLIB_FM : SYNTHLIB_WT);
181 settings->setValue(QSTR_GAIN, ui->sliderGain->value());
182 settings->endGroup();
184 qputenv(
"PULSE_LATENCY_MSEC", QByteArray::number( ui->spnTime->value() ));
185 chkDriverProperties(settings.getQSettings());
188void SonivoxSettingsDialog::chkDriverProperties(
QSettings *settings)
191 if (m_driver !=
nullptr) {
194 m_driver->initialize(settings);
195 QVariant varVersion = m_driver->property(
"libversion");
196 if (varVersion.isValid()) {
197 ui->lblLibraryText->clear();
198 ui->lblLibraryText->setText(varVersion.toString());
200 QVariant varStatus = m_driver->property(
"status");
201 if (varStatus.isValid()) {
202 ui->lblStatusText->clear();
203 ui->lblStatusText->setText(varStatus.toBool() ? tr(
"Ready") : tr(
"Failed") );
204 ui->lblStatusIcon->setPixmap(varStatus.toBool() ? QPixmap(
":/checked.png") : QPixmap(
":/error.png") );
209void SonivoxSettingsDialog::restoreDefaults()
211 ui->spnTime->setValue(30);
212 ui->soundfont_dls->clear();
213 ui->combo_Reverb->setCurrentIndex(1);
214 ui->dial_Reverb->setValue(25800);
215 ui->combo_Chorus->setCurrentIndex(4);
216 ui->dial_Chorus->setValue(0);
217 ui->sliderGain->setValue(m_driver ? m_driver->property(
"defaultGain").toInt() : 100);
218 ui->rbWT->setChecked(
true);
221void SonivoxSettingsDialog::showFileDialog()
223 QDir dir(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QSTR_DATADIR, QStandardPaths::LocateDirectory));
225 dir = QDir(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QSTR_DATADIR2, QStandardPaths::LocateDirectory));
227 QString fileName = QFileDialog::getOpenFileName(
this,
228 tr(
"Select SoundFont"),
230 tr(
"SoundFont Files (*.dls *.sf2)"));
231 if (!fileName.isEmpty()) {
232 ui->soundfont_dls->setText(fileName);
236void SonivoxSettingsDialog::changeSoundFont(
const QString& fileName)
239 ui->soundfont_dls->setText(fileName);
BackendManager class declaration.
The QSettings class provides persistent platform-independent application settings.
The BackendManager class manages lists of dynamic and static backends for applications based on drums...
MIDIOutput * outputBackendByName(const QString name)
outputBackendByName
BackendManager DRUMSTICK_RT_EXPORT * lastBackendManagerInstance()
lastBackendManagerInstance provides the latest BackendManager instance, or a new instance if needed.
SettingsFactory class declaration.
Definition of the Sonivox Synth configuration dialog.