From f12abb938e9986bc549a52475982abed36425cf2 Mon Sep 17 00:00:00 2001 From: Kp Date: Sat, 19 Mar 2022 22:55:58 +0000 Subject: [PATCH] Factor out setting mixer parameters - Centralize the default value for the hook function. - Move some static functions to the anonymous namespace. - Define functions for setting the mixer parameters to ADLMIDI mode and SDL_mixer mode, so that these modes can be set from more places. --- common/arch/sdl/digi_mixer_music.cpp | 35 +++++++++++++++++++--------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/common/arch/sdl/digi_mixer_music.cpp b/common/arch/sdl/digi_mixer_music.cpp index 84135f421..62be88a80 100644 --- a/common/arch/sdl/digi_mixer_music.cpp +++ b/common/arch/sdl/digi_mixer_music.cpp @@ -84,11 +84,15 @@ public: using music_pointer::get; }; -} - static current_music_t current_music; static std::vector current_music_hndlbuf; +static void mix_set_music_type_sdlmixer(int loop, void (*const hook_finished_track)()) +{ + Mix_PlayMusic(current_music.get(), (loop ? -1 : 1)); + Mix_HookMusicFinished(hook_finished_track); +} + #if DXX_USE_ADLMIDI static ADL_MIDIPlayer_t current_adlmidi; static ADL_MIDIPlayer *get_adlmidi() @@ -114,6 +118,14 @@ static ADL_MIDIPlayer *get_adlmidi() } static void mix_adlmidi(void *udata, Uint8 *stream, int len); + +static void mix_set_music_type_adl(int loop, void (*const hook_finished_track)()) +{ + ADL_MIDIPlayer *adlmidi = get_adlmidi(); + adl_setLoopEnabled(adlmidi, loop); + Mix_HookMusic(&mix_adlmidi, nullptr); + Mix_HookMusicFinished(hook_finished_track); +} #endif enum class CurrentMusicType @@ -130,11 +142,13 @@ static CurrentMusicType current_music_type = CurrentMusicType::None; static CurrentMusicType load_mus_data(const uint8_t *data, size_t size); static CurrentMusicType load_mus_file(const char *filename); +} + /* * Plays a music file from an absolute path or a relative path */ -int mix_play_file(const char *filename, int loop, void (*hook_finished_track)()) +int mix_play_file(const char *filename, int loop, void (*const entry_hook_finished_track)()) { std::array full_path; const char *fptr; @@ -147,6 +161,7 @@ int mix_play_file(const char *filename, int loop, void (*hook_finished_track)()) if (fptr == NULL) return 0; + const auto hook_finished_track = entry_hook_finished_track ? entry_hook_finished_track : mix_free_music; // It's a .hmp! if (!d_stricmp(fptr, ".hmp")) { @@ -200,18 +215,14 @@ int mix_play_file(const char *filename, int loop, void (*hook_finished_track)()) #if DXX_USE_ADLMIDI case CurrentMusicType::ADLMIDI: { - ADL_MIDIPlayer *adlmidi = get_adlmidi(); - adl_setLoopEnabled(adlmidi, loop); - Mix_HookMusic(&mix_adlmidi, nullptr); - Mix_HookMusicFinished(hook_finished_track ? hook_finished_track : mix_free_music); + mix_set_music_type_adl(loop, hook_finished_track); return 1; } #endif case CurrentMusicType::SDLMixer: { - Mix_PlayMusic(current_music.get(), (loop ? -1 : 1)); - Mix_HookMusicFinished(hook_finished_track ? hook_finished_track : mix_free_music); + mix_set_music_type_sdlmixer(loop, hook_finished_track); return 1; } @@ -274,6 +285,8 @@ void mix_pause_resume_music() Mix_PauseMusic(); } +namespace { + static CurrentMusicType load_mus_data(const uint8_t *data, size_t size) { CurrentMusicType type = CurrentMusicType::None; @@ -289,7 +302,6 @@ static CurrentMusicType load_mus_data(const uint8_t *data, size_t size) if (current_music) type = CurrentMusicType::SDLMixer; } - return type; } @@ -307,7 +319,6 @@ static CurrentMusicType load_mus_file(const char *filename) if (current_music) type = CurrentMusicType::SDLMixer; } - return type; } @@ -337,3 +348,5 @@ static void mix_adlmidi(void *, Uint8 *stream, int len) #endif } + +}