Move Redbook audio behind DXX_USE_SDL_REDBOOK_AUDIO

Currently, DXX_USE_SDL_REDBOOK_AUDIO is an alias for !SDL2.  However,
this patch enables interested users to readily patch out Redbook even
for SDL1.

References: <https://github.com/dxx-rebirth/dxx-rebirth/issues/82>
This commit is contained in:
Kp 2018-07-14 17:23:15 +00:00
parent f33877d379
commit 20f1934312
5 changed files with 65 additions and 7 deletions

View file

@ -1320,6 +1320,7 @@ static void terminate_handler()
('DXX_MAX_AXES_PER_JOYSTICK', user_settings.max_axes_per_joystick),
('DXX_MAX_BUTTONS_PER_JOYSTICK', user_settings.max_buttons_per_joystick),
('DXX_MAX_HATS_PER_JOYSTICK', user_settings.max_hats_per_joystick),
('DXX_USE_SDL_REDBOOK_AUDIO', int(not sdl2)),
))
context.Display('%s: checking whether to enable joystick support...%s\n' % (self.msgprefix, 'yes' if user_settings.max_joysticks else 'no'))
# SDL2 removed CD-rom support.

View file

@ -1246,8 +1246,17 @@ static int free_help(newmenu *, const d_event &event, newmenu_item *items)
DXX_MENUITEM(VERB, TEXT, "Alt-F2/F3 (\x85-SHIFT-s/o)\t SAVE/LOAD GAME", HELP_AF2_3) \
DXX_MENUITEM(VERB, TEXT, "Alt-Shift-F2/F3 (\x85-s/o)\t Quick Save/Load", HELP_ASF2_3)
#define _DXX_HELP_MENU_PAUSE(VERB) DXX_MENUITEM(VERB, TEXT, "Pause (\x85-P)\t Pause", HELP_PAUSE)
#define _DXX_HELP_MENU_AUDIO(VERB) \
#if DXX_USE_SDL_REDBOOK_AUDIO
#define _DXX_HELP_MENU_AUDIO_REDBOOK(VERB) \
DXX_MENUITEM(VERB, TEXT, "\x85-E\t Eject Audio CD", HELP_ASF9) \
#else
#define _DXX_HELP_MENU_AUDIO_REDBOOK(VERB)
#endif
#define _DXX_HELP_MENU_AUDIO(VERB) \
_DXX_HELP_MENU_AUDIO_REDBOOK(VERB) \
DXX_MENUITEM(VERB, TEXT, "\x85-Up/Down\t Play/Pause " EXT_MUSIC_TEXT, HELP_ASF10) \
DXX_MENUITEM(VERB, TEXT, "\x85-Left/Right\t Previous/Next Song", HELP_ASF11_12)
#define _DXX_HELP_MENU_HINT_CMD_KEY(VERB, PREFIX) \
@ -1260,8 +1269,17 @@ static int free_help(newmenu *, const d_event &event, newmenu_item *items)
DXX_MENUITEM(VERB, TEXT, "Alt-F2/F3\t SAVE/LOAD GAME", HELP_AF2_3) \
DXX_MENUITEM(VERB, TEXT, "Alt-Shift-F2/F3\t Fast Save", HELP_ASF2_3)
#define _DXX_HELP_MENU_PAUSE(VERB) DXX_MENUITEM(VERB, TEXT, TXT_HELP_PAUSE, HELP_PAUSE)
#define _DXX_HELP_MENU_AUDIO(VERB) \
#if DXX_USE_SDL_REDBOOK_AUDIO
#define _DXX_HELP_MENU_AUDIO_REDBOOK(VERB) \
DXX_MENUITEM(VERB, TEXT, "Alt-Shift-F9\t Eject Audio CD", HELP_ASF9) \
#else
#define _DXX_HELP_MENU_AUDIO_REDBOOK(VERB)
#endif
#define _DXX_HELP_MENU_AUDIO(VERB) \
_DXX_HELP_MENU_AUDIO_REDBOOK(VERB) \
DXX_MENUITEM(VERB, TEXT, "Alt-Shift-F10\t Play/Pause " EXT_MUSIC_TEXT, HELP_ASF10) \
DXX_MENUITEM(VERB, TEXT, "Alt-Shift-F11/F12\t Previous/Next Song", HELP_ASF11_12)
#define _DXX_HELP_MENU_HINT_CMD_KEY(VERB, PREFIX)

