From a4133c219dc8819021eb1db035bae8618dffe3e6 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Sun, 29 Nov 2020 19:30:17 +0900 Subject: [PATCH] Android: Save sound preference --- .../github/kichikuou/system3/GameActivity.kt | 16 +++++-- src/android/mako.cpp | 43 ++++++++----------- 2 files changed, 32 insertions(+), 27 deletions(-) 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 0dead25..9a7b68b 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,6 +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 @@ -38,10 +40,12 @@ 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 cdda: CddaPlayer + private lateinit var prefs: SharedPreferences private val midi = MidiPlayer() private var useFM = true @@ -49,6 +53,8 @@ class GameActivity : SDLActivity() { super.onCreate(savedInstanceState) gameRoot = File(intent.getStringExtra(EXTRA_GAME_ROOT)) cdda = CddaPlayer(File(gameRoot, Launcher.PLAYLIST_FILE)) + prefs = getSharedPreferences("system3", Context.MODE_PRIVATE) + useFM = prefs.getBoolean(PREF_USE_FM, useFM) registerForContextMenu(mLayout) } @@ -69,10 +75,12 @@ class GameActivity : SDLActivity() { } override fun getArguments(): Array { - return arrayOf( + val args = arrayListOf( "-gamedir", intent.getStringExtra(EXTRA_GAME_ROOT), - "-savedir", intent.getStringExtra(EXTRA_SAVE_DIR) + "/@", - "-fm") + "-savedir", intent.getStringExtra(EXTRA_SAVE_DIR) + "/@") + if (useFM) + args.add("-fm") + return args.toTypedArray() } override fun setTitle(title: CharSequence?) { @@ -127,11 +135,13 @@ class GameActivity : SDLActivity() { 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) diff --git a/src/android/mako.cpp b/src/android/mako.cpp index 6f4f045..5b3d306 100644 --- a/src/android/mako.cpp +++ b/src/android/mako.cpp @@ -31,34 +31,29 @@ MAKO::MAKO(NACT* parent, const MAKOConfig& config) : strcpy(amus, "AMUS.DAT"); for (int i = 1; i <= 99; i++) cd_track[i] = 0; - if (use_fm) { - SDL_InitSubSystem(SDL_INIT_AUDIO); - SDL_AudioSpec fmt; - SDL_zero(fmt); - fmt.freq = 44100; - fmt.format = AUDIO_S16; - fmt.channels = 2; - fmt.samples = 4096; - fmt.callback = &audio_callback; - if (SDL_OpenAudio(&fmt, NULL) < 0) { - WARNING("SDL_OpenAudio: %s", SDL_GetError()); - SDL_QuitSubSystem(SDL_INIT_AUDIO); - use_fm = false; - return; - } - fm_mutex = SDL_CreateMutex(); + + SDL_InitSubSystem(SDL_INIT_AUDIO); + SDL_AudioSpec fmt; + SDL_zero(fmt); + fmt.freq = 44100; + fmt.format = AUDIO_S16; + fmt.channels = 2; + fmt.samples = 4096; + fmt.callback = &audio_callback; + if (SDL_OpenAudio(&fmt, NULL) < 0) { + WARNING("SDL_OpenAudio: %s", SDL_GetError()); + use_fm = false; } + fm_mutex = SDL_CreateMutex(); } MAKO::~MAKO() { - if (fm_mutex) { - SDL_LockMutex(fm_mutex); - SDL_PauseAudio(1); - SDL_UnlockMutex(fm_mutex); - SDL_DestroyMutex(fm_mutex); - fm_mutex = nullptr; - SDL_QuitSubSystem(SDL_INIT_AUDIO); - } + SDL_LockMutex(fm_mutex); + SDL_CloseAudio(); + SDL_UnlockMutex(fm_mutex); + SDL_DestroyMutex(fm_mutex); + fm_mutex = nullptr; + SDL_QuitSubSystem(SDL_INIT_AUDIO); } void MAKO::play_music(int page)