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 int SonivoxSettingsDialog::SYNTHLIB_WT = 1;
49const int SonivoxSettingsDialog::SYNTHLIB_FM = 2;
51SonivoxSettingsDialog::SonivoxSettingsDialog(QWidget *parent) :
53 ui(new Ui::SonivoxSettingsDialog)
56 ui->combo_Reverb->addItem(QStringLiteral(
"Large Hall"), 0);
57 ui->combo_Reverb->addItem(QStringLiteral(
"Hall"), 1);
58 ui->combo_Reverb->addItem(QStringLiteral(
"Chamber"), 2);
59 ui->combo_Reverb->addItem(QStringLiteral(
"Room"), 3);
60 ui->combo_Reverb->addItem(QStringLiteral(
"None"), -1);
61 ui->combo_Reverb->setCurrentIndex(4);
63 ui->combo_Chorus->addItem(QStringLiteral(
"Preset 1"), 0);
64 ui->combo_Chorus->addItem(QStringLiteral(
"Preset 2"), 1);
65 ui->combo_Chorus->addItem(QStringLiteral(
"Preset 3"), 2);
66 ui->combo_Chorus->addItem(QStringLiteral(
"Preset 4"), 3);
67 ui->combo_Chorus->addItem(QStringLiteral(
"None"), -1);
68 ui->combo_Chorus->setCurrentIndex(4);
69 connect(ui->btn_soundfont, &QToolButton::clicked,
this, &SonivoxSettingsDialog::showFileDialog);
70 connect(ui->buttonBox->button(QDialogButtonBox::RestoreDefaults), &QPushButton::pressed,
71 this, &SonivoxSettingsDialog::restoreDefaults);
78SonivoxSettingsDialog::~SonivoxSettingsDialog()
81 if (m_driver !=
nullptr) {
87void SonivoxSettingsDialog::accept()
91 if (m_driver !=
nullptr) {
93 QVariant varStatus = m_driver->property(
"status");
94 if (varStatus.isValid()) {
95 title = varStatus.toBool() ? tr(
"Sonivox Initialized") : tr(
"Sonivox Initialization Failed");
96 QVariant varDiag = m_driver->property(
"diagnostics");
97 if (varDiag.isValid()) {
98 QString text = varDiag.toStringList().join(QChar::LineFeed).trimmed();
99 if (varStatus.toBool()) {
100 if (!text.isEmpty()) {
101 QMessageBox::information(this, title, text);
104 QMessageBox::critical(this, title, text);
113void SonivoxSettingsDialog::showEvent(QShowEvent *event)
120void SonivoxSettingsDialog::readSettings()
123 SettingsFactory settings;
124 settings->beginGroup(QSTR_PREFERENCES);
125 int bufferTime = settings->value(QSTR_BUFFERTIME, 30).toInt();
126 int reverbType = settings->value(QSTR_REVERBTYPE, 1).toInt();
127 int reverbAmt = settings->value(QSTR_REVERBAMT, 25800).toInt();
128 int chorusType = settings->value(QSTR_CHORUSTYPE, -1).toInt();
129 int chorusAmt = settings->value(QSTR_CHORUSAMT, 0).toInt();
130 int synthLib = settings->value(QSTR_SYNTHLIB, SYNTHLIB_WT).toInt();
131 QString soundfont = settings->value(QSTR_SOUNDFONT, QString()).toString();
132 settings->endGroup();
134 if (qEnvironmentVariableIsSet(
"PULSE_LATENCY_MSEC")) {
135 bufferTime = qEnvironmentVariableIntValue(
"PULSE_LATENCY_MSEC");
138 ui->spnTime->setValue(bufferTime);
139 ui->soundfont_dls->setText(soundfont);
140 ui->dial_Reverb->setValue(reverbAmt);
141 ui->dial_Chorus->setValue(chorusAmt);
142 int reverbIndex = ui->combo_Reverb->findData(reverbType);
143 int chorusIndex = ui->combo_Chorus->findData(chorusType);
144 ui->combo_Reverb->setCurrentIndex(reverbIndex);
145 ui->combo_Chorus->setCurrentIndex(chorusIndex);
148 ui->rbWT->setChecked(
true);
151 ui->rbFM->setChecked(
true);
156 ui->btn_soundfont->setEnabled(synthLib == 1);
157 ui->soundfont_dls->setEnabled(synthLib == 1);
159 chkDriverProperties(settings.getQSettings());
162void SonivoxSettingsDialog::writeSettings()
165 SettingsFactory settings;
166 settings->beginGroup(QSTR_PREFERENCES);
167 settings->setValue(QSTR_BUFFERTIME, ui->spnTime->value());
168 settings->setValue(QSTR_REVERBTYPE, ui->combo_Reverb->currentData());
169 settings->setValue(QSTR_CHORUSTYPE, ui->combo_Chorus->currentData());
170 settings->setValue(QSTR_REVERBAMT, ui->dial_Reverb->value());
171 settings->setValue(QSTR_CHORUSAMT, ui->dial_Chorus->value());
172 settings->setValue(QSTR_SOUNDFONT, ui->soundfont_dls->text());
173 settings->setValue(QSTR_SYNTHLIB, ui->rbFM->isChecked() ? SYNTHLIB_FM : SYNTHLIB_WT);
174 settings->endGroup();
176 qputenv(
"PULSE_LATENCY_MSEC", QByteArray::number( ui->spnTime->value() ));
177 chkDriverProperties(settings.getQSettings());
180void SonivoxSettingsDialog::chkDriverProperties(
QSettings *settings)
183 if (m_driver !=
nullptr) {
186 m_driver->initialize(settings);
187 QVariant varVersion = m_driver->property(
"libversion");
188 if (varVersion.isValid()) {
189 ui->lblLibraryText->clear();
190 ui->lblLibraryText->setText(varVersion.toString());
192 QVariant varStatus = m_driver->property(
"status");
193 if (varStatus.isValid()) {
194 ui->lblStatusText->clear();
195 ui->lblStatusText->setText(varStatus.toBool() ? tr(
"Ready") : tr(
"Failed") );
196 ui->lblStatusIcon->setPixmap(varStatus.toBool() ? QPixmap(
":/checked.png") : QPixmap(
":/error.png") );
201void SonivoxSettingsDialog::restoreDefaults()
203 ui->spnTime->setValue(30);
204 ui->soundfont_dls->clear();
205 ui->combo_Reverb->setCurrentIndex(1);
206 ui->dial_Reverb->setValue(25800);
207 ui->combo_Chorus->setCurrentIndex(4);
208 ui->dial_Chorus->setValue(0);
211void SonivoxSettingsDialog::showFileDialog()
213 QDir dir(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QSTR_DATADIR, QStandardPaths::LocateDirectory));
215 dir = QDir(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QSTR_DATADIR2, QStandardPaths::LocateDirectory));
217 QString fileName = QFileDialog::getOpenFileName(
this,
218 tr(
"Select SoundFont"),
220 tr(
"SoundFont Files (*.dls *.sf2)"));
221 if (!fileName.isEmpty()) {
222 ui->soundfont_dls->setText(fileName);
226void SonivoxSettingsDialog::changeSoundFont(
const QString& fileName)
229 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.