From d2a60ae9d9f0d4f02227beb351448757efa00354 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Thu, 3 Dec 2020 15:47:06 +0900 Subject: [PATCH] MakoFMgen: Take audio sampling rate as a ctor argument --- src/android/mako.cpp | 6 ++++-- src/emscripten/mako.cpp | 4 ++-- src/fm/mako_fmgen.cpp | 8 ++++---- src/fm/mako_fmgen.h | 3 ++- src/linux/mako.cpp | 6 ++++-- 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/android/mako.cpp b/src/android/mako.cpp index 5b3d306..1e62c5c 100644 --- a/src/android/mako.cpp +++ b/src/android/mako.cpp @@ -9,6 +9,8 @@ namespace { +const int SAMPLE_RATE = 44100; + MAKO *g_mako; SDL_mutex* fm_mutex; std::unique_ptr fm; @@ -35,7 +37,7 @@ MAKO::MAKO(NACT* parent, const MAKOConfig& config) : SDL_InitSubSystem(SDL_INIT_AUDIO); SDL_AudioSpec fmt; SDL_zero(fmt); - fmt.freq = 44100; + fmt.freq = SAMPLE_RATE; fmt.format = AUDIO_S16; fmt.channels = 2; fmt.samples = 4096; @@ -77,7 +79,7 @@ void MAKO::play_music(int page) return; SDL_LockMutex(fm_mutex); - fm = std::make_unique(data, true); + fm = std::make_unique(SAMPLE_RATE, data, true); SDL_UnlockMutex(fm_mutex); SDL_PauseAudio(0); } else { diff --git a/src/emscripten/mako.cpp b/src/emscripten/mako.cpp index afff524..e236b47 100644 --- a/src/emscripten/mako.cpp +++ b/src/emscripten/mako.cpp @@ -46,8 +46,8 @@ void MAKO::play_music(int page) uint8* data = dri.load(amus, page, &size); if (!data) return; - fm = std::make_unique(data, true); - EM_ASM({ xsystem35.audio.enable_audio_hook(); }); + int rate = EM_ASM_INT({ return xsystem35.audio.enable_audio_hook(); }); + fm = std::make_unique(rate, data, true); } else { auto midi = std::make_unique(nact, amus); if (!midi->load_mml(page)) { diff --git a/src/fm/mako_fmgen.cpp b/src/fm/mako_fmgen.cpp index d2fa09a..e6e53a8 100644 --- a/src/fm/mako_fmgen.cpp +++ b/src/fm/mako_fmgen.cpp @@ -3,14 +3,14 @@ #include #include -const int SAMPLE_RATE = 44100; const int OPNA_CLOCK = 3993600 * 2; -MakoFMgen::MakoFMgen(const uint8_t* data, bool free_data) : +MakoFMgen::MakoFMgen(int rate, const uint8_t* data, bool free_data) : MakoFM(data, free_data), + sample_rate(rate), sync_ms(0), samples_left(0) { - bool ok = opna.Init(OPNA_CLOCK, SAMPLE_RATE, false); + bool ok = opna.Init(OPNA_CLOCK, sample_rate, false); assert(ok); opna.Reset(); } @@ -40,7 +40,7 @@ void MakoFMgen::Sync() { return; int ms = t - sync_ms; sync_ms = t; - Mix(SAMPLE_RATE * ms / 1000); + Mix(sample_rate * ms / 1000); } void MakoFMgen::Mix(int samples) { diff --git a/src/fm/mako_fmgen.h b/src/fm/mako_fmgen.h index 17d5bd8..2b32037 100644 --- a/src/fm/mako_fmgen.h +++ b/src/fm/mako_fmgen.h @@ -6,7 +6,7 @@ class MakoFMgen : private MakoFM { public: - MakoFMgen(const uint8_t* data, bool free_data); + MakoFMgen(int rate, const uint8_t* data, bool free_data); void Process(int16* stream, int len); private: @@ -14,6 +14,7 @@ private: void Sync(); void Mix(int samples); + const int sample_rate; FM::OPNA opna; int sync_ms; int16* output; diff --git a/src/linux/mako.cpp b/src/linux/mako.cpp index 935567c..6972bbd 100644 --- a/src/linux/mako.cpp +++ b/src/linux/mako.cpp @@ -20,6 +20,8 @@ namespace { +const int SAMPLE_RATE = 44100; + std::vector smf; Mix_Music *mix_music; Mix_Chunk *mix_chunk; @@ -53,7 +55,7 @@ MAKO::MAKO(NACT* parent, const MAKOConfig& config) : } if (Mix_Init(mix_init_flags) != mix_init_flags) WARNING("Mix_Init(0x%x) failed", mix_init_flags); - if (Mix_OpenAudio(44100, AUDIO_S16LSB, 2, 4096) < 0) + if (Mix_OpenAudio(SAMPLE_RATE, AUDIO_S16LSB, 2, 4096) < 0) WARNING("Mix_OpenAudio failed: %s", Mix_GetError()); } @@ -113,7 +115,7 @@ void MAKO::play_music(int page) fm_mutex = SDL_CreateMutex(); SDL_LockMutex(fm_mutex); - fm = std::make_unique(data, true); + fm = std::make_unique(SAMPLE_RATE, data, true); Mix_HookMusic(&FMHook, this); SDL_UnlockMutex(fm_mutex); } else {