diff --git a/src/sys/mako.h b/src/sys/mako.h index b53f027..0a383fc 100644 --- a/src/sys/mako.h +++ b/src/sys/mako.h @@ -14,6 +14,11 @@ #include "../common.h" #include "nact.h" +enum BGMDevice { + BGM_FM, + BGM_CD +}; + class MAKO { public: @@ -29,7 +34,11 @@ public: void stop_pcm(); bool check_pcm(); + void set_cd_track(int num, int track) { cd_track[num] = track; } + #ifdef _WIN32 + void select_sound(BGMDevice dev); + void on_mci_notify(SDL_SysWMmsg* msg); #endif @@ -39,10 +48,10 @@ public: int current_music; int next_loop; // Y19 - int cd_track[100]; // Z private: NACT* nact; + int cd_track[100]; // Z #if !defined(__EMSCRIPTEN__) && !defined(__ANDROID__) bool load_playlist(const char* path); diff --git a/src/sys/nact.cpp b/src/sys/nact.cpp index 4e3b497..efa4d1b 100644 --- a/src/sys/nact.cpp +++ b/src/sys/nact.cpp @@ -420,23 +420,6 @@ void NACT::select_cursor() ags->select_cursor(); } -void NACT::select_sound(int dev) -{ - // 強制的に音源を変更する - int page = mako->current_music; - int old_dev = (1 <= page && page <= 99 && mako->cd_track[page]) ? 1 : 0; - - for(int i = 1; i <= 99; i++) { - mako->cd_track[i] = dev ? i : 0; - } - - // デバイスが変更された場合は再演奏する - if(dev != old_dev && page) { - mako->stop_music(); - mako->play_music(page); - } -} - void NACT::fatal(const char* format, ...) { char buf[512]; va_list args; diff --git a/src/sys/nact.h b/src/sys/nact.h index 2a91589..59c6a38 100644 --- a/src/sys/nact.h +++ b/src/sys/nact.h @@ -241,7 +241,6 @@ public: int get_screen_height(); void select_cursor(); - void select_sound(int dev); const char* get_game_id(); static const int get_sys_ver(uint32 crc32_a, uint32 crc32_b); diff --git a/src/sys/nact_sys3.cpp b/src/sys/nact_sys3.cpp index b8e98df..f93ee8d 100644 --- a/src/sys/nact_sys3.cpp +++ b/src/sys/nact_sys3.cpp @@ -1526,7 +1526,7 @@ void NACT_Sys3::cmd_z() } else if(cmd == 7) { ags->cursor_color = (uint8)(param & 0xff); } else if(101 <= cmd && cmd <= 199) { - mako->cd_track[cmd - 100] = param; + mako->set_cd_track(cmd - 100, param); } } diff --git a/src/win/mako.cpp b/src/win/mako.cpp index 985be6b..83cc70e 100644 --- a/src/win/mako.cpp +++ b/src/win/mako.cpp @@ -304,6 +304,23 @@ bool MAKO::check_music() return music && music->is_playing(); } +void MAKO::select_sound(BGMDevice dev) +{ + // 強制的に音源を変更する + int page = current_music; + int old_dev = (1 <= page && page <= 99 && cd_track[page]) ? BGM_CD : BGM_FM; + + for (int i = 1; i <= 99; i++) { + cd_track[i] = (dev == BGM_CD) ? i : 0; + } + + // デバイスが変更された場合は再演奏する + if (dev != old_dev && page) { + stop_music(); + play_music(page); + } +} + void MAKO::get_mark(int* mark, int* loop) { // TODO: fix diff --git a/src/win/nact_win.cpp b/src/win/nact_win.cpp index 1b745c5..5027378 100644 --- a/src/win/nact_win.cpp +++ b/src/win/nact_win.cpp @@ -150,10 +150,10 @@ void NACT::on_syswmevent(SDL_SysWMmsg* msg) ags->flush_screen(true); break; case ID_SOUND_FM: - select_sound(0); + mako->select_sound(BGM_FM); break; case ID_SOUND_CD: - select_sound(1); + mako->select_sound(BGM_CD); break; case ID_TEXT_SKIP: text_skip_enb = !text_skip_enb;