mirror of
https://github.com/OpenTTD/OpenTTD
synced 2025-12-10 06:52:05 +01:00
Fix #14889: [FluidSynth] Don't try to load a soundfont that doesn't exist.
This commit is contained in:
committed by
Peter Nelson
parent
2162983054
commit
9695de9e1c
@@ -11,6 +11,7 @@
|
||||
|
||||
#include "fluidsynth.h"
|
||||
|
||||
#include <filesystem>
|
||||
#include <fluidsynth.h>
|
||||
#include <mutex>
|
||||
|
||||
@@ -31,7 +32,7 @@ static struct {
|
||||
static FMusicDriver_FluidSynth iFMusicDriver_FluidSynth;
|
||||
|
||||
/** List of sound fonts to try by default. */
|
||||
static const char *default_sf[] = {
|
||||
static const char *_default_soundfonts[] = {
|
||||
/* FluidSynth preferred */
|
||||
/* See: https://www.fluidsynth.org/api/settings_synth.html#settings_synth_default-soundfont */
|
||||
"/usr/share/soundfonts/default.sf2",
|
||||
@@ -49,8 +50,6 @@ static const char *default_sf[] = {
|
||||
/* Debian/Ubuntu/OpenSUSE alternatives */
|
||||
"/usr/share/sounds/sf2/TimGM6mb.sf2",
|
||||
"/usr/share/sounds/sf2/FluidR3_GS.sf2",
|
||||
|
||||
nullptr
|
||||
};
|
||||
|
||||
static void RenderMusicStream(int16_t *buffer, size_t samples)
|
||||
@@ -99,9 +98,9 @@ std::optional<std::string_view> MusicDriver_FluidSynth::Start(const StringList &
|
||||
|
||||
/* If no default soundfont found, try our own list. */
|
||||
if (sfont_id == FLUID_FAILED) {
|
||||
for (int i = 0; default_sf[i]; i++) {
|
||||
if (!fluid_is_soundfont(default_sf[i])) continue;
|
||||
sfont_id = fluid_synth_sfload(_midi.synth, default_sf[i], 1);
|
||||
for (const char *soundfont : _default_soundfonts) {
|
||||
if (!std::filesystem::exists(soundfont) || !fluid_is_soundfont(soundfont)) continue;
|
||||
sfont_id = fluid_synth_sfload(_midi.synth, soundfont, 1);
|
||||
if (sfont_id != FLUID_FAILED) break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user