save midi player string to config, fix soundfont name length

This commit is contained in:
Roman Fomin 2024-04-24 16:09:01 +07:00
parent 8be4beea1c
commit 8199d9a226
8 changed files with 56 additions and 19 deletions

View File

@ -2688,6 +2688,7 @@ void D_DoomMain(void)
I_InitController(); I_InitController();
I_InitSound(); I_InitSound();
I_InitMusic(); I_InitMusic();
MN_InitMidiPlayer();
I_Printf(VB_INFO, "NET_Init: Init network subsystem."); I_Printf(VB_INFO, "NET_Init: Init network subsystem.");
NET_Init(); NET_Init();

View File

@ -136,7 +136,10 @@ static void GetSoundFonts(void)
{ {
char *left, *p, *dup_path; char *left, *p, *dup_path;
array_clear(soundfonts); if (array_size(soundfonts))
{
return;
}
// Split into individual dirs within the list. // Split into individual dirs within the list.
dup_path = M_StringDuplicate(soundfont_dir); dup_path = M_StringDuplicate(soundfont_dir);
@ -413,7 +416,7 @@ static const char **I_FL_DeviceList(void)
for (int i = 0; i < array_size(soundfonts); ++i) for (int i = 0; i < array_size(soundfonts); ++i)
{ {
char *name = M_StringDuplicate(M_BaseName(soundfonts[i])); char *name = M_StringDuplicate(M_BaseName(soundfonts[i]));
if (strlen(name) >= NAME_MAX_LENGTH) if (strlen(name) > NAME_MAX_LENGTH)
{ {
name[NAME_MAX_LENGTH] = '\0'; name[NAME_MAX_LENGTH] = '\0';
} }

View File

@ -29,7 +29,6 @@
#include "i_printf.h" #include "i_printf.h"
#include "i_system.h" #include "i_system.h"
#include "m_array.h" #include "m_array.h"
#include "mn_setup.h"
#include "p_mobj.h" #include "p_mobj.h"
#include "sounds.h" #include "sounds.h"
#include "w_wad.h" #include "w_wad.h"
@ -509,13 +508,15 @@ void I_SetSoundModule(int device)
} }
} }
void I_SetMidiPlayer(int device) void I_SetMidiPlayer(int *menu_index)
{ {
if (nomusicparm) if (nomusicparm)
{ {
return; return;
} }
const int device = *menu_index;
if (midi_module) if (midi_module)
{ {
midi_module->I_ShutdownMusic(); midi_module->I_ShutdownMusic();
@ -542,13 +543,20 @@ void I_SetMidiPlayer(int device)
// Fall back the the first module that initializes, device 0. // Fall back the the first module that initializes, device 0.
count_devices = 0;
for (int i = 0; i < arrlen(music_modules); ++i) for (int i = 0; i < arrlen(music_modules); ++i)
{ {
const char **strings = music_modules[i]->I_DeviceList();
if (music_modules[i]->I_InitMusic(0)) if (music_modules[i]->I_InitMusic(0))
{ {
midi_module = music_modules[i]; midi_module = music_modules[i];
*menu_index = count_devices;
return; return;
} }
count_devices += array_size(strings);
} }
I_Error("I_SetMidiPlayer: No music module could be initialized"); I_Error("I_SetMidiPlayer: No music module could be initialized");
@ -568,8 +576,6 @@ boolean I_InitMusic(void)
I_AtExit(I_ShutdownMusic, true); I_AtExit(I_ShutdownMusic, true);
I_SetMidiPlayer(midi_player_menu);
return true; return true;
} }

View File

@ -179,7 +179,7 @@ extern music_module_t music_mid_module;
boolean I_InitMusic(void); boolean I_InitMusic(void);
void I_ShutdownMusic(void); void I_ShutdownMusic(void);
void I_SetMidiPlayer(int device); void I_SetMidiPlayer(int *menu_index);
// Volume. // Volume.
void I_SetMusicVolume(int volume); void I_SetMusicVolume(int volume);

View File

@ -461,6 +461,13 @@ default_t defaults[] = {
"MIDI Player menu index" "MIDI Player menu index"
}, },
{
"midi_player_string",
(config_t *) &midi_player_string, NULL,
{.s = ""}, {0}, string, ss_none, wad_no,
"MIDI Player string"
},
#if defined(HAVE_FLUIDSYNTH) #if defined(HAVE_FLUIDSYNTH)
{ {
"soundfont_dir", "soundfont_dir",

View File

@ -81,6 +81,8 @@ boolean MN_MenuIsShaded(void);
void MN_SetQuickSaveSlot(int slot); void MN_SetQuickSaveSlot(int slot);
void MN_InitMidiPlayer(void);
void MN_InitMenuStrings(void); void MN_InitMenuStrings(void);
boolean MN_StartsWithMapIdentifier(char *str); boolean MN_StartsWithMapIdentifier(char *str);

View File

@ -2048,23 +2048,17 @@ static void SetSoundModule(void)
} }
int midi_player_menu; int midi_player_menu;
const char *midi_player_string = "";
static const char **GetMidiDevicesStrings(void)
{
const char **devices = I_DeviceList();
if (midi_player_menu >= array_size(devices))
{
midi_player_menu = 0;
}
return devices;
}
static void SetMidiPlayer(void) static void SetMidiPlayer(void)
{ {
S_StopMusic(); S_StopMusic();
I_SetMidiPlayer(midi_player_menu); I_SetMidiPlayer(&midi_player_menu);
S_SetMusicVolume(snd_MusicVolume); S_SetMusicVolume(snd_MusicVolume);
S_RestartMusic(); S_RestartMusic();
const char **strings = GetStrings(str_midi_player);
midi_player_string = strings[midi_player_menu];
} }
static setup_menu_t gen_settings2[] = { static setup_menu_t gen_settings2[] = {
@ -3801,11 +3795,34 @@ static void UpdateHUDModeStrings(void)
selectstrings[str_hudmode] = GetHUDModeStrings(); selectstrings[str_hudmode] = GetHUDModeStrings();
} }
void MN_InitMidiPlayer(void)
{
const char **devices = I_DeviceList();
for (int i = 0; i < array_size(devices); ++i)
{
if (!strcasecmp(devices[i], midi_player_string))
{
midi_player_menu = i;
break;
}
}
if (midi_player_menu >= array_size(devices))
{
midi_player_menu = 0;
}
I_SetMidiPlayer(&midi_player_menu);
midi_player_string = devices[midi_player_menu];
selectstrings[str_midi_player] = devices;
}
void MN_InitMenuStrings(void) void MN_InitMenuStrings(void)
{ {
UpdateHUDModeStrings(); UpdateHUDModeStrings();
selectstrings[str_resolution_scale] = GetResolutionScaleStrings(); selectstrings[str_resolution_scale] = GetResolutionScaleStrings();
selectstrings[str_midi_player] = GetMidiDevicesStrings();
selectstrings[str_mouse_accel] = GetMouseAccelStrings(); selectstrings[str_mouse_accel] = GetMouseAccelStrings();
} }

View File

@ -93,6 +93,7 @@ void MN_DrawEnemy(void);
extern int resolution_scale; extern int resolution_scale;
extern int midi_player_menu; extern int midi_player_menu;
extern const char *midi_player_string;
///////////////////////////// /////////////////////////////
// //