| 116 | } |
| 117 | |
| 118 | static bool load_default_sf(std::string& status_message, fluid_synth_t* syn) { |
| 119 | // Attempt loading a soundfont |
| 120 | std::vector<std::string> sf_paths; |
| 121 | std::string preferred_soundfont = Audio().GetFluidsynthSoundfont(); |
| 122 | if (!preferred_soundfont.empty()) { |
| 123 | sf_paths.emplace_back(preferred_soundfont); |
| 124 | } |
| 125 | sf_paths.emplace_back("easyrpg.soundfont"); |
| 126 | |
| 127 | #if FLUIDSYNTH_VERSION_MAJOR >= 2 |
| 128 | char* default_sf = nullptr; |
| 129 | if (fluid_settings_dupstr(global_settings.get(), "synth.default-soundfont", &default_sf) == 0) { |
| 130 | if (default_sf != nullptr && default_sf[0] != '\0') { |
| 131 | sf_paths.emplace_back(default_sf); |
| 132 | } |
| 133 | } |
| 134 | fluid_free(default_sf); |
| 135 | #endif |
| 136 | |
| 137 | if (getenv("SDL_SOUNDFONTS")) { |
| 138 | auto sdl_sfs = Utils::Tokenize(getenv("SDL_SOUNDFONTS"), [](char32_t t) { |
| 139 | #ifdef _WIN32 |
| 140 | return t == ';'; |
| 141 | #else |
| 142 | return t == ':' || t == ';'; |
| 143 | #endif |
| 144 | }); |
| 145 | sf_paths.insert(sf_paths.end(), sdl_sfs.begin(), sdl_sfs.end()); |
| 146 | } |
| 147 | |
| 148 | #ifdef SYSTEM_DESKTOP_LINUX_BSD_MACOS |
| 149 | auto sf_files = {"FluidR3_GM.sf2"}; |
| 150 | for (const auto& sf_file: sf_files) { |
| 151 | sf_paths.emplace_back(FileFinder::MakePath("/usr/share/soundfonts", sf_file)); |
| 152 | sf_paths.emplace_back(FileFinder::MakePath("/usr/share/sounds/sf2", sf_file)); |
| 153 | } |
| 154 | #endif |
| 155 | |
| 156 | bool sf_load_success = false; |
| 157 | for (const auto& sf_name: sf_paths) { |
| 158 | if (fluid_synth_sfload(syn, sf_name.c_str(), 1) != FLUID_FAILED) { |
| 159 | sf_load_success = true; |
| 160 | status_message = fmt::format("Using soundfont {}", sf_name); |
| 161 | break; |
| 162 | } |
| 163 | } |
| 164 | |
| 165 | if (!sf_load_success) { |
| 166 | status_message = "Could not load soundfont."; |
| 167 | return false; |
| 168 | } |
| 169 | |
| 170 | return true; |
| 171 | } |
| 172 | |
| 173 | static fluid_synth_t* create_synth(std::string& status_message) { |
| 174 | fluid_synth_t* syn = new_fluid_synth(global_settings.get()); |
no test coverage detected