mirror of
https://github.com/fabiangreffrath/woof.git
synced 2025-09-27 06:54:23 -04:00
fall back to module 0 device 0
if the music module failed to initialize (#845)
* fall back to `module 0 device 0` if the music module failed to initialize Remove `music_module_index`, use instead `midi_player` - it's global anyway. * add fall back to `I_SetMidiPlayer`
This commit is contained in:
parent
1f39b0dc36
commit
2f27fa739a
@ -2502,7 +2502,8 @@ void D_DoomMain(void)
|
||||
I_InitTimer();
|
||||
I_InitJoystick();
|
||||
I_InitSound();
|
||||
I_InitMusic(midi_player);
|
||||
I_InitMusic();
|
||||
M_GetMidiDevices();
|
||||
|
||||
puts("NET_Init: Init network subsystem.");
|
||||
NET_Init();
|
||||
|
122
src/i_sound.c
122
src/i_sound.c
@ -715,46 +715,6 @@ static int GetSliceSize(void)
|
||||
return 1024;
|
||||
}
|
||||
|
||||
// Set the midi player device. Retrieve the current music module, as it may
|
||||
// change when select a device.
|
||||
|
||||
void I_SetMidiPlayer(int *music_module_index, int device)
|
||||
{
|
||||
int i, accum;
|
||||
|
||||
if (midi_player_module)
|
||||
{
|
||||
midi_player_module->I_ShutdownMusic();
|
||||
midi_player_module = NULL;
|
||||
}
|
||||
|
||||
for (i = 0, accum = 0; i < arrlen(music_modules); ++i)
|
||||
{
|
||||
int num_devices = music_modules[i].num_devices;
|
||||
|
||||
if (device >= accum && device < accum + num_devices)
|
||||
{
|
||||
midi_player_module = music_modules[i].module;
|
||||
*music_module_index = i;
|
||||
device -= accum;
|
||||
break;
|
||||
}
|
||||
|
||||
accum += num_devices;
|
||||
}
|
||||
|
||||
if (midi_player_module)
|
||||
{
|
||||
active_module = midi_player_module;
|
||||
if (!active_module->I_InitMusic(device))
|
||||
{
|
||||
// fall back to SDL on error
|
||||
midi_player_module = NULL;
|
||||
active_module = &music_sdl_module;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// I_InitSound
|
||||
//
|
||||
@ -820,7 +780,45 @@ void I_InitSound(void)
|
||||
}
|
||||
}
|
||||
|
||||
boolean I_InitMusic(int music_module_index)
|
||||
int midi_player; // current music module
|
||||
|
||||
void I_SetMidiPlayer(int device)
|
||||
{
|
||||
int i, accum;
|
||||
|
||||
if (midi_player_module)
|
||||
{
|
||||
midi_player_module->I_ShutdownMusic();
|
||||
midi_player_module = NULL;
|
||||
}
|
||||
|
||||
for (i = 0, accum = 0; i < arrlen(music_modules); ++i)
|
||||
{
|
||||
int num_devices = music_modules[i].num_devices;
|
||||
|
||||
if (device >= accum && device < accum + num_devices)
|
||||
{
|
||||
midi_player_module = music_modules[i].module;
|
||||
midi_player = i;
|
||||
device -= accum;
|
||||
break;
|
||||
}
|
||||
|
||||
accum += num_devices;
|
||||
}
|
||||
|
||||
if (!midi_player_module->I_InitMusic(device))
|
||||
{
|
||||
midi_player_module = music_modules[0].module;
|
||||
if (midi_player_module != &music_sdl_module)
|
||||
{
|
||||
midi_player_module->I_InitMusic(0);
|
||||
}
|
||||
}
|
||||
active_module = midi_player_module;
|
||||
}
|
||||
|
||||
boolean I_InitMusic(void)
|
||||
{
|
||||
// haleyjd 04/11/03: don't use music if sfx aren't init'd
|
||||
// (may be dependent, docs are unclear)
|
||||
@ -830,26 +828,29 @@ boolean I_InitMusic(int music_module_index)
|
||||
}
|
||||
|
||||
// always initilize SDL music
|
||||
active_module = &music_sdl_module;
|
||||
active_module->I_InitMusic(0);
|
||||
|
||||
if (music_module_index >= arrlen(music_modules))
|
||||
{
|
||||
music_module_index = 0;
|
||||
}
|
||||
|
||||
midi_player_module = music_modules[music_module_index].module;
|
||||
if (midi_player_module->I_InitMusic(DEFAULT_MIDI_DEVICE))
|
||||
{
|
||||
active_module = midi_player_module;
|
||||
}
|
||||
else
|
||||
{
|
||||
midi_player_module = NULL;
|
||||
}
|
||||
music_sdl_module.I_InitMusic(0);
|
||||
|
||||
I_AtExit(I_ShutdownMusic, true);
|
||||
|
||||
if (midi_player < arrlen(music_modules))
|
||||
{
|
||||
midi_player_module = music_modules[midi_player].module;
|
||||
if (midi_player_module->I_InitMusic(DEFAULT_MIDI_DEVICE))
|
||||
{
|
||||
active_module = midi_player_module;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Fall back to module 0 device 0.
|
||||
midi_player = 0;
|
||||
midi_player_module = music_modules[0].module;
|
||||
if (midi_player_module != &music_sdl_module)
|
||||
{
|
||||
midi_player_module->I_InitMusic(0);
|
||||
}
|
||||
active_module = midi_player_module;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -929,8 +930,7 @@ void I_UnRegisterSong(void *handle)
|
||||
// Get a list of devices for all music modules. Retrieve the selected device, as
|
||||
// each module manages and stores its own devices independently.
|
||||
|
||||
int I_DeviceList(const char *devices[], int size, int music_module_index,
|
||||
int *current_device)
|
||||
int I_DeviceList(const char *devices[], int size, int *current_device)
|
||||
{
|
||||
int i, accum;
|
||||
|
||||
@ -945,7 +945,7 @@ int I_DeviceList(const char *devices[], int size, int music_module_index,
|
||||
|
||||
music_modules[i].num_devices = numdev;
|
||||
|
||||
if (i == music_module_index)
|
||||
if (midi_player == i)
|
||||
{
|
||||
*current_device = accum + curdev;
|
||||
}
|
||||
|
@ -110,12 +110,14 @@ typedef struct
|
||||
int (*I_DeviceList)(const char *devices[], int size, int *current_device);
|
||||
} music_module_t;
|
||||
|
||||
boolean I_InitMusic(int device);
|
||||
extern int midi_player;
|
||||
|
||||
boolean I_InitMusic(void);
|
||||
void I_ShutdownMusic(void);
|
||||
|
||||
#define DEFAULT_MIDI_DEVICE -1 // use saved music module device
|
||||
|
||||
void I_SetMidiPlayer(int *music_module_index, int device);
|
||||
void I_SetMidiPlayer(int device);
|
||||
|
||||
// Volume.
|
||||
void I_SetMusicVolume(int volume);
|
||||
@ -139,8 +141,7 @@ void I_StopSong(void *handle);
|
||||
// See above (register), then think backwards
|
||||
void I_UnRegisterSong(void *handle);
|
||||
|
||||
int I_DeviceList(const char *devices[], int size, int music_module_index,
|
||||
int *current_device);
|
||||
int I_DeviceList(const char *devices[], int size, int *current_device);
|
||||
|
||||
// Determine whether memory block is a .mid file
|
||||
boolean IsMid(byte *mem, int len);
|
||||
|
14
src/m_menu.c
14
src/m_menu.c
@ -3871,11 +3871,9 @@ enum {
|
||||
gen1_end2,
|
||||
};
|
||||
|
||||
int midi_player;
|
||||
|
||||
int midi_player_menu;
|
||||
|
||||
static const char *midi_player_menu_strings[MAX_MIDI_PLAYERS];
|
||||
static const char *midi_player_menu_strings[MAX_MIDI_PLAYER_MENU_ITEMS];
|
||||
|
||||
void static M_SmoothLight(void)
|
||||
{
|
||||
@ -3909,7 +3907,7 @@ static void M_ResetGamma(void)
|
||||
static void M_SetMidiPlayer(void)
|
||||
{
|
||||
S_StopMusic();
|
||||
I_SetMidiPlayer(&midi_player, midi_player_menu);
|
||||
I_SetMidiPlayer(midi_player_menu);
|
||||
S_SetMusicVolume(snd_MusicVolume);
|
||||
S_RestartMusic();
|
||||
}
|
||||
@ -6908,10 +6906,10 @@ void M_InitHelpScreen()
|
||||
}
|
||||
}
|
||||
|
||||
static void M_GetMidiDevices(void)
|
||||
void M_GetMidiDevices(void)
|
||||
{
|
||||
int numdev = I_DeviceList(midi_player_menu_strings, MAX_MIDI_PLAYERS - 1,
|
||||
midi_player, &midi_player_menu);
|
||||
int numdev = I_DeviceList(midi_player_menu_strings,
|
||||
MAX_MIDI_PLAYER_MENU_ITEMS - 1, &midi_player_menu);
|
||||
|
||||
midi_player_menu_strings[numdev] = NULL;
|
||||
}
|
||||
@ -6921,8 +6919,6 @@ static void M_GetMidiDevices(void)
|
||||
//
|
||||
void M_Init(void)
|
||||
{
|
||||
M_GetMidiDevices();
|
||||
|
||||
M_InitDefaults(); // killough 11/98
|
||||
currentMenu = &MainDef;
|
||||
menuactive = 0;
|
||||
|
@ -198,8 +198,8 @@ typedef enum
|
||||
extern background_t menu_background;
|
||||
extern boolean M_MenuIsShaded(void);
|
||||
|
||||
extern int midi_player;
|
||||
#define MAX_MIDI_PLAYERS 16
|
||||
#define MAX_MIDI_PLAYER_MENU_ITEMS 16
|
||||
extern void M_GetMidiDevices(void);
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -2293,7 +2293,7 @@ default_t defaults[] = {
|
||||
{
|
||||
"midi_player_menu",
|
||||
(config_t *) &midi_player_menu, NULL,
|
||||
{0}, {0, MAX_MIDI_PLAYERS - 1}, number, ss_gen, wad_no,
|
||||
{0}, {0, MAX_MIDI_PLAYER_MENU_ITEMS - 1}, number, ss_gen, wad_no,
|
||||
"MIDI Player menu index"
|
||||
},
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user