View file

@ -860,11 +860,13 @@ static window_event_result HandleSystemKey(int key)
*/
case KEY_ALTED + KEY_SHIFTED + KEY_F9:
KEY_MAC(case KEY_COMMAND+KEY_E:)
#if DXX_USE_SDL_REDBOOK_AUDIO
if (GameCfg.MusicType == MUSIC_TYPE_REDBOOK)
{
songs_stop_all();
RBAEjectDisk();
}
#endif
break;
case KEY_ALTED + KEY_SHIFTED + KEY_F10:

View file

@ -358,7 +358,9 @@ window_event_result standard_handler(const d_event &event)
case EVENT_WINDOW_DRAW:
case EVENT_IDLE:
//see if redbook song needs to be restarted
#if DXX_USE_SDL_REDBOOK_AUDIO
RBACheckFinishedHook();
#endif
return window_event_result::handled;
case EVENT_QUIT:

View file

@ -47,7 +47,9 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
int Songs_initialized = 0;
static int Song_playing = -1; // -1 if no song playing, else the Descent song number
#if DXX_USE_SDL_REDBOOK_AUDIO
static int Redbook_playing = 0; // Redbook track num differs from Song_playing. We need this for Redbook repeat hooks.
#endif
bim_song_info *BIMSongs = NULL;
int Num_bim_songs;
@ -61,11 +63,15 @@ void songs_set_volume(int volume)
#ifdef _WIN32
digi_win32_set_midi_volume(volume);
#endif
#if DXX_USE_SDL_REDBOOK_AUDIO
if (GameCfg.MusicType == MUSIC_TYPE_REDBOOK)
{
RBASetVolume(0);
RBASetVolume(volume);
}
#else
(void)volume;
#endif
#if DXX_USE_SDLMIXER
mix_set_music_volume(volume);
#endif
@ -169,12 +175,17 @@ static void songs_init()
GameCfg.MusicType = MUSIC_TYPE_NONE;
}
if (GameCfg.MusicType == MUSIC_TYPE_REDBOOK)
RBAInit();
#if DXX_USE_SDLMIXER
else if (GameCfg.MusicType == MUSIC_TYPE_CUSTOM)
jukebox_load();
switch (GameCfg.MusicType)
{
#if DXX_USE_SDL_REDBOOK_AUDIO
case MUSIC_TYPE_REDBOOK:
RBAInit();
break;
#endif
case MUSIC_TYPE_CUSTOM:
jukebox_load();
break;
}
songs_set_volume(GameCfg.MusicVolume);
}
@ -197,7 +208,9 @@ void songs_stop_all(void)
#ifdef _WIN32
digi_win32_stop_midi_song(); // Stop midi song, if playing
#endif
#if DXX_USE_SDL_REDBOOK_AUDIO
RBAStop();
#endif
#if DXX_USE_SDLMIXER
mix_stop_music();
#endif
@ -210,8 +223,10 @@ void songs_pause(void)
#ifdef _WIN32
digi_win32_pause_midi_song();
#endif
#if DXX_USE_SDL_REDBOOK_AUDIO
if (GameCfg.MusicType == MUSIC_TYPE_REDBOOK)
RBAPause();
#endif
#if DXX_USE_SDLMIXER
mix_pause_music();
#endif
@ -222,8 +237,10 @@ void songs_resume(void)
#ifdef _WIN32
digi_win32_resume_midi_song();
#endif
#if DXX_USE_SDL_REDBOOK_AUDIO
if (GameCfg.MusicType == MUSIC_TYPE_REDBOOK)
RBAResume();
#endif
#if DXX_USE_SDLMIXER
mix_resume_music();
#endif
@ -231,8 +248,10 @@ void songs_resume(void)
void songs_pause_resume(void)
{
#if DXX_USE_SDL_REDBOOK_AUDIO
if (GameCfg.MusicType == MUSIC_TYPE_REDBOOK)
RBAPauseResume();
#endif
#if DXX_USE_SDLMIXER
mix_pause_resume_music();
#endif
@ -244,9 +263,11 @@ void songs_pause_resume(void)
*/
#define D1_MAC_OEM_DISCID 0xde0feb0e // Descent CD that came with the Mac Performa 6400, hope mine isn't scratched [too much]
#if DXX_USE_SDL_REDBOOK_AUDIO
#define REDBOOK_ENDLEVEL_TRACK 4
#define REDBOOK_ENDGAME_TRACK (RBAGetNumberOfTracks())
#define REDBOOK_FIRST_LEVEL_TRACK (songs_have_cd() ? 6 : 1)
#endif
#elif defined(DXX_BUILD_DESCENT_II)
/*
* Some of these have different Track listings!
@ -264,13 +285,16 @@ void songs_pause_resume(void)
#define D2_MAC_DISCID 0xb70ee40e // Macintosh
#define D2_IPLAY_DISCID 0x22115710 // iPlay for Macintosh
#if DXX_USE_SDL_REDBOOK_AUDIO
#define REDBOOK_TITLE_TRACK 2
#define REDBOOK_CREDITS_TRACK 3
#define REDBOOK_FIRST_LEVEL_TRACK (songs_have_cd() ? 4 : 1)
#endif
#endif
// 0 otherwise
namespace dsx {
#if DXX_USE_SDL_REDBOOK_AUDIO
static int songs_have_cd()
{
unsigned long discid;
@ -305,21 +329,26 @@ static int songs_have_cd()
return 0;
}
}
#endif
}
#if defined(DXX_BUILD_DESCENT_I)
#if DXX_USE_SDL_REDBOOK_AUDIO
static void redbook_repeat_func()
{
pause_game_world_time p;
RBAPlayTracks(Redbook_playing, 0, redbook_repeat_func);
}
#endif
#elif defined(DXX_BUILD_DESCENT_II)
#if DXX_USE_SDL_REDBOOK_AUDIO || DXX_USE_SDLMIXER
static void play_credits_track()
{
pause_game_world_time p;
songs_play_song(SONG_CREDITS, 1);
}
#endif
#endif
// play a filename as music, depending on filename extension.
int songs_play_file(const char *filename, int repeat, void (*hook_finished_track)())
@ -374,6 +403,7 @@ int songs_play_song( int songnum, int repeat )
Song_playing = songnum;
break;
}
#if DXX_USE_SDL_REDBOOK_AUDIO
case MUSIC_TYPE_REDBOOK:
{
int num_tracks = RBAGetNumberOfTracks();
@ -425,6 +455,7 @@ int songs_play_song( int songnum, int repeat )
#endif
break;
}
#endif
#if DXX_USE_SDLMIXER
case MUSIC_TYPE_CUSTOM:
{
@ -456,12 +487,14 @@ int songs_play_song( int songnum, int repeat )
}
}
#if DXX_USE_SDL_REDBOOK_AUDIO
static void redbook_first_song_func()
{
pause_game_world_time p;
Song_playing = -1; // Playing Redbook tracks will not modify Song_playing. To repeat we must reset this so songs_play_level_song does not think we want to re-play the same song again.
songs_play_level_song(1, 0);
}
#endif
// play track given by levelnum (depending on the music type and it's playing behaviour) or increment/decrement current track number via offset value
namespace dsx {
@ -493,6 +526,7 @@ int songs_play_level_song( int levelnum, int offset )
}
break;
}
#if DXX_USE_SDL_REDBOOK_AUDIO
case MUSIC_TYPE_REDBOOK:
{
int n_tracks = RBAGetNumberOfTracks();
@ -537,6 +571,7 @@ int songs_play_level_song( int levelnum, int offset )
}
break;
}
#endif
#if DXX_USE_SDLMIXER
case MUSIC_TYPE_CUSTOM:
{