20 #include <QFileDialog>
22 #include <QPushButton>
23 #include <QStandardPaths>
24 #include <QToolButton>
27 #include "ui_fluidsettingsdialog.h"
38 const QString FluidSettingsDialog::QSTR_PREFERENCES = QStringLiteral(
"FluidSynth");
39 const QString FluidSettingsDialog::QSTR_INSTRUMENTSDEFINITION = QStringLiteral(
"InstrumentsDefinition");
40 const QString FluidSettingsDialog::QSTR_DATADIR = QStringLiteral(
"soundfonts");
41 const QString FluidSettingsDialog::QSTR_DATADIR2 = QStringLiteral(
"sounds/sf2");
42 const QString FluidSettingsDialog::QSTR_SOUNDFONT = QStringLiteral(
"default.sf2");
43 const QString FluidSettingsDialog::QSTR_AUDIODRIVER = QStringLiteral(
"AudioDriver");
44 const QString FluidSettingsDialog::QSTR_PERIODSIZE = QStringLiteral(
"PeriodSize");
45 const QString FluidSettingsDialog::QSTR_PERIODS = QStringLiteral(
"Periods");
46 const QString FluidSettingsDialog::QSTR_SAMPLERATE = QStringLiteral(
"SampleRate");
47 const QString FluidSettingsDialog::QSTR_CHORUS = QStringLiteral(
"Chorus");
48 const QString FluidSettingsDialog::QSTR_REVERB = QStringLiteral(
"Reverb");
49 const QString FluidSettingsDialog::QSTR_GAIN = QStringLiteral(
"Gain");
50 const QString FluidSettingsDialog::QSTR_POLYPHONY = QStringLiteral(
"Polyphony");
51 const double FluidSettingsDialog::DEFAULT_SAMPLERATE = 48000.0;
52 const double FluidSettingsDialog::DEFAULT_GAIN = .5;
54 FluidSettingsDialog::FluidSettingsDialog(QWidget *parent) :
56 ui(new Ui::FluidSettingsDialog)
59 connect(ui->btnFile, &QToolButton::clicked,
this, &FluidSettingsDialog::showFileDialog);
60 connect(ui->buttonBox->button(QDialogButtonBox::RestoreDefaults), &QPushButton::clicked,
61 this, &FluidSettingsDialog::restoreDefaults);
62 ui->periodSize->setValidator(
new QIntValidator(64, 8192,
this));
63 ui->periods->setValidator(
new QIntValidator(2, 64,
this));
64 ui->sampleRate->setValidator(
new QDoubleValidator(22050.0, 96000.0, 1,
this));
65 ui->gain->setValidator(
new QDoubleValidator(0.0, 10.0, 2,
this));
66 ui->polyphony->setValidator(
new QIntValidator(16, 4096,
this));
68 SettingsFactory settings;
71 if (m_driver !=
nullptr) {
76 FluidSettingsDialog::~FluidSettingsDialog()
81 void FluidSettingsDialog::accept()
87 void FluidSettingsDialog::showEvent(QShowEvent *event)
93 QString FluidSettingsDialog::defaultAudioDriver()
const
95 const QString QSTR_DEFAULT_AUDIODRIVER =
96 #if defined(Q_OS_LINUX)
97 QLatin1Literal(
"pulseaudio");
98 #elif defined(Q_OS_WIN)
99 QLatin1Literal(
"dsound");
100 #elif defined(Q_OS_OSX)
101 QLatin1Literal(
"coreaudio");
103 QLatin1Literal(
"oss");
105 return QSTR_DEFAULT_AUDIODRIVER;
108 void FluidSettingsDialog::readSettings()
110 SettingsFactory settings;
111 QString fs_defSoundFont = QSTR_SOUNDFONT;
112 QDir dir(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QSTR_DATADIR, QStandardPaths::LocateDirectory));
114 dir = QDir(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QSTR_DATADIR2, QStandardPaths::LocateDirectory));
116 QFileInfo sf2(dir, QSTR_SOUNDFONT);
118 fs_defSoundFont = sf2.absoluteFilePath();
121 if (m_driver !=
nullptr) {
122 QVariant drivers = m_driver->property(
"audiodrivers");
123 if (drivers.isValid()) {
124 ui->audioDriver->clear();
125 ui->audioDriver->addItems(drivers.toStringList());
129 settings->beginGroup(QSTR_PREFERENCES);
130 ui->audioDriver->setCurrentText( settings->value(QSTR_AUDIODRIVER, defaultAudioDriver()).toString() );
131 ui->periodSize->setText( settings->value(QSTR_PERIODSIZE, DEFAULT_PERIODSIZE).toString() );
132 ui->periods->setText( settings->value(QSTR_PERIODS, DEFAULT_PERIODS).toString() );
133 ui->sampleRate->setText( settings->value(QSTR_SAMPLERATE, DEFAULT_SAMPLERATE).toString() );
134 ui->chorus->setChecked( settings->value(QSTR_CHORUS, DEFAULT_CHORUS).toInt() != 0 );
135 ui->reverb->setChecked( settings->value(QSTR_REVERB, DEFAULT_REVERB).toInt() != 0 );
136 ui->gain->setText( settings->value(QSTR_GAIN, DEFAULT_GAIN).toString() );
137 ui->polyphony->setText( settings->value(QSTR_POLYPHONY, DEFAULT_POLYPHONY).toString() );
138 ui->soundFont->setText( settings->value(QSTR_INSTRUMENTSDEFINITION, fs_defSoundFont).toString() );
139 settings->endGroup();
142 void FluidSettingsDialog::writeSettings()
144 SettingsFactory settings;
146 QString soundFont(QSTR_SOUNDFONT);
147 int periodSize(DEFAULT_PERIODSIZE);
148 int periods(DEFAULT_PERIODS);
149 double sampleRate(DEFAULT_SAMPLERATE);
150 int chorus(DEFAULT_CHORUS);
151 int reverb(DEFAULT_REVERB);
152 double gain(DEFAULT_GAIN);
153 int polyphony(DEFAULT_POLYPHONY);
155 audioDriver = ui->audioDriver->currentText();
156 if (audioDriver.isEmpty()) {
157 audioDriver = defaultAudioDriver();
159 soundFont = ui->soundFont->text();
160 periodSize = ui->periodSize->text().toInt();
161 periods = ui->periods->text().toInt();
162 sampleRate = ui->sampleRate->text().toDouble();
163 chorus = (ui->chorus->isChecked() ? 1 : 0);
164 reverb = (ui->reverb->isChecked() ? 1 : 0);
165 gain = ui->gain->text().toDouble();
166 polyphony = ui->polyphony->text().toInt();
168 settings->beginGroup(QSTR_PREFERENCES);
169 settings->setValue(QSTR_INSTRUMENTSDEFINITION, soundFont);
170 settings->setValue(QSTR_AUDIODRIVER, audioDriver);
171 settings->setValue(QSTR_PERIODSIZE, periodSize);
172 settings->setValue(QSTR_PERIODS, periods);
173 settings->setValue(QSTR_SAMPLERATE, sampleRate);
174 settings->setValue(QSTR_CHORUS, chorus);
175 settings->setValue(QSTR_REVERB, reverb);
176 settings->setValue(QSTR_GAIN, gain);
177 settings->setValue(QSTR_POLYPHONY, polyphony);
178 settings->endGroup();
182 void FluidSettingsDialog::restoreDefaults()
184 ui->audioDriver->setCurrentText( defaultAudioDriver() );
185 ui->periodSize->setText( QString::number( DEFAULT_PERIODSIZE ));
186 ui->periods->setText( QString::number( DEFAULT_PERIODS ));
187 ui->sampleRate->setText( QString::number( DEFAULT_SAMPLERATE ));
188 ui->chorus->setChecked( DEFAULT_CHORUS != 0 );
189 ui->reverb->setChecked( DEFAULT_REVERB != 0 );
190 ui->gain->setText( QString::number( DEFAULT_GAIN ) );
191 ui->polyphony->setText( QString::number( DEFAULT_POLYPHONY ));
192 ui->soundFont->setText( QSTR_SOUNDFONT );
195 void FluidSettingsDialog::showFileDialog()
197 QDir dir(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QSTR_DATADIR, QStandardPaths::LocateDirectory));
199 dir = QDir(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QSTR_DATADIR2, QStandardPaths::LocateDirectory));
201 QString fileName = QFileDialog::getOpenFileName(
this, tr(
"Select SoundFont"), dir.absolutePath(), tr(
"SoundFont Files (*.sf2)"));
202 if (!fileName.isEmpty()) {
203 ui->soundFont->setText(fileName);
210 ui->soundFont->setText(fileName);
BackendManager class declaration.
The BackendManager class manages lists of dynamic and static backends for applications based on drums...
MIDIOutput * outputBackendByName(const QString name)
outputBackendByName
virtual void initialize(QSettings *settings)=0
initialize
Declaration of the Fluidsynth configuration dialog.
SettingsFactory class declaration.