From 3a763412c917d26e04a146fec30eae920caf45ac Mon Sep 17 00:00:00 2001 From: kichikuou Date: Thu, 15 Aug 2024 09:17:40 +0900 Subject: [PATCH] Remove MIDI support on Android This is in preparation for supporting real-time MIDI playback on other platforms. --- CMakeLists.txt | 1 - .../github/kichikuou/system3/GameActivity.kt | 94 ------------------- android/app/src/main/res/menu/game_menu.xml | 6 -- .../app/src/main/res/values-ja/strings.xml | 2 - android/app/src/main/res/values/strings.xml | 2 - src/android/mako.cpp | 65 +------------ src/sys/mako.h | 3 - 7 files changed, 1 insertion(+), 172 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 674c254..61fcc48 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,7 +32,6 @@ if (ANDROID) target_sources(system3 PRIVATE src/android/nact_android.cpp src/android/mako.cpp - src/sys/mako_midi.cpp ) target_link_libraries(system3 PRIVATE SDL2 SDL2_ttf SDL2_mixer ymfm) 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 991d024..9f44c50 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 @@ -18,12 +18,8 @@ package io.github.kichikuou.system3 import android.app.AlertDialog -import android.content.Context -import android.content.SharedPreferences -import android.media.MediaPlayer import android.os.Bundle import android.text.InputType -import android.util.Log import android.view.ContextMenu import android.view.Menu import android.view.MenuItem @@ -31,7 +27,6 @@ import android.view.View import android.widget.EditText import org.libsdl.app.SDLActivity import java.io.File -import java.io.IOException // Intent for this activity must have the following extras: // - EXTRA_GAME_ROOT (string): A path to the game installation. @@ -40,32 +35,16 @@ class GameActivity : SDLActivity() { companion object { const val EXTRA_GAME_ROOT = "GAME_ROOT" const val EXTRA_SAVE_DIR = "SAVE_DIR" - const val PREF_USE_FM = "use_fm_sound" } private lateinit var gameRoot: File - private lateinit var prefs: SharedPreferences - private val midi = MidiPlayer() - private var useFM = true override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) gameRoot = File(intent.getStringExtra(EXTRA_GAME_ROOT)!!) - prefs = getSharedPreferences("system3", Context.MODE_PRIVATE) - useFM = prefs.getBoolean(PREF_USE_FM, useFM) registerForContextMenu(mLayout) } - override fun onStop() { - super.onStop() - midi.onActivityStop() - } - - override fun onResume() { - super.onResume() - midi.onActivityResume() - } - override fun getLibraries(): Array { return arrayOf("SDL2", "system3") } @@ -75,8 +54,6 @@ class GameActivity : SDLActivity() { "-gamedir", intent.getStringExtra(EXTRA_GAME_ROOT)!!, "-savedir", intent.getStringExtra(EXTRA_SAVE_DIR)!! + "/@", "-playlist", Launcher.PLAYLIST_FILE) - if (useFM) - args.add("-fm") return args.toTypedArray() } @@ -120,7 +97,6 @@ class GameActivity : SDLActivity() { 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 { @@ -129,18 +105,6 @@ class GameActivity : SDLActivity() { finish() true } - R.id.fm_sound -> { - selectSynthesizer(true) - useFM = true - prefs.edit().putBoolean(PREF_USE_FM, useFM).apply() - true - } - R.id.midi_sound -> { - selectSynthesizer(false) - useFM = false - prefs.edit().putBoolean(PREF_USE_FM, useFM).apply() - true - } else -> super.onOptionsItemSelected(item) } } @@ -150,14 +114,7 @@ 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 midiStart(path: String, loop: Boolean) = midi.start(path, loop) - @Suppress("unused") fun midiStop() = midi.stop() - @Suppress("unused") fun midiCurrentPosition() = midi.currentPosition() - @Suppress("unused") fun inputString(oldVal: String, maxLen: Int): String? { val result = arrayOfNulls(1) runOnUiThread { textInputDialog(oldVal, maxLen, result) } @@ -176,54 +133,3 @@ class GameActivity : SDLActivity() { runOnUiThread { openMenu() } } } - -private class MidiPlayer { - private val player = MediaPlayer() - private var playing = false - private var playerPaused = false - - init { - player.setOnCompletionListener { playing = false } - } - - fun start(path: String, loop: Boolean) { - try { - player.apply { - reset() - setDataSource(path) - isLooping = loop - prepare() - start() - } - playing = true - } catch (e: IOException) { - Log.e("midiStart", "Cannot play midi", e) - player.reset() - } - } - - fun stop() { - if (playing && player.isPlaying) { - player.stop() - playing = false - } - } - - fun currentPosition(): Int { - return if (playing) player.currentPosition else 0 - } - - fun onActivityStop() { - if (playing && player.isPlaying) { - player.pause() - playerPaused = true - } - } - - fun onActivityResume() { - if (playerPaused) { - player.start() - playerPaused = false - } - } -} diff --git a/android/app/src/main/res/menu/game_menu.xml b/android/app/src/main/res/menu/game_menu.xml index 4abd7ad..40698c6 100644 --- a/android/app/src/main/res/menu/game_menu.xml +++ b/android/app/src/main/res/menu/game_menu.xml @@ -3,10 +3,4 @@ - - - - \ 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 f2392ef..680e033 100644 --- a/android/app/src/main/res/values-ja/strings.xml +++ b/android/app/src/main/res/values-ja/strings.xml @@ -17,8 +17,6 @@ セーブデータのエクスポートに失敗しました。 エクスポートに成功しました。 インポートに成功しました。 - 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 7233b80..a3d8f49 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -17,8 +17,6 @@ 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 7cc0895..ced741e 100644 --- a/src/android/mako.cpp +++ b/src/android/mako.cpp @@ -7,14 +7,12 @@ #include "jnihelper.h" #include "dri.h" #include "mako.h" -#include "mako_midi.h" #include "fm/mako_ymfm.h" namespace { const int SAMPLE_RATE = 44100; -MAKO *g_mako; Mix_Music *mix_music; Mix_Chunk *mix_chunk; SDL_mutex* fm_mutex; @@ -34,8 +32,6 @@ MAKO::MAKO(NACT* parent, const Config& config) : next_loop(0), nact(parent) { - g_mako = this; - load_playlist(config.playlist.c_str()); strcpy(amus, "AMUS.DAT"); @@ -103,7 +99,7 @@ void MAKO::play_music(int page) return; } } - } else if (use_fm) { + } else { DRI dri; int size; uint8* data = dri.load(amus, page, &size); @@ -116,36 +112,6 @@ void MAKO::play_music(int page) fm = std::make_unique(SAMPLE_RATE, data, true); SDL_UnlockMutex(fm_mutex); Mix_HookMusic(&FMHook, this); - } else { - JNILocalFrame jni(16); - if (!jni.env()) - return; - - auto midi = std::make_unique(nact, amus); - if (!midi->load_mml(page)) { - WARNING("load_mml(%d) failed", page); - return; - } - midi->load_mda(page); - std::vector smf = midi->generate_smf(next_loop); - - char path[PATH_MAX]; - snprintf(path, PATH_MAX, "%s/tmp.mid", SDL_AndroidGetInternalStoragePath()); - FILE* fp = fopen(path, "w"); - if (!fp) { - WARNING("Failed to create temporary file"); - return; - } - fwrite(smf.data(), smf.size(), 1, fp); - fclose(fp); - - jstring path_str = jni.env()->NewStringUTF(path); - if (!path_str) { - WARNING("Failed to allocate a string"); - return; - } - jmethodID mid = jni.GetMethodID("midiStart", "(Ljava/lang/String;Z)V"); - jni.env()->CallVoidMethod(jni.context(), mid, path_str, next_loop ? 0 : 1); } current_music = page; @@ -162,12 +128,6 @@ void MAKO::stop_music() mix_music = NULL; } - JNILocalFrame jni(16); - if (jni.env()) { - jmethodID mid = jni.GetMethodID("midiStop", "()V"); - jni.env()->CallVoidMethod(jni.context(), mid); - } - if (fm) { Mix_HookMusic(NULL, NULL); SDL_LockMutex(fm_mutex); @@ -191,11 +151,6 @@ bool MAKO::check_music() return !loop; } - JNILocalFrame jni(16); - if (jni.env()) { - jmethodID mid = jni.GetMethodID("midiCurrentPosition", "()I"); - return jni.env()->CallIntMethod(jni.context(), mid) != 0; - } return false; } @@ -270,21 +225,3 @@ bool MAKO::check_pcm() { return Mix_Playing(-1) != 0; } - -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 b63edac..0847c1e 100644 --- a/src/sys/mako.h +++ b/src/sys/mako.h @@ -43,9 +43,6 @@ public: void select_sound(BGMDevice dev); void on_mci_notify(const SDL_SysWMmsg* msg); #endif -#if defined(__ANDROID__) - void select_synthesizer(bool use_fm); -#endif bool use_fm;