mirror of
https://github.com/fabiangreffrath/woof.git
synced 2025-09-27 23:22:06 -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_InitTimer();
|
||||||
I_InitJoystick();
|
I_InitJoystick();
|
||||||
I_InitSound();
|
I_InitSound();
|
||||||
I_InitMusic(midi_player);
|
I_InitMusic();
|
||||||
|
M_GetMidiDevices();
|
||||||
|
|
||||||
puts("NET_Init: Init network subsystem.");
|
puts("NET_Init: Init network subsystem.");
|
||||||
NET_Init();
|
NET_Init();
|
||||||
|
122
src/i_sound.c
122
src/i_sound.c
@ -715,46 +715,6 @@ static int GetSliceSize(void)
|
|||||||
return 1024;
|
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
|
// 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
|
// haleyjd 04/11/03: don't use music if sfx aren't init'd
|
||||||
// (may be dependent, docs are unclear)
|
// (may be dependent, docs are unclear)
|
||||||
@ -830,26 +828,29 @@ boolean I_InitMusic(int music_module_index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// always initilize SDL music
|
// always initilize SDL music
|
||||||
active_module = &music_sdl_module;
|
music_sdl_module.I_InitMusic(0);
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
I_AtExit(I_ShutdownMusic, true);
|
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;
|
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
|
// Get a list of devices for all music modules. Retrieve the selected device, as
|
||||||
// each module manages and stores its own devices independently.
|
// each module manages and stores its own devices independently.
|
||||||
|
|
||||||
int I_DeviceList(const char *devices[], int size, int music_module_index,
|
int I_DeviceList(const char *devices[], int size, int *current_device)
|
||||||
int *current_device)
|
|
||||||
{
|
{
|
||||||
int i, accum;
|
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;
|
music_modules[i].num_devices = numdev;
|
||||||
|
|
||||||
if (i == music_module_index)
|
if (midi_player == i)
|
||||||
{
|
{
|
||||||
*current_device = accum + curdev;
|
*current_device = accum + curdev;
|
||||||
}
|
}
|
||||||
|
@ -110,12 +110,14 @@ typedef struct
|
|||||||
int (*I_DeviceList)(const char *devices[], int size, int *current_device);
|
int (*I_DeviceList)(const char *devices[], int size, int *current_device);
|
||||||
} music_module_t;
|
} music_module_t;
|
||||||
|
|
||||||
boolean I_InitMusic(int device);
|
extern int midi_player;
|
||||||
|
|
||||||
|
boolean I_InitMusic(void);
|
||||||
void I_ShutdownMusic(void);
|
void I_ShutdownMusic(void);
|
||||||
|
|
||||||
#define DEFAULT_MIDI_DEVICE -1 // use saved music module device
|
#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.
|
// Volume.
|
||||||
void I_SetMusicVolume(int volume);
|
void I_SetMusicVolume(int volume);
|
||||||
@ -139,8 +141,7 @@ void I_StopSong(void *handle);
|
|||||||
// See above (register), then think backwards
|
// See above (register), then think backwards
|
||||||
void I_UnRegisterSong(void *handle);
|
void I_UnRegisterSong(void *handle);
|
||||||
|
|
||||||
int I_DeviceList(const char *devices[], int size, int music_module_index,
|
int I_DeviceList(const char *devices[], int size, int *current_device);
|
||||||
int *current_device);
|
|
||||||
|
|
||||||
// Determine whether memory block is a .mid file
|
// Determine whether memory block is a .mid file
|
||||||
boolean IsMid(byte *mem, int len);
|
boolean IsMid(byte *mem, int len);
|
||||||
|
14
src/m_menu.c
14
src/m_menu.c
@ -3871,11 +3871,9 @@ enum {
|
|||||||
gen1_end2,
|
gen1_end2,
|
||||||
};
|
};
|
||||||
|
|
||||||
int midi_player;
|
|
||||||
|
|
||||||
int midi_player_menu;
|
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)
|
void static M_SmoothLight(void)
|
||||||
{
|
{
|
||||||
@ -3909,7 +3907,7 @@ static void M_ResetGamma(void)
|
|||||||
static void M_SetMidiPlayer(void)
|
static void M_SetMidiPlayer(void)
|
||||||
{
|
{
|
||||||
S_StopMusic();
|
S_StopMusic();
|
||||||
I_SetMidiPlayer(&midi_player, midi_player_menu);
|
I_SetMidiPlayer(midi_player_menu);
|
||||||
S_SetMusicVolume(snd_MusicVolume);
|
S_SetMusicVolume(snd_MusicVolume);
|
||||||
S_RestartMusic();
|
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,
|
int numdev = I_DeviceList(midi_player_menu_strings,
|
||||||
midi_player, &midi_player_menu);
|
MAX_MIDI_PLAYER_MENU_ITEMS - 1, &midi_player_menu);
|
||||||
|
|
||||||
midi_player_menu_strings[numdev] = NULL;
|
midi_player_menu_strings[numdev] = NULL;
|
||||||
}
|
}
|
||||||
@ -6921,8 +6919,6 @@ static void M_GetMidiDevices(void)
|
|||||||
//
|
//
|
||||||
void M_Init(void)
|
void M_Init(void)
|
||||||
{
|
{
|
||||||
M_GetMidiDevices();
|
|
||||||
|
|
||||||
M_InitDefaults(); // killough 11/98
|
M_InitDefaults(); // killough 11/98
|
||||||
currentMenu = &MainDef;
|
currentMenu = &MainDef;
|
||||||
menuactive = 0;
|
menuactive = 0;
|
||||||
|
@ -198,8 +198,8 @@ typedef enum
|
|||||||
extern background_t menu_background;
|
extern background_t menu_background;
|
||||||
extern boolean M_MenuIsShaded(void);
|
extern boolean M_MenuIsShaded(void);
|
||||||
|
|
||||||
extern int midi_player;
|
#define MAX_MIDI_PLAYER_MENU_ITEMS 16
|
||||||
#define MAX_MIDI_PLAYERS 16
|
extern void M_GetMidiDevices(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -2293,7 +2293,7 @@ default_t defaults[] = {
|
|||||||
{
|
{
|
||||||
"midi_player_menu",
|
"midi_player_menu",
|
||||||
(config_t *) &midi_player_menu, NULL,
|
(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"
|
"MIDI Player menu index"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user