Force FM/MIDI audio when CD audio is not available

If CD audio is not available (no playlist) but CD playback is specified,
MAKO::play() falls back to FM/MIDI.

Also, on Windows, gray out the "CD Audio" menu item if CD audio is not
available.
This commit is contained in:
kichikuou
2026-02-07 09:04:35 +09:00
parent 852d82ef2c
commit 527f574a48
5 changed files with 24 additions and 3 deletions
+1
View File
@@ -38,6 +38,7 @@ void sys_warning(const char* format, ...);
extern uint32_t sdl_custom_event_type;
enum CustomEvent {
DEBUGGER_COMMAND,
DISABLE_CD_MENU,
};
// resource.cpp
+1 -1
View File
@@ -50,7 +50,7 @@ void MAKO::play_music(int page)
stop_music();
int track = page < 100 ? cd_track[page] : 0;
if (track) {
if (track && is_cd_available()) {
EM_ASM_ARGS({ xsystem35.cdPlayer.play($0, $1); },
cd_track[page] + 1, next_loop ? 0 : 1);
} else {
+1 -1
View File
@@ -98,7 +98,7 @@ void MAKO::play_music(int page)
stop_music();
int track = page < 100 ? cd_track[page] : 0;
if (track) {
if (track && is_cd_available()) {
if (track < playlist.size() && playlist[track]) {
#ifdef __ANDROID__
// Mix_LoadMUS uses SDL_RWFromFile which requires absolute path on Android
+7 -1
View File
@@ -206,6 +206,12 @@ MAKO::MAKO(const Config& config, const GameId& game_id) :
{
if (!config.playlist.empty())
load_playlist(config.playlist.c_str());
if (!is_cd_available()) {
SDL_Event event = {};
event.user.type = sdl_custom_event_type;
event.user.code = DISABLE_CD_MENU;
SDL_PushEvent(&event);
}
amus.open("AMUS.DAT");
awav.open("AWAV.DAT");
@@ -283,7 +289,7 @@ void MAKO::play_music(int page)
stop_music();
size_t track = page < 100 ? cd_track[page] : 0;
if (track) {
if (track && is_cd_available()) {
if (track >= playlist.size() || !playlist[track])
return;
music = new Music(playlist[track], next_loop);
+14
View File
@@ -173,6 +173,20 @@ void NACT::set_skip_menu_state(bool enabled, bool checked)
bool NACT::handle_platform_event(const SDL_Event& e)
{
if (e.type == sdl_custom_event_type) {
switch (e.user.code) {
case DISABLE_CD_MENU:
{
HWND hwnd = get_hwnd(g_window);
HMENU hmenu = GetMenu(hwnd);
EnableMenuItem(hmenu, ID_OPTION_CD, MF_GRAYED);
DrawMenuBar(hwnd);
}
return true;
}
return false;
}
if (e.type != SDL_SYSWMEVENT)
return false;
const SDL_SysWMmsg* msg = e.syswm.msg;