diff --git a/CMakeLists.txt b/CMakeLists.txt index 15351bf..d21b62e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -123,14 +123,10 @@ elseif (CMAKE_SYSTEM_NAME STREQUAL "Emscripten") list(APPEND SRC_CDROM cdrom.emscripten.c) list(APPEND SUMMARY_CDROM "Emscripten") set(ENABLE_CDROM_EMSCRIPTEN 1) -elseif (CMAKE_SYSTEM_NAME STREQUAL "Android") - list(APPEND SRC_CDROM cdrom.android.c) - list(APPEND SUMMARY_CDROM "Android") - set(ENABLE_CDROM_ANDROID 1) else() list(APPEND SRC_CDROM cdrom.empty.c) endif() -if (SDL2MIXER_FOUND AND NOT ANDROID) +if (SDL2MIXER_FOUND) list(APPEND SRC_CDROM cdrom.mp3.c) list(APPEND SUMMARY_CDROM "SDL_mixer (wav|mp3|ogg...)") set(ENABLE_CDROM_MP3 1) diff --git a/android/app/src/main/java/io/github/kichikuou/xsystem35/GameActivity.kt b/android/app/src/main/java/io/github/kichikuou/xsystem35/GameActivity.kt index 5a20667..99df1f6 100644 --- a/android/app/src/main/java/io/github/kichikuou/xsystem35/GameActivity.kt +++ b/android/app/src/main/java/io/github/kichikuou/xsystem35/GameActivity.kt @@ -37,24 +37,20 @@ class GameActivity : SDLActivity() { } private lateinit var gameRoot: File - private lateinit var cdda: CddaPlayer private val midi = MidiPlayer() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) gameRoot = File(intent.getStringExtra(EXTRA_GAME_ROOT)!!) - cdda = CddaPlayer(File(gameRoot, Launcher.PLAYLIST_FILE)) } override fun onStop() { super.onStop() - cdda.onActivityStop() midi.onActivityStop() } override fun onResume() { super.onResume() - cdda.onActivityResume() midi.onActivityResume() } @@ -63,7 +59,9 @@ class GameActivity : SDLActivity() { } override fun getArguments(): Array { - return arrayOf("-gamedir", intent.getStringExtra(EXTRA_GAME_ROOT)!!) + return arrayOf( + "-gamedir", intent.getStringExtra(EXTRA_GAME_ROOT)!!, + "-devcd", Launcher.PLAYLIST_FILE) } override fun setTitle(title: CharSequence?) { @@ -120,9 +118,6 @@ class GameActivity : SDLActivity() { } // 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() - @Suppress("unused") fun cddaCurrentPosition() = cdda.currentPosition() @Suppress("unused") fun midiStart(path: String, loop: Boolean) = midi.start(path, loop) @Suppress("unused") fun midiStop() = midi.stop() @Suppress("unused") fun midiCurrentPosition() = midi.currentPosition() @@ -156,69 +151,6 @@ class GameActivity : SDLActivity() { } } -private class CddaPlayer(private val playlistPath: File) { - private val playlist = - try { - playlistPath.readLines() - } catch (e: IOException) { - Log.e("loadPlaylist", "Cannot load $playlistPath", e) - emptyList() - } - private var currentTrack = 0 - private val player = MediaPlayer() - private var playerPaused = false - - fun start(track: Int, loop: Boolean) { - val f = playlist.elementAtOrNull(track - 1) - if (f.isNullOrEmpty()) { - Log.w("cddaStart", "No playlist entry for track $track") - return - } - Log.v("cddaStart", "$f Loop:$loop") - try { - player.apply { - reset() - setDataSource(File(playlistPath.parent, f).path) - isLooping = loop - prepare() - start() - } - currentTrack = track - } catch (e: IOException) { - Log.e("cddaStart", "Cannot play $f", e) - player.reset() - } - } - - fun stop() { - if (currentTrack > 0 && player.isPlaying) { - player.stop() - currentTrack = 0 - } - } - - fun currentPosition(): Int { - if (currentTrack == 0) - return 0 - val frames = player.currentPosition * 75 / 1000 - return currentTrack or (frames shl 8) - } - - fun onActivityStop() { - if (currentTrack > 0 && player.isPlaying) { - player.pause() - playerPaused = true - } - } - - fun onActivityResume() { - if (playerPaused) { - player.start() - playerPaused = false - } - } -} - private class MidiPlayer { private val player = MediaPlayer() private var playing = false diff --git a/src/cdrom.android.c b/src/cdrom.android.c deleted file mode 100644 index ac5124f..0000000 --- a/src/cdrom.android.c +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (C) 2020 - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * -*/ - -#include -#include -#include "system.h" -#include "portab.h" -#include "cdrom.h" - -static int cdrom_init(char *); -static int cdrom_exit(void); -static int cdrom_reset(void); -static int cdrom_start(int, int); -static int cdrom_stop(); -static int cdrom_getPlayingInfo(cd_time *); - -#define cdrom cdrom_android -cdromdevice_t cdrom = { - cdrom_init, - cdrom_exit, - cdrom_reset, - cdrom_start, - cdrom_stop, - cdrom_getPlayingInfo, - NULL, - NULL -}; - -int cdrom_init(char *name) { - return OK; -} - -int cdrom_reset(void) { - cdrom_stop(); - return OK; -} - -int cdrom_exit(void) { - cdrom_stop(); - return OK; -} - -int cdrom_start(int trk, int loop) { - JNIEnv *env = SDL_AndroidGetJNIEnv(); - if ((*env)->PushLocalFrame(env, 16) < 0) { - WARNING("Failed to allocate JVM local references"); - return NG; - } - jobject context = SDL_AndroidGetActivity(); - jmethodID mid = (*env)->GetMethodID(env, (*env)->GetObjectClass(env, context), - "cddaStart", "(IZ)V"); - (*env)->CallVoidMethod(env, context, mid, trk, loop == 0); - (*env)->PopLocalFrame(env, NULL); - return OK; -} - -int cdrom_stop() { - JNIEnv *env = SDL_AndroidGetJNIEnv(); - if ((*env)->PushLocalFrame(env, 16) < 0) { - WARNING("Failed to allocate JVM local references"); - return NG; - } - jobject context = SDL_AndroidGetActivity(); - jmethodID mid = (*env)->GetMethodID(env, (*env)->GetObjectClass(env, context), - "cddaStop", "()V"); - (*env)->CallVoidMethod(env, context, mid); - (*env)->PopLocalFrame(env, NULL); - return OK; -} - -int cdrom_getPlayingInfo (cd_time *info) { - JNIEnv *env = SDL_AndroidGetJNIEnv(); - if ((*env)->PushLocalFrame(env, 16) < 0) { - WARNING("Failed to allocate JVM local references"); - return NG; - } - jobject context = SDL_AndroidGetActivity(); - jmethodID mid = (*env)->GetMethodID(env, (*env)->GetObjectClass(env, context), - "cddaCurrentPosition", "()I"); - int t = (*env)->CallIntMethod(env, context, mid); - (*env)->PopLocalFrame(env, NULL); - - info->t = t & 0xff; - FRAMES_TO_MSF(t >> 8, &info->m, &info->s, &info->f); - return OK; -} diff --git a/src/cdrom.c b/src/cdrom.c index d4aca43..3574907 100644 --- a/src/cdrom.c +++ b/src/cdrom.c @@ -43,10 +43,6 @@ extern cdromdevice_t cdrom_bsd; extern cdromdevice_t cdrom_emscripten; #define NATIVE_CD_DEVICE &cdrom_emscripten -#elif defined(ENABLE_CDROM_ANDROID) -extern cdromdevice_t cdrom_android; -#define NATIVE_CD_DEVICE &cdrom_android - #else extern cdromdevice_t cdrom_empty; @@ -58,7 +54,7 @@ extern cdromdevice_t cdrom_mp3; #endif cdromdevice_t *cd_init(const char *dev) { -#if defined(ENABLE_CDROM_EMSCRIPTEN) || defined(ENABLE_CDROM_ANDROID) +#if defined(ENABLE_CDROM_EMSCRIPTEN) return NATIVE_CD_DEVICE; #else struct stat st; @@ -71,5 +67,5 @@ cdromdevice_t *cd_init(const char *dev) { WARNING("no cdrom device available"); return NULL; #endif -#endif // ENABLE_CDROM_EMSCRIPTEN || ENABLE_CDROM_ANDROID +#endif // ENABLE_CDROM_EMSCRIPTEN }