20 #include <QFileDialog>
22 #include <QPushButton>
23 #include <QStandardPaths>
24 #include <QToolButton>
27 #include "ui_fluidsettingsdialog.h"
37 const QString FluidSettingsDialog::QSTR_PREFERENCES = QStringLiteral(
"FluidSynth");
38 const QString FluidSettingsDialog::QSTR_INSTRUMENTSDEFINITION = QStringLiteral(
"InstrumentsDefinition");
39 const QString FluidSettingsDialog::QSTR_DATADIR = QStringLiteral(
"soundfonts");
40 const QString FluidSettingsDialog::QSTR_DATADIR2 = QStringLiteral(
"sounds/sf2");
41 const QString FluidSettingsDialog::QSTR_SOUNDFONT = QStringLiteral(
"default.sf2");
42 const QString FluidSettingsDialog::QSTR_AUDIODRIVER = QStringLiteral(
"AudioDriver");
43 const QString FluidSettingsDialog::QSTR_PERIODSIZE = QStringLiteral(
"PeriodSize");
44 const QString FluidSettingsDialog::QSTR_PERIODS = QStringLiteral(
"Periods");
45 const QString FluidSettingsDialog::QSTR_SAMPLERATE = QStringLiteral(
"SampleRate");
46 const QString FluidSettingsDialog::QSTR_CHORUS = QStringLiteral(
"Chorus");
47 const QString FluidSettingsDialog::QSTR_REVERB = QStringLiteral(
"Reverb");
48 const QString FluidSettingsDialog::QSTR_GAIN = QStringLiteral(
"Gain");
49 const QString FluidSettingsDialog::QSTR_POLYPHONY = QStringLiteral(
"Polyphony");
50 const double FluidSettingsDialog::DEFAULT_SAMPLERATE = 48000.0;
51 const double FluidSettingsDialog::DEFAULT_GAIN = .5;
53 FluidSettingsDialog::FluidSettingsDialog(QWidget *parent) :
55 ui(new Ui::FluidSettingsDialog)
58 connect(ui->btnFile, &QToolButton::clicked,
this, &FluidSettingsDialog::showFileDialog);
59 connect(ui->buttonBox->button(QDialogButtonBox::RestoreDefaults), &QPushButton::clicked,
60 this, &FluidSettingsDialog::restoreDefaults);
61 ui->periodSize->setValidator(
new QIntValidator(64, 8192,
this));
62 ui->periods->setValidator(
new QIntValidator(2, 64,
this));
63 ui->sampleRate->setValidator(
new QDoubleValidator(22050.0, 96000.0, 1,
this));
64 ui->gain->setValidator(
new QDoubleValidator(0.0, 10.0, 2,
this));
65 ui->polyphony->setValidator(
new QIntValidator(16, 4096,
this));
68 FluidSettingsDialog::~FluidSettingsDialog()
73 void FluidSettingsDialog::accept()
79 void FluidSettingsDialog::showEvent(QShowEvent *event)
85 QString FluidSettingsDialog::defaultAudioDriver()
const
87 const QString QSTR_DEFAULT_AUDIODRIVER =
88 #if defined(Q_OS_LINUX)
89 QLatin1Literal(
"pulseaudio");
90 #elif defined(Q_OS_WIN)
91 QLatin1Literal(
"dsound");
92 #elif defined(Q_OS_OSX)
93 QLatin1Literal(
"coreaudio");
95 QLatin1Literal(
"oss");
97 return QSTR_DEFAULT_AUDIODRIVER;
100 void FluidSettingsDialog::readSettings()
102 SettingsFactory settings;
104 QString fs_defSoundFont = QSTR_SOUNDFONT;
105 #if defined(Q_OS_LINUX)
106 drivers <<
"alsa" <<
"pulseaudio" <<
"oss";
107 #elif defined(Q_OS_WIN)
109 #elif defined(Q_OS_OSX)
110 drivers <<
"coreaudio";
115 QDir dir(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QSTR_DATADIR, QStandardPaths::LocateDirectory));
117 dir = QDir(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QSTR_DATADIR2, QStandardPaths::LocateDirectory));
119 QFileInfo sf2(dir, QSTR_SOUNDFONT);
121 fs_defSoundFont = sf2.absoluteFilePath();
124 ui->audioDriver->addItems(drivers);
126 settings->beginGroup(QSTR_PREFERENCES);
127 ui->audioDriver->setCurrentText( settings->value(QSTR_AUDIODRIVER, defaultAudioDriver()).toString() );
128 ui->periodSize->setText( settings->value(QSTR_PERIODSIZE, DEFAULT_PERIODSIZE).toString() );
129 ui->periods->setText( settings->value(QSTR_PERIODS, DEFAULT_PERIODS).toString() );
130 ui->sampleRate->setText( settings->value(QSTR_SAMPLERATE, DEFAULT_SAMPLERATE).toString() );
131 ui->chorus->setChecked( settings->value(QSTR_CHORUS, DEFAULT_CHORUS).toInt() != 0 );
132 ui->reverb->setChecked( settings->value(QSTR_REVERB, DEFAULT_REVERB).toInt() != 0 );
133 ui->gain->setText( settings->value(QSTR_GAIN, DEFAULT_GAIN).toString() );
134 ui->polyphony->setText( settings->value(QSTR_POLYPHONY, DEFAULT_POLYPHONY).toString() );
135 ui->soundFont->setText( settings->value(QSTR_INSTRUMENTSDEFINITION, fs_defSoundFont).toString() );
136 settings->endGroup();
139 void FluidSettingsDialog::writeSettings()
141 SettingsFactory settings;
143 QString soundFont(QSTR_SOUNDFONT);
144 int periodSize(DEFAULT_PERIODSIZE);
145 int periods(DEFAULT_PERIODS);
146 double sampleRate(DEFAULT_SAMPLERATE);
147 int chorus(DEFAULT_CHORUS);
148 int reverb(DEFAULT_REVERB);
149 double gain(DEFAULT_GAIN);
150 int polyphony(DEFAULT_POLYPHONY);
152 audioDriver = ui->audioDriver->currentText();
153 if (audioDriver.isEmpty()) {
154 audioDriver = defaultAudioDriver();
156 soundFont = ui->soundFont->text();
157 periodSize = ui->periodSize->text().toInt();
158 periods = ui->periods->text().toInt();
159 sampleRate = ui->sampleRate->text().toDouble();
160 chorus = (ui->chorus->isChecked() ? 1 : 0);
161 reverb = (ui->reverb->isChecked() ? 1 : 0);
162 gain = ui->gain->text().toDouble();
163 polyphony = ui->polyphony->text().toInt();
165 settings->beginGroup(QSTR_PREFERENCES);
166 settings->setValue(QSTR_INSTRUMENTSDEFINITION, soundFont);
167 settings->setValue(QSTR_AUDIODRIVER, audioDriver);
168 settings->setValue(QSTR_PERIODSIZE, periodSize);
169 settings->setValue(QSTR_PERIODS, periods);
170 settings->setValue(QSTR_SAMPLERATE, sampleRate);
171 settings->setValue(QSTR_CHORUS, chorus);
172 settings->setValue(QSTR_REVERB, reverb);
173 settings->setValue(QSTR_GAIN, gain);
174 settings->setValue(QSTR_POLYPHONY, polyphony);
175 settings->endGroup();
179 void FluidSettingsDialog::restoreDefaults()
181 ui->audioDriver->setCurrentText( defaultAudioDriver() );
182 ui->periodSize->setText( QString::number( DEFAULT_PERIODSIZE ));
183 ui->periods->setText( QString::number( DEFAULT_PERIODS ));
184 ui->sampleRate->setText( QString::number( DEFAULT_SAMPLERATE ));
185 ui->chorus->setChecked( DEFAULT_CHORUS != 0 );
186 ui->reverb->setChecked( DEFAULT_REVERB != 0 );
187 ui->gain->setText( QString::number( DEFAULT_GAIN ) );
188 ui->polyphony->setText( QString::number( DEFAULT_POLYPHONY ));
189 ui->soundFont->setText( QSTR_SOUNDFONT );
192 void FluidSettingsDialog::showFileDialog()
194 QDir dir(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QSTR_DATADIR, QStandardPaths::LocateDirectory));
196 dir = QDir(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QSTR_DATADIR2, QStandardPaths::LocateDirectory));
198 QString fileName = QFileDialog::getOpenFileName(
this, tr(
"Select SoundFont"), dir.absolutePath(), tr(
"SoundFont Files (*.sf2)"));
199 if (!fileName.isEmpty()) {
200 ui->soundFont->setText(fileName);
207 ui->soundFont->setText(fileName);
Declaration of the Fluidsynth configuration dialog.
SettingsFactory class declaration.