diff --git a/android/app/src/main/java/io/github/kichikuou/system3/GameActivity.kt b/android/app/src/main/java/io/github/kichikuou/system3/GameActivity.kt index f01b960..0dead25 100644 --- a/android/app/src/main/java/io/github/kichikuou/system3/GameActivity.kt +++ b/android/app/src/main/java/io/github/kichikuou/system3/GameActivity.kt @@ -43,6 +43,7 @@ class GameActivity : SDLActivity() { private lateinit var gameRoot: File private lateinit var cdda: CddaPlayer private val midi = MidiPlayer() + private var useFM = true override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -70,7 +71,8 @@ class GameActivity : SDLActivity() { override fun getArguments(): Array { return arrayOf( "-gamedir", intent.getStringExtra(EXTRA_GAME_ROOT), - "-savedir", intent.getStringExtra(EXTRA_SAVE_DIR) + "/@") + "-savedir", intent.getStringExtra(EXTRA_SAVE_DIR) + "/@", + "-fm") } override fun setTitle(title: CharSequence?) { @@ -110,9 +112,10 @@ class GameActivity : SDLActivity() { menuShown = true } - override fun onCreateContextMenu(menu: ContextMenu?, v: View?, menuInfo: ContextMenu.ContextMenuInfo?) { + override fun onCreateContextMenu(menu: ContextMenu, v: View?, menuInfo: ContextMenu.ContextMenuInfo?) { super.onCreateContextMenu(menu, v, menuInfo) menuInflater.inflate(R.menu.game_menu, menu) + menu.findItem(if (useFM) R.id.fm_sound else R.id.midi_sound).isChecked = true } override fun onContextItemSelected(item: MenuItem): Boolean { @@ -121,6 +124,16 @@ class GameActivity : SDLActivity() { finish() true } + R.id.fm_sound -> { + selectSynthesizer(true) + useFM = true + true + } + R.id.midi_sound -> { + selectSynthesizer(false) + useFM = false + true + } else -> super.onOptionsItemSelected(item) } } @@ -130,6 +143,9 @@ class GameActivity : SDLActivity() { menuShown = false } + // C functions we call + private external fun selectSynthesizer(use_fm: Boolean) + // The functions below are called in the SDL thread by JNI. @Suppress("unused") fun cddaStart(track: Int, loop: Boolean) = cdda.start(track, loop) @Suppress("unused") fun cddaStop() = cdda.stop() diff --git a/android/app/src/main/res/menu/game_menu.xml b/android/app/src/main/res/menu/game_menu.xml index 40698c6..4abd7ad 100644 --- a/android/app/src/main/res/menu/game_menu.xml +++ b/android/app/src/main/res/menu/game_menu.xml @@ -3,4 +3,10 @@ + + + + \ No newline at end of file diff --git a/android/app/src/main/res/values-ja/strings.xml b/android/app/src/main/res/values-ja/strings.xml index cad5acd..d7dd781 100644 --- a/android/app/src/main/res/values-ja/strings.xml +++ b/android/app/src/main/res/values-ja/strings.xml @@ -16,6 +16,8 @@ セーブデータのエクスポートに失敗しました。 エクスポートに成功しました。 インポートに成功しました。 + FM音源 + MIDI音源 「%s」をアンインストールしますか? 確認 この形式の ZIP はサポートしていません。 diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index ccbb015..96ee1f1 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -16,6 +16,8 @@ Failed to export save files. Imported successfully. Exported successfully. + FM sound + MIDI sound Uninstall \"%s\"? Confirm This type of ZIP is not supported. diff --git a/src/android/mako.cpp b/src/android/mako.cpp index a59e2ef..6f4f045 100644 --- a/src/android/mako.cpp +++ b/src/android/mako.cpp @@ -9,6 +9,7 @@ namespace { +MAKO *g_mako; SDL_mutex* fm_mutex; std::unique_ptr fm; @@ -21,11 +22,12 @@ void audio_callback(void*, Uint8* stream, int len) { } // namespace MAKO::MAKO(NACT* parent, const MAKOConfig& config) : - use_fm(true), // TODO: make it switchable + use_fm(config.use_fm), current_music(0), next_loop(0), nact(parent) { + g_mako = this; strcpy(amus, "AMUS.DAT"); for (int i = 1; i <= 99; i++) cd_track[i] = 0; @@ -159,3 +161,21 @@ bool MAKO::check_pcm() { return false; } + +void MAKO::select_synthesizer(bool use_fm_) { + if (use_fm == use_fm_) + return; + int page = current_music; + stop_music(); + use_fm = use_fm_; + play_music(page); +} + +extern "C" { + +JNIEXPORT void JNICALL Java_io_github_kichikuou_system3_GameActivity_selectSynthesizer( + JNIEnv *env, jobject cls, jboolean use_fm) { + g_mako->select_synthesizer(use_fm); +} + +} // extern "C" diff --git a/src/sys/mako.h b/src/sys/mako.h index 42472a7..ddc213a 100644 --- a/src/sys/mako.h +++ b/src/sys/mako.h @@ -45,7 +45,7 @@ public: void select_sound(BGMDevice dev); void on_mci_notify(const SDL_SysWMmsg* msg); #endif -#ifdef __EMSCRIPTEN__ +#if defined(__EMSCRIPTEN__) || defined(__ANDROID__) void select_synthesizer(bool use_fm); #endif