20 #include <QFileDialog>
22 #include <QPushButton>
23 #include <QStandardPaths>
24 #include <QToolButton>
25 #include <QMessageBox>
28 #include "ui_fluidsettingsdialog.h"
39 const QString FluidSettingsDialog::QSTR_PREFERENCES = QStringLiteral(
"FluidSynth");
40 const QString FluidSettingsDialog::QSTR_INSTRUMENTSDEFINITION = QStringLiteral(
"InstrumentsDefinition");
41 const QString FluidSettingsDialog::QSTR_DATADIR = QStringLiteral(
"soundfonts");
42 const QString FluidSettingsDialog::QSTR_DATADIR2 = QStringLiteral(
"sounds/sf2");
43 const QString FluidSettingsDialog::QSTR_SOUNDFONT = QStringLiteral(
"default.sf2");
44 const QString FluidSettingsDialog::QSTR_AUDIODRIVER = QStringLiteral(
"AudioDriver");
45 const QString FluidSettingsDialog::QSTR_PERIODSIZE = QStringLiteral(
"PeriodSize");
46 const QString FluidSettingsDialog::QSTR_PERIODS = QStringLiteral(
"Periods");
47 const QString FluidSettingsDialog::QSTR_SAMPLERATE = QStringLiteral(
"SampleRate");
48 const QString FluidSettingsDialog::QSTR_CHORUS = QStringLiteral(
"Chorus");
49 const QString FluidSettingsDialog::QSTR_REVERB = QStringLiteral(
"Reverb");
50 const QString FluidSettingsDialog::QSTR_GAIN = QStringLiteral(
"Gain");
51 const QString FluidSettingsDialog::QSTR_POLYPHONY = QStringLiteral(
"Polyphony");
52 const double FluidSettingsDialog::DEFAULT_SAMPLERATE = 48000.0;
53 const double FluidSettingsDialog::DEFAULT_GAIN = .5;
55 FluidSettingsDialog::FluidSettingsDialog(QWidget *parent) :
57 ui(new Ui::FluidSettingsDialog)
60 connect(ui->btnFile, &QToolButton::clicked,
this, &FluidSettingsDialog::showFileDialog);
61 connect(ui->buttonBox->button(QDialogButtonBox::RestoreDefaults), &QPushButton::clicked,
62 this, &FluidSettingsDialog::restoreDefaults);
63 ui->periodSize->setValidator(
new QIntValidator(64, 8192,
this));
64 ui->periods->setValidator(
new QIntValidator(2, 64,
this));
65 ui->sampleRate->setValidator(
new QDoubleValidator(22050.0, 96000.0, 1,
this));
66 ui->gain->setValidator(
new QDoubleValidator(0.0, 10.0, 2,
this));
67 ui->polyphony->setValidator(
new QIntValidator(16, 4096,
this));
71 if (m_driver !=
nullptr) {
72 QVariant v = m_driver->property(
"audiodrivers");
74 ui->audioDriver->clear();
75 ui->audioDriver->addItems(v.toStringList());
80 FluidSettingsDialog::~FluidSettingsDialog()
83 if (m_driver !=
nullptr) {
89 void FluidSettingsDialog::accept()
92 if (m_driver !=
nullptr) {
94 QVariant varStatus = m_driver->property(
"status");
95 if (varStatus.isValid()) {
96 title = varStatus.toBool() ? tr(
"FluidSynth Initialized") : tr(
"FluidSynth Initialization Failed");
97 QVariant varDiag = m_driver->property(
"diagnostics");
98 if (varDiag.isValid()) {
99 QString text = varDiag.toStringList().join(QChar::LineFeed).trimmed();
100 if (varStatus.toBool()) {
101 if (!text.isEmpty()) {
102 QMessageBox::information(
this, title, text);
105 QMessageBox::critical(
this, title, text);
114 void FluidSettingsDialog::showEvent(QShowEvent *event)
120 QString FluidSettingsDialog::defaultAudioDriver()
const
122 const QString QSTR_DEFAULT_AUDIODRIVER =
123 #if defined(Q_OS_LINUX)
124 QLatin1String(
"pulseaudio");
125 #elif defined(Q_OS_WIN)
126 QLatin1String(
"dsound");
127 #elif defined(Q_OS_OSX)
128 QLatin1String(
"coreaudio");
130 QLatin1String(
"oss");
132 return QSTR_DEFAULT_AUDIODRIVER;
135 void FluidSettingsDialog::chkDriverProperties(
QSettings *settings)
137 if (m_driver !=
nullptr) {
140 m_driver->initialize(settings);
141 m_driver->open(conn);
143 QVariant drivers = m_driver->property(
"audiodrivers");
144 if (drivers.isValid()) {
145 auto text = ui->audioDriver->currentText();
146 ui->audioDriver->clear();
147 ui->audioDriver->addItems(drivers.toStringList());
148 ui->audioDriver->setCurrentText(text);
150 QVariant varVersion = m_driver->property(
"libversion");
151 if (varVersion.isValid()) {
152 ui->lblVersion->clear();
153 ui->lblVersion->setText(varVersion.toString());
155 QVariant varStatus = m_driver->property(
"status");
156 if (varStatus.isValid()) {
157 ui->lblStatus->clear();
158 ui->lblStatus->setText(varStatus.toBool() ? tr(
"Ready") : tr(
"Failed") );
159 ui->lblStatusIcon->setPixmap(varStatus.toBool() ? QPixmap(
":/checked.png") : QPixmap(
":/error.png") );
164 void FluidSettingsDialog::readSettings()
166 SettingsFactory settings;
167 QString fs_defSoundFont = QSTR_SOUNDFONT;
168 QDir dir(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QSTR_DATADIR, QStandardPaths::LocateDirectory));
170 dir = QDir(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QSTR_DATADIR2, QStandardPaths::LocateDirectory));
172 QFileInfo sf2(dir, QSTR_SOUNDFONT);
174 fs_defSoundFont = sf2.absoluteFilePath();
177 settings->beginGroup(QSTR_PREFERENCES);
178 ui->audioDriver->setCurrentText( settings->value(QSTR_AUDIODRIVER, defaultAudioDriver()).toString() );
179 ui->periodSize->setText( settings->value(QSTR_PERIODSIZE, DEFAULT_PERIODSIZE).toString() );
180 ui->periods->setText( settings->value(QSTR_PERIODS, DEFAULT_PERIODS).toString() );
181 ui->sampleRate->setText( settings->value(QSTR_SAMPLERATE, DEFAULT_SAMPLERATE).toString() );
182 ui->chorus->setChecked( settings->value(QSTR_CHORUS, DEFAULT_CHORUS).toInt() != 0 );
183 ui->reverb->setChecked( settings->value(QSTR_REVERB, DEFAULT_REVERB).toInt() != 0 );
184 ui->gain->setText( settings->value(QSTR_GAIN, DEFAULT_GAIN).toString() );
185 ui->polyphony->setText( settings->value(QSTR_POLYPHONY, DEFAULT_POLYPHONY).toString() );
186 ui->soundFont->setText( settings->value(QSTR_INSTRUMENTSDEFINITION, fs_defSoundFont).toString() );
187 settings->endGroup();
189 chkDriverProperties(settings.getQSettings());
192 void FluidSettingsDialog::writeSettings()
194 SettingsFactory settings;
196 QString soundFont(QSTR_SOUNDFONT);
197 int periodSize(DEFAULT_PERIODSIZE);
198 int periods(DEFAULT_PERIODS);
199 double sampleRate(DEFAULT_SAMPLERATE);
200 int chorus(DEFAULT_CHORUS);
201 int reverb(DEFAULT_REVERB);
202 double gain(DEFAULT_GAIN);
203 int polyphony(DEFAULT_POLYPHONY);
205 audioDriver = ui->audioDriver->currentText();
206 if (audioDriver.isEmpty()) {
207 audioDriver = defaultAudioDriver();
209 soundFont = ui->soundFont->text();
210 periodSize = ui->periodSize->text().toInt();
211 periods = ui->periods->text().toInt();
212 sampleRate = ui->sampleRate->text().toDouble();
213 chorus = (ui->chorus->isChecked() ? 1 : 0);
214 reverb = (ui->reverb->isChecked() ? 1 : 0);
215 gain = ui->gain->text().toDouble();
216 polyphony = ui->polyphony->text().toInt();
218 settings->beginGroup(QSTR_PREFERENCES);
219 settings->setValue(QSTR_INSTRUMENTSDEFINITION, soundFont);
220 settings->setValue(QSTR_AUDIODRIVER, audioDriver);
221 settings->setValue(QSTR_PERIODSIZE, periodSize);
222 settings->setValue(QSTR_PERIODS, periods);
223 settings->setValue(QSTR_SAMPLERATE, sampleRate);
224 settings->setValue(QSTR_CHORUS, chorus);
225 settings->setValue(QSTR_REVERB, reverb);
226 settings->setValue(QSTR_GAIN, gain);
227 settings->setValue(QSTR_POLYPHONY, polyphony);
228 settings->endGroup();
231 chkDriverProperties(settings.getQSettings());
234 void FluidSettingsDialog::restoreDefaults()
236 ui->audioDriver->setCurrentText( defaultAudioDriver() );
237 ui->periodSize->setText( QString::number( DEFAULT_PERIODSIZE ));
238 ui->periods->setText( QString::number( DEFAULT_PERIODS ));
239 ui->sampleRate->setText( QString::number( DEFAULT_SAMPLERATE ));
240 ui->chorus->setChecked( DEFAULT_CHORUS != 0 );
241 ui->reverb->setChecked( DEFAULT_REVERB != 0 );
242 ui->gain->setText( QString::number( DEFAULT_GAIN ) );
243 ui->polyphony->setText( QString::number( DEFAULT_POLYPHONY ));
244 ui->soundFont->setText( QSTR_SOUNDFONT );
247 void FluidSettingsDialog::showFileDialog()
249 QDir dir(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QSTR_DATADIR, QStandardPaths::LocateDirectory));
251 dir = QDir(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QSTR_DATADIR2, QStandardPaths::LocateDirectory));
253 QString fileName = QFileDialog::getOpenFileName(
this, tr(
"Select SoundFont"), dir.absolutePath(), tr(
"SoundFont Files (*.sf2)"));
254 if (!fileName.isEmpty()) {
255 ui->soundFont->setText(fileName);
262 ui->soundFont->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
virtual void close()=0
close the MIDI port
Declaration of the Fluidsynth configuration dialog.
QPair< QString, QVariant > MIDIConnection
MIDIConnection represents a connection identifier.
SettingsFactory class declaration.