diff --git a/samples/TeacFD-55GFR_5.25_1.2MB_motor_loop_48000_16_1_PCM.wav b/samples/TeacFD-55GFR_5.25_1.2MB_motor_loop_48000_16_1_PCM.wav
new file mode 100644
index 000000000..bd8a4cce5
Binary files /dev/null and b/samples/TeacFD-55GFR_5.25_1.2MB_motor_loop_48000_16_1_PCM.wav differ
diff --git a/samples/TeacFD-55GFR_5.25_1.2MB_motor_start_48000_16_1_PCM.wav b/samples/TeacFD-55GFR_5.25_1.2MB_motor_start_48000_16_1_PCM.wav
new file mode 100644
index 000000000..be3bddd70
Binary files /dev/null and b/samples/TeacFD-55GFR_5.25_1.2MB_motor_start_48000_16_1_PCM.wav differ
diff --git a/samples/TeacFD-55GFR_5.25_1.2MB_motor_stop_48000_16_1_PCM.wav b/samples/TeacFD-55GFR_5.25_1.2MB_motor_stop_48000_16_1_PCM.wav
new file mode 100644
index 000000000..6c6c4988c
Binary files /dev/null and b/samples/TeacFD-55GFR_5.25_1.2MB_motor_stop_48000_16_1_PCM.wav differ
diff --git a/samples/TeacFD-55GFR_5.25_1.2MB_track_step_48000_16_1_PCM.wav b/samples/TeacFD-55GFR_5.25_1.2MB_track_step_48000_16_1_PCM.wav
new file mode 100644
index 000000000..cc26c4809
Binary files /dev/null and b/samples/TeacFD-55GFR_5.25_1.2MB_track_step_48000_16_1_PCM.wav differ
diff --git a/samples/TeacFD_55GFR_5.25_1.2MB_seekupdown_80_tracks1100ms_48000_16_1_PCM.wav b/samples/TeacFD_55GFR_5.25_1.2MB_seekupdown_80_tracks1100ms_48000_16_1_PCM.wav
new file mode 100644
index 000000000..0b6be1124
Binary files /dev/null and b/samples/TeacFD_55GFR_5.25_1.2MB_seekupdown_80_tracks1100ms_48000_16_1_PCM.wav differ
diff --git a/src/config.c b/src/config.c
index 87d8082bf..705f4ffc9 100644
--- a/src/config.c
+++ b/src/config.c
@@ -1437,6 +1437,15 @@ load_floppy_and_cdrom_drives(void)
sprintf(temp, "fdd_%02i_check_bpb", c + 1);
ini_section_delete_var(cat, temp);
}
+ sprintf(temp, "fdd_%02i_audio", c + 1);
+ int def_prof = FDD_AUDIO_PROFILE_NONE;
+ int prof = ini_section_get_int(cat, temp, def_prof);
+ if (prof < 0 || prof >= FDD_AUDIO_PROFILE_MAX)
+ prof = def_prof;
+ fdd_set_audio_profile(c, prof);
+ if (prof == def_prof)
+ ini_section_delete_var(cat, temp);
+
for (int i = 0; i < MAX_PREV_IMAGES; i++) {
fdd_image_history[c][i] = (char *) calloc((MAX_IMAGE_PATH_LEN + 1) << 1, sizeof(char));
sprintf(temp, "fdd_%02i_image_history_%02i", c + 1, i + 1);
@@ -3422,6 +3431,14 @@ save_floppy_and_cdrom_drives(void)
else
save_image_file(cat, temp, fdd_image_history[c][i]);
}
+
+ sprintf(temp, "fdd_%02i_audio", c + 1);
+ int def_prof = FDD_AUDIO_PROFILE_NONE;
+ int prof = fdd_get_audio_profile(c);
+ if (prof == def_prof)
+ ini_section_delete_var(cat, temp);
+ else
+ ini_section_set_int(cat, temp, prof);
}
for (c = 0; c < CDROM_NUM; c++) {
diff --git a/src/floppy/fdd.c b/src/floppy/fdd.c
index 692b11ba6..928e4290a 100644
--- a/src/floppy/fdd.c
+++ b/src/floppy/fdd.c
@@ -89,6 +89,7 @@ pc_timer_t fdd_seek_timer[FDD_NUM];
static int fdd_notfound = 0;
static int driveloaders[FDD_NUM];
+static int fdd_audio_profile[FDD_NUM] = { 0 };
int writeprot[FDD_NUM];
int fwriteprot[FDD_NUM];
@@ -223,6 +224,24 @@ fdd_log(const char *fmt, ...)
# define fdd_log(fmt, ...)
#endif
+void
+fdd_set_audio_profile(int drive, int profile)
+{
+ if (drive < 0 || drive >= FDD_NUM)
+ return;
+ if (profile < 0 || profile >= FDD_AUDIO_PROFILE_MAX)
+ profile = 0;
+ fdd_audio_profile[drive] = profile;
+}
+
+int
+fdd_get_audio_profile(int drive)
+{
+ if (drive < 0 || drive >= FDD_NUM)
+ return 0;
+ return fdd_audio_profile[drive];
+}
+
char *
fdd_getname(int type)
{
diff --git a/src/floppy/fdd_audio.c b/src/floppy/fdd_audio.c
index d32d5742b..ed378bda8 100644
--- a/src/floppy/fdd_audio.c
+++ b/src/floppy/fdd_audio.c
@@ -62,37 +62,51 @@ typedef struct {
audio_sample_t multi_track_seek;
} drive_audio_samples_t;
+/* 5.25" Teac FD-55GFR sample set */
+static drive_audio_samples_t samples_teac = {
+ .spindlemotor_start = {
+ .filename = "TeacFD-55GFR_5.25_1.2MB_motor_start_48000_16_1_PCM.wav",
+ .buffer = NULL, .samples = 0, .volume = 3.0f
+ },
+ .spindlemotor_loop = {
+ .filename = "TeacFD-55GFR_5.25_1.2MB_motor_loop_48000_16_1_PCM.wav",
+ .buffer = NULL, .samples = 0, .volume = 3.0f
+ },
+ .spindlemotor_stop = {
+ .filename = "TeacFD-55GFR_5.25_1.2MB_motor_stop_48000_16_1_PCM.wav",
+ .buffer = NULL, .samples = 0, .volume = 3.0f
+ },
+ .single_track_step = {
+ .filename = "TeacFD-55GFR_5.25_1.2MB_track_step_48000_16_1_PCM.wav",
+ .buffer = NULL, .samples = 0, .volume = 2.0f
+ },
+ .multi_track_seek = {
+ .filename = "TeacFD-55GFR_5.25_1.2MB_seekupdown_80_tracks1100ms_48000_16_1_PCM.wav",
+ .buffer = NULL, .samples = 0, .volume = 2.0f
+ }
+};
+
/* 3.5" drive audio samples (Mitsumi) */
static drive_audio_samples_t samples_35 = {
.spindlemotor_start = {
.filename = "mitsumi_spindle_motor_start_48000_16_1_PCM.wav",
- .buffer = NULL,
- .samples = 0,
- .volume = 0.2f
+ .buffer = NULL, .samples = 0, .volume = 0.2f
},
.spindlemotor_loop = {
.filename = "mitsumi_spindle_motor_loop_48000_16_1_PCM.wav",
- .buffer = NULL,
- .samples = 0,
- .volume = 0.2f
+ .buffer = NULL, .samples = 0, .volume = 0.2f
},
.spindlemotor_stop = {
.filename = "mitsumi_spindle_motor_stop_48000_16_1_PCM.wav",
- .buffer = NULL,
- .samples = 0,
- .volume = 0.2f
+ .buffer = NULL, .samples = 0, .volume = 0.2f
},
.single_track_step = {
.filename = "mitsumi_track_step_48000_16_1_PCM.wav",
- .buffer = NULL,
- .samples = 0,
- .volume = 1.0f
+ .buffer = NULL, .samples = 0, .volume = 1.0f
},
.multi_track_seek = {
.filename = "mitsumi_seek_80_tracks_495ms_48000_16_1_PCM.wav",
- .buffer = NULL,
- .samples = 0,
- .volume = 1.0f
+ .buffer = NULL, .samples = 0, .volume = 1.0f
}
};
@@ -100,33 +114,23 @@ static drive_audio_samples_t samples_35 = {
static drive_audio_samples_t samples_525 = {
.spindlemotor_start = {
.filename = "Panasonic_JU-475-5_5.25_1.2MB_motor_start_48000_16_1_PCM.wav",
- .buffer = NULL,
- .samples = 0,
- .volume = 1.0f
+ .buffer = NULL, .samples = 0, .volume = 1.0f
},
.spindlemotor_loop = {
.filename = "Panasonic_JU-475-5_5.25_1.2MB_motor_loop_48000_16_1_PCM.wav",
- .buffer = NULL,
- .samples = 0,
- .volume = 1.0f
+ .buffer = NULL, .samples = 0, .volume = 1.0f
},
.spindlemotor_stop = {
.filename = "Panasonic_JU-475-5_5.25_1.2MB_motor_stop_48000_16_1_PCM.wav",
- .buffer = NULL,
- .samples = 0,
- .volume = 1.0f
+ .buffer = NULL, .samples = 0, .volume = 1.0f
},
.single_track_step = {
.filename = "Panasonic_JU-475-5_5.25_1.2MB_track_step_48000_16_1_PCM.wav",
- .buffer = NULL,
- .samples = 0,
- .volume = 2.0f
+ .buffer = NULL, .samples = 0, .volume = 2.0f
},
.multi_track_seek = {
.filename = "Panasonic_JU-475-5_5.25_1.2MB_seekup_40_tracks_285ms_5ms_per_track_48000_16_1_PCM.wav",
- .buffer = NULL,
- .samples = 0,
- .volume = 2.0f
+ .buffer = NULL, .samples = 0, .volume = 2.0f
}
};
@@ -145,18 +149,24 @@ static multi_seek_state_t multi_seek_state[FDD_NUM] = {};
extern uint64_t motoron[FDD_NUM];
extern char exe_path[2048]; /* path (dir) of executable */
+extern int fdd_get_audio_profile(int drive); /* from fdd.h */
+
/* Forward declaration */
static int16_t *load_wav(const char *filename, int *sample_count);
-/* Helper function to get drive-specific audio samples */
+
static drive_audio_samples_t *
get_drive_samples(int drive)
{
- /* Check if drive is 5.25" */
- if (fdd_is_525(drive)) {
- return &samples_525;
- } else {
- return &samples_35;
+ switch (fdd_get_audio_profile(drive)) {
+ case FDD_AUDIO_PROFILE_PANASONIC:
+ return &samples_525;
+ case FDD_AUDIO_PROFILE_TEAC:
+ return &samples_teac;
+ case FDD_AUDIO_PROFILE_MITSUMI:
+ return &samples_35;
+ default:
+ return NULL;
}
}
@@ -180,11 +190,13 @@ load_wav(const char *filename, int *sample_count)
}
}
- path_append_filename(full_path, exe_path, "samples");
+ path_append_filename(full_path, exe_path, "roms");
+ path_append_filename(full_path, full_path, "samples");
+ path_append_filename(full_path, full_path, "fdd");
path_append_filename(full_path, full_path, filename);
-
f = fopen(full_path, "rb");
if (!f) {
+ path_append_filename(full_path, full_path, "samples");
path_append_filename(full_path, exe_path, filename);
f = fopen(full_path, "rb");
if (!f)
@@ -271,6 +283,12 @@ fdd_audio_init(void)
samples_525.single_track_step.buffer = load_wav(samples_525.single_track_step.filename, &samples_525.single_track_step.samples);
samples_525.multi_track_seek.buffer = load_wav(samples_525.multi_track_seek.filename, &samples_525.multi_track_seek.samples);
+ samples_teac.spindlemotor_start.buffer = load_wav(samples_teac.spindlemotor_start.filename, &samples_teac.spindlemotor_start.samples);
+ samples_teac.spindlemotor_loop.buffer = load_wav(samples_teac.spindlemotor_loop.filename, &samples_teac.spindlemotor_loop.samples);
+ samples_teac.spindlemotor_stop.buffer = load_wav(samples_teac.spindlemotor_stop.filename, &samples_teac.spindlemotor_stop.samples);
+ samples_teac.single_track_step.buffer = load_wav(samples_teac.single_track_step.filename, &samples_teac.single_track_step.samples);
+ samples_teac.multi_track_seek.buffer = load_wav(samples_teac.multi_track_seek.filename, &samples_teac.multi_track_seek.samples);
+
/* Initialize audio state for all drives */
for (i = 0; i < FDD_NUM; i++) {
spindlemotor_pos[i] = 0;
@@ -351,6 +369,32 @@ fdd_audio_close(void)
samples_525.multi_track_seek.samples = 0;
}
+ if (samples_teac.spindlemotor_start.buffer) {
+ free(samples_teac.spindlemotor_start.buffer);
+ samples_teac.spindlemotor_start.buffer = NULL;
+ samples_teac.spindlemotor_start.samples = 0;
+ }
+ if (samples_teac.spindlemotor_loop.buffer) {
+ free(samples_teac.spindlemotor_loop.buffer);
+ samples_teac.spindlemotor_loop.buffer = NULL;
+ samples_teac.spindlemotor_loop.samples = 0;
+ }
+ if (samples_teac.spindlemotor_stop.buffer) {
+ free(samples_teac.spindlemotor_stop.buffer);
+ samples_teac.spindlemotor_stop.buffer = NULL;
+ samples_teac.spindlemotor_stop.samples = 0;
+ }
+ if (samples_teac.single_track_step.buffer) {
+ free(samples_teac.single_track_step.buffer);
+ samples_teac.single_track_step.buffer = NULL;
+ samples_teac.single_track_step.samples = 0;
+ }
+ if (samples_teac.multi_track_seek.buffer) {
+ free(samples_teac.multi_track_seek.buffer);
+ samples_teac.multi_track_seek.buffer = NULL;
+ samples_teac.multi_track_seek.samples = 0;
+ }
+
/* End sound thread */
sound_fdd_thread_end();
}
@@ -362,6 +406,8 @@ fdd_audio_set_motor_enable(int drive, int motor_enable)
return;
drive_audio_samples_t *samples = get_drive_samples(drive);
+ if (!samples)
+ return;
if (motor_enable && !motoron[drive]) {
/* Motor starting up */
@@ -416,7 +462,7 @@ fdd_audio_play_multi_track_seek(int drive, int from_track, int to_track)
return; /* Use single step for 1 track movements */
drive_audio_samples_t *samples = get_drive_samples(drive);
- if (!samples->multi_track_seek.buffer || samples->multi_track_seek.samples == 0)
+ if (!samples || !samples->multi_track_seek.buffer || samples->multi_track_seek.samples == 0)
return; /* No multi-track seek sample loaded */
/* Check if a seek is already active */
@@ -475,6 +521,8 @@ fdd_audio_callback(int16_t *buffer, int length)
/* Process audio for all drives */
for (int drive = 0; drive < FDD_NUM; drive++) {
drive_audio_samples_t *samples = get_drive_samples(drive);
+ if (!samples)
+ continue;
for (int i = 0; i < samples_in_buffer; i++) {
float left_sample = 0.0f;
diff --git a/src/include/86box/fdd.h b/src/include/86box/fdd.h
index c4d63746a..b73365de2 100644
--- a/src/include/86box/fdd.h
+++ b/src/include/86box/fdd.h
@@ -25,6 +25,13 @@
#define FLOPPY_IMAGE_HISTORY 10
#define SEEK_RECALIBRATE -999
+/* Per-drive audio profiles */
+#define FDD_AUDIO_PROFILE_NONE 0
+#define FDD_AUDIO_PROFILE_MITSUMI 1
+#define FDD_AUDIO_PROFILE_PANASONIC 2
+#define FDD_AUDIO_PROFILE_TEAC 3
+#define FDD_AUDIO_PROFILE_MAX 4
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -55,6 +62,10 @@ extern int fdd_get_check_bpb(int drive);
extern void fdd_set_type(int drive, int type);
extern int fdd_get_type(int drive);
+/* New audio profile accessors */
+extern void fdd_set_audio_profile(int drive, int profile);
+extern int fdd_get_audio_profile(int drive);
+
extern int fdd_get_flags(int drive);
extern int fdd_get_densel(int drive);
diff --git a/src/qt/qt_settingsfloppycdrom.cpp b/src/qt/qt_settingsfloppycdrom.cpp
index b3888ab00..495fb74e8 100644
--- a/src/qt/qt_settingsfloppycdrom.cpp
+++ b/src/qt/qt_settingsfloppycdrom.cpp
@@ -127,11 +127,12 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent)
++i;
}
- model = new QStandardItemModel(0, 3, this);
+ model = new QStandardItemModel(0, 4, this);
ui->tableViewFloppy->setModel(model);
model->setHeaderData(0, Qt::Horizontal, tr("Type"));
model->setHeaderData(1, Qt::Horizontal, tr("Turbo"));
model->setHeaderData(2, Qt::Horizontal, tr("Check BPB"));
+ model->setHeaderData(3, Qt::Horizontal, tr("Audio"));
model->insertRows(0, FDD_NUM);
/* Floppy drives category */
@@ -141,6 +142,26 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent)
setFloppyType(model, idx, type);
model->setData(idx.siblingAtColumn(1), fdd_get_turbo(i) > 0 ? tr("On") : tr("Off"));
model->setData(idx.siblingAtColumn(2), fdd_get_check_bpb(i) > 0 ? tr("On") : tr("Off"));
+
+ int prof = fdd_get_audio_profile(i);
+ QString profName;
+ switch (prof) {
+ case FDD_AUDIO_PROFILE_PANASONIC:
+ profName = tr("Panasonic");
+ break;
+ case FDD_AUDIO_PROFILE_TEAC:
+ profName = tr("Teac");
+ break;
+ case FDD_AUDIO_PROFILE_MITSUMI:
+ profName = tr("Mitsumi");
+ break;
+ default:
+ profName = tr("None");
+ break;
+ }
+ auto audioIdx = model->index(i, 3);
+ model->setData(audioIdx, profName);
+ model->setData(audioIdx, prof, Qt::UserRole);
}
ui->tableViewFloppy->resizeColumnsToContents();
@@ -148,7 +169,22 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent)
connect(ui->tableViewFloppy->selectionModel(), &QItemSelectionModel::currentRowChanged,
this, &SettingsFloppyCDROM::onFloppyRowChanged);
+
+#ifndef DISABLE_FDD_AUDIO
+ ui->comboBoxFloppyAudio->setVisible(true);
+ ui->comboBoxFloppyAudio->addItem(tr("None"), FDD_AUDIO_PROFILE_NONE);
+ ui->comboBoxFloppyAudio->addItem(tr("Generic Mitsumi 3.5\" 1.44MB"), FDD_AUDIO_PROFILE_MITSUMI);
+ ui->comboBoxFloppyAudio->addItem(tr("Panasonic JU-475-5 5.25\" 1.2MB"), FDD_AUDIO_PROFILE_PANASONIC);
+ ui->comboBoxFloppyAudio->addItem(tr("Teac FD-55GFR 5.25\" 1.2MB"), FDD_AUDIO_PROFILE_TEAC);
+ ui->comboBoxFloppyAudio->setSizeAdjustPolicy(QComboBox::AdjustToContents);
+#else
+ ui->comboBoxFloppyAudio->setVisible(false);
+#endif
+
+ // Set initial selection and trigger the row changed event to update controls
ui->tableViewFloppy->setCurrentIndex(model->index(0, 0));
+ // Manually trigger the row changed event to ensure audio selection is updated
+ onFloppyRowChanged(model->index(0, 0));
Harddrives::populateCDROMBuses(ui->comboBoxBus->model());
model = ui->comboBoxSpeed->model();
@@ -213,12 +249,6 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent)
ui->comboBoxCDROMType->setEnabled(eligibleRows > 1);
ui->comboBoxCDROMType->setCurrentIndex(-1);
ui->comboBoxCDROMType->setCurrentIndex(selectedTypeRow);
-#ifndef DISABLE_FDD_AUDIO
- ui->checkBoxFloppySounds->setVisible(true);
- ui->checkBoxFloppySounds->setChecked(fdd_sounds_enabled > 0);
-#else
- ui->checkBoxFloppySounds->setVisible(false);
-#endif
}
SettingsFloppyCDROM::~SettingsFloppyCDROM()
@@ -234,6 +264,9 @@ SettingsFloppyCDROM::save()
fdd_set_type(i, model->index(i, 0).data(Qt::UserRole).toInt());
fdd_set_turbo(i, model->index(i, 1).data() == tr("On") ? 1 : 0);
fdd_set_check_bpb(i, model->index(i, 2).data() == tr("On") ? 1 : 0);
+#ifndef DISABLE_FDD_AUDIO
+ fdd_set_audio_profile(i, model->index(i, 3).data(Qt::UserRole).toInt());
+#endif
}
/* Removable devices category */
@@ -255,7 +288,7 @@ SettingsFloppyCDROM::save()
#ifdef DISABLE_FDD_AUDIO
fdd_sounds_enabled = 0;
#else
- fdd_sounds_enabled = ui->checkBoxFloppySounds->isChecked() ? 1 : 0;
+ fdd_sounds_enabled = 1;
#endif
}
@@ -266,6 +299,10 @@ SettingsFloppyCDROM::onFloppyRowChanged(const QModelIndex ¤t)
ui->comboBoxFloppyType->setCurrentIndex(type);
ui->checkBoxTurboTimings->setChecked(current.siblingAtColumn(1).data() == tr("On"));
ui->checkBoxCheckBPB->setChecked(current.siblingAtColumn(2).data() == tr("On"));
+
+ int prof = current.siblingAtColumn(3).data(Qt::UserRole).toInt();
+ int comboIndex = ui->comboBoxFloppyAudio->findData(prof);
+ ui->comboBoxFloppyAudio->setCurrentIndex(comboIndex);
}
void
@@ -325,7 +362,7 @@ void
SettingsFloppyCDROM::on_checkBoxTurboTimings_stateChanged(int arg1)
{
auto idx = ui->tableViewFloppy->selectionModel()->currentIndex();
- ui->tableViewFloppy->model()->setData(idx.siblingAtColumn(1), arg1 == Qt::Checked ?
+ ui->tableViewFloppy->model()->setData(idx.siblingAtColumn(1), arg1 == Qt::Checked ?
tr("On") : tr("Off"));
}
@@ -333,15 +370,10 @@ void
SettingsFloppyCDROM::on_checkBoxCheckBPB_stateChanged(int arg1)
{
auto idx = ui->tableViewFloppy->selectionModel()->currentIndex();
- ui->tableViewFloppy->model()->setData(idx.siblingAtColumn(2), arg1 == Qt::Checked ?
+ ui->tableViewFloppy->model()->setData(idx.siblingAtColumn(2), arg1 == Qt::Checked ?
tr("On") : tr("Off"));
}
-void
-SettingsFloppyCDROM::on_checkBoxFloppySounds_stateChanged(int arg1)
-{
- fdd_sounds_enabled = (arg1 == Qt::Checked) ? 1 : 0;
-}
void
SettingsFloppyCDROM::on_comboBoxFloppyType_activated(int index)
@@ -350,6 +382,34 @@ SettingsFloppyCDROM::on_comboBoxFloppyType_activated(int index)
ui->tableViewFloppy->selectionModel()->currentIndex(), index);
}
+void
+SettingsFloppyCDROM::on_comboBoxFloppyAudio_activated(int)
+{
+ auto idx = ui->tableViewFloppy->selectionModel()->currentIndex();
+ int prof = ui->comboBoxFloppyAudio->currentData().toInt();
+ QString profName;
+ switch (prof) {
+ case FDD_AUDIO_PROFILE_NONE:
+ profName = tr("None");
+ break;
+ case FDD_AUDIO_PROFILE_PANASONIC:
+ profName = tr("Panasonic");
+ break;
+ case FDD_AUDIO_PROFILE_TEAC:
+ profName = tr("Teac");
+ break;
+ case FDD_AUDIO_PROFILE_MITSUMI:
+ profName = tr("Mitsumi");
+ break;
+ default:
+ profName = tr("None");
+ break;
+ }
+ auto audioIdx = idx.siblingAtColumn(3);
+ ui->tableViewFloppy->model()->setData(audioIdx, profName);
+ ui->tableViewFloppy->model()->setData(audioIdx, prof, Qt::UserRole);
+}
+
void SettingsFloppyCDROM::reloadBusChannels() {
auto selected = ui->comboBoxChannel->currentIndex();
Harddrives::populateBusChannels(ui->comboBoxChannel->model(), ui->comboBoxBus->currentData().toInt(), Harddrives::busTrackClass);
diff --git a/src/qt/qt_settingsfloppycdrom.hpp b/src/qt/qt_settingsfloppycdrom.hpp
index ddf82345e..4c69d5cc3 100644
--- a/src/qt/qt_settingsfloppycdrom.hpp
+++ b/src/qt/qt_settingsfloppycdrom.hpp
@@ -25,7 +25,7 @@ private slots:
void on_comboBoxFloppyType_activated(int index);
void on_checkBoxTurboTimings_stateChanged(int arg1);
void on_checkBoxCheckBPB_stateChanged(int arg1);
- void on_checkBoxFloppySounds_stateChanged(int arg1);
+ void on_comboBoxFloppyAudio_activated(int index);
void onCDROMRowChanged(const QModelIndex ¤t);
void on_comboBoxBus_activated(int index);
diff --git a/src/qt/qt_settingsfloppycdrom.ui b/src/qt/qt_settingsfloppycdrom.ui
index b5a45dff5..ff54a5020 100644
--- a/src/qt/qt_settingsfloppycdrom.ui
+++ b/src/qt/qt_settingsfloppycdrom.ui
@@ -100,11 +100,35 @@
-
-
-
- Enable floppy sounds for all drives
-
-
+
+
-
+
+
+ Audio:
+
+
+
+ -
+
+
+ 10
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
@@ -216,7 +240,7 @@
comboBoxFloppyType
checkBoxTurboTimings
checkBoxCheckBPB
- checkBoxFloppySounds
+ comboBoxFloppyAudio
tableViewCDROM
comboBoxBus
comboBoxChannel