From: DeaDDooMER Date: Fri, 24 Apr 2020 08:44:48 +0000 (+0400) Subject: sound: move sound/music configuration to sound driver X-Git-Url: https://deadsoftware.ru/gitweb?p=flatwaifu.git;a=commitdiff_plain;h=4a99fe51561ca331df54512eb25c502d0fcd2b55 sound: move sound/music configuration to sound driver --- diff --git a/src/config.c b/src/config.c index 80c94bf..1980bc6 100644 --- a/src/config.c +++ b/src/config.c @@ -35,15 +35,20 @@ static int ch; const cfg_t *CFG_find_entry (const char *key, const cfg_t *cfg) { assert(key != NULL); - assert(cfg != NULL); - int i = 0; - while (cfg[i].cfg && strcasecmp(cfg[i].cfg, key) != 0) { - i++; + if (cfg != NULL) { + int i = 0; + while (cfg[i].cfg && strcasecmp(cfg[i].cfg, key) != 0) { + i++; + } + return cfg[i].cfg ? &cfg[i] : NULL; + } else { + return NULL; } - return cfg[i].cfg ? &cfg[i] : NULL; } int CFG_update_key (const char *key, const char *value, const cfg_t *cfg) { + assert(key != NULL); + assert(value != NULL); const cfg_t *entry = CFG_find_entry(key, cfg); if (entry != NULL) { void *p = entry->p; @@ -58,6 +63,7 @@ int CFG_update_key (const char *key, const char *value, const cfg_t *cfg) { case Y_KEY: *(int*)p = I_string_to_key(value); break; default: assert(0); // unknown type -> something broken } + //logo("CFG_update_key: [%s] = [%s]\n", key, value); return 1; } else { return 0; @@ -244,9 +250,11 @@ int CFG_update_config (const char *old, const char *new, int n, const cfg_t **cf CFG_close_iterator(); } for (j = 0; j < n; j++) { - i = 0; - while (CFG_write_entry(nf, &cfg[j][i])) { - i++; + if (cfg[j] != NULL) { + i = 0; + while (CFG_write_entry(nf, &cfg[j][i])) { + i++; + } } } fclose(nf); diff --git a/src/game.c b/src/game.c index 8510833..e952a6c 100644 --- a/src/game.c +++ b/src/game.c @@ -96,7 +96,7 @@ static void set_trans(int st) { } void load_game (int n) { - F_freemus(); + MUS_free(); W_init(); F_loadgame(n); set_trans(GS_GAME); @@ -107,13 +107,13 @@ void load_game (int n) { BM_mark(&pl1.o,BM_PLR1); if(_2pl) BM_mark(&pl2.o,BM_PLR2); MN_mark(); - S_startmusic(music_time); + //MUS_start(music_time); + MUS_start(0); } void G_start (void) { char s[8]; - - F_freemus(); + MUS_free(); sprintf(s,"MAP%02u",(word)g_map); F_loadmap(s); set_trans(GS_GAME); @@ -131,7 +131,8 @@ void G_start (void) { BM_mark(&pl1.o,BM_PLR1); if(_2pl) BM_mark(&pl2.o,BM_PLR2); MN_mark(); - S_startmusic(music_time); + //MUS_start(music_time); + MUS_start(0); } #define GGAS_TOTAL (MN__LAST-MN_DEMON+16+10) @@ -263,7 +264,7 @@ void G_act (void) { G_start(); } else { g_st = GS_BVIDEO; - F_freemus(); + MUS_free(); } } #endif @@ -319,7 +320,7 @@ void G_act (void) { if(g_exit==1) { if(G_end_video()) { - F_freemus(); + MUS_free(); g_st=GS_EVIDEO; return; } @@ -330,20 +331,23 @@ inter: case 31: case 32: g_map=16;set_trans(GS_INTER);break; default: ++g_map;set_trans(GS_INTER);break; } - F_freemus(); - if(g_st==GS_INTER) { - F_loadmus("INTERMUS"); - }else {F_loadmus("\x8a\x8e\x8d\x85\x96\x0");if(mus_vol>0) {S_volumemusic(128);} } - S_startmusic(0); + MUS_free(); + if (g_st == GS_INTER) { + MUS_load("INTERMUS"); + } else { + MUS_load("\x8a\x8e\x8d\x85\x96\x0"); + MUS_volume(128); + } + MUS_start(0); }else if(g_exit==2) { switch(g_map) { case 31: g_map=32;set_trans(GS_INTER);break; case 32: g_map=16;set_trans(GS_INTER);break; default: g_map=31;set_trans(GS_INTER);break; } - F_freemus(); - F_loadmus("INTERMUS"); - S_startmusic(0); + MUS_free(); + MUS_load("INTERMUS"); + MUS_start(0); } #ifdef DEMO diff --git a/src/map.c b/src/map.c index dfc7b70..7071dd4 100644 --- a/src/map.c +++ b/src/map.c @@ -47,10 +47,10 @@ static int G_load (FILE *h) { switch (blk.t) { case MB_MUSIC: myfread(g_music, 8, 1, h); - if (music_random) { - F_randmus(g_music); - } - F_loadmus(g_music); + //if (music_random) { + // F_randmus(g_music); + //} + MUS_load(g_music); return 1; } return 0; diff --git a/src/menu.c b/src/menu.c index 639fed9..7286a45 100644 --- a/src/menu.c +++ b/src/menu.c @@ -238,78 +238,27 @@ static const menu_t save_game_menu = { NULL, &save_game_menu_handler }; -static int sound_menu_handler (menu_msg_t *msg, const menu_t *m, void *data, int i) { - static int cur; - enum { VOLUME, __NUM__ }; - static const simple_menu_t sm = { - GM_BIG, "Sound", NULL, - { - { "Volume", NULL }, - } - }; - if (i == VOLUME) { - switch (msg->type) { - case GM_GETENTRY: return GM_init_int0(msg, GM_SCROLLER, 0, 0, 0); - case GM_GETINT: return GM_init_int(msg, snd_vol, 0, 128, 8); - case GM_SETINT: S_volume(msg->integer.i); return 1; - } - } - return simple_menu_handler(msg, i, __NUM__, &sm, &cur); -} - -static const menu_t sound_menu = { - NULL, &sound_menu_handler -}; - -static int music_menu_handler (menu_msg_t *msg, const menu_t *m, void *data, int i) { - static int cur; - enum { VOLUME, MUSIC, __NUM__ }; - static const simple_menu_t sm = { - GM_BIG, "Music", NULL, - { - { "Volume", NULL }, - { "Music: ", NULL }, - } - }; - if (i == VOLUME) { - switch (msg->type) { - case GM_GETENTRY: return GM_init_int0(msg, GM_SCROLLER, 0, 0, 0); - case GM_GETINT: return GM_init_int(msg, mus_vol, 0, 128, 8); - case GM_SETINT: S_volumemusic(msg->integer.i); return 1; - } - } else if (i == MUSIC) { - switch (msg->type) { - case GM_GETSTR: return GM_init_str(msg, g_music, strlen(g_music)); - case GM_SELECT: - F_freemus(); - F_nextmus(g_music); - F_loadmus(g_music); - S_startmusic(music_time * 2); // ??? - return 1; - } - } - return simple_menu_handler(msg, i, __NUM__, &sm, &cur); -} - -static const menu_t music_menu = { - NULL, &music_menu_handler -}; - static int options_menu_handler (menu_msg_t *msg, const menu_t *m, void *data, int i) { static int cur; + const menu_t *mm; enum { VIDEO, SOUND, MUSIC, __NUM__ }; static const simple_menu_t sm = { GM_BIG, "Options", NULL, { { "Video", NULL }, - { "Sound", &sound_menu }, - { "Music", &music_menu }, + { "Sound", NULL }, + { "Music", NULL }, } }; if (msg->type == GM_SELECT) { - if (i == VIDEO) { - const menu_t *mm = R_menu(); - return mm ? GM_push(mm) : 1; + switch (i) { + case VIDEO: mm = R_menu(); break; + case SOUND: mm = S_menu(); break; + case MUSIC: mm = MUS_menu(); break; + default: mm = NULL; + } + if (mm != NULL) { + return GM_push(mm); } } return simple_menu_handler(msg, i, __NUM__, &sm, &cur); @@ -334,7 +283,7 @@ static int exit_menu_handler (menu_msg_t *msg, const menu_t *m, void *data, int } else if (msg->type == GM_SELECT) { switch (i) { case YES: - F_freemus(); + MUS_free(); GM_stop(); Z_sound(S_get(qsnd[myrand(QSND_NUM)]), 255); S_wait(); @@ -656,6 +605,6 @@ void GM_init (void) { msnd4 = Z_getsnd("SWTCHX"); msnd5 = Z_getsnd("SUDI"); msnd6 = Z_getsnd("TUDI"); - F_loadmus("MENU"); - S_startmusic(0); + MUS_load("MENU"); + MUS_start(0); } diff --git a/src/music.h b/src/music.h index ab1d3e7..7681d7f 100644 --- a/src/music.h +++ b/src/music.h @@ -1,18 +1,20 @@ #ifndef MUSIC_H_INCLUDED #define MUSIC_H_INCLUDED -extern short mus_vol; -extern char music_random; -extern int music_time; -extern int music_fade; +#include "menu.h" +#include "system.h" -void S_initmusic (void); -void S_donemusic (void); -void S_startmusic (int time); -void S_stopmusic (void); -void S_volumemusic (int v); -void F_loadmus (char n[8]); -void F_freemus (void); -void S_updatemusic (void); +const cfg_t *MUS_args (void); +const cfg_t *MUS_conf (void); +const menu_t *MUS_menu (void); + +void MUS_init (void); +void MUS_done (void); +void MUS_start (int time); +void MUS_stop (void); +void MUS_volume (int v); +void MUS_load (char n[8]); +void MUS_free (void); +void MUS_update (void); #endif /* MUSIC_H_INCLUDED */ diff --git a/src/openal/sound.c b/src/openal/sound.c index 73d36a4..ef9afda 100644 --- a/src/openal/sound.c +++ b/src/openal/sound.c @@ -41,11 +41,7 @@ typedef struct openal_channel { ALuint source; } openal_channel; -short snd_vol; -short mus_vol; -char music_random; -int music_time; -int music_fade; +static short snd_vol; static ALCdevice *device; static ALCcontext *context; @@ -53,40 +49,94 @@ static ALuint sources[MAX_CHANNELS]; /* Music */ -void S_initmusic (void) { +const cfg_t *MUS_args (void) { + return NULL; +} + +const cfg_t *MUS_conf (void) { + return NULL; +} +const menu_t *MUS_menu (void) { + return NULL; } -void S_donemusic (void) { +void MUS_init (void) { } -void S_startmusic (int time) { +void MUS_done (void) { } -void S_stopmusic (void) { +void MUS_start (int time) { } -void S_volumemusic (int v) { +void MUS_stop (void) { } -void F_loadmus (char n[8]) { +void MUS_volume (int v) { } -void F_freemus (void) { +void MUS_load (char n[8]) { } -void S_updatemusic (void) { +void MUS_free (void) { + +} + +void MUS_update (void) { } /* Sound */ +static int sound_menu_handler (menu_msg_t *msg, const menu_t *m, void *data, int i) { + static int cur; + enum { VOLUME, __NUM__ }; + static const simple_menu_t sm = { + GM_BIG, "Sound", NULL, + { + { "Volume", NULL }, + } + }; + if (i == VOLUME) { + switch (msg->type) { + case GM_GETENTRY: return GM_init_int0(msg, GM_SCROLLER, 0, 0, 0); + case GM_GETINT: return GM_init_int(msg, snd_vol, 0, 128, 8); + case GM_SETINT: S_volume(msg->integer.i); return 1; + } + } + return simple_menu_handler(msg, i, __NUM__, &sm, &cur); +} + +const menu_t *S_menu (void) { + static const menu_t m = { + NULL, &sound_menu_handler + }; + return &m; +} + +const cfg_t *S_args (void) { + static const cfg_t args[] = { + { "sndvol", &snd_vol, Y_WORD }, + { NULL, NULL, 0 } + }; + return args; +} + +const cfg_t *S_conf (void) { + static const cfg_t conf[] = { + { "sound_volume", &snd_vol, Y_WORD }, + { NULL, NULL, 0 } + }; + return conf; +} + static void convert_this_ext (Uint32 src_format, int src_chan, int src_rate, Uint32 dst_format, int dst_chan, int dst_rate, const void *buf, int len, void **maxbuf, int *maxlen) { SDL_AudioCVT cvt; *maxlen = 0; diff --git a/src/save.c b/src/save.c index 4ffb554..1e87b4b 100644 --- a/src/save.c +++ b/src/save.c @@ -135,7 +135,7 @@ static void G_loadgame (FILE *h) { } cheat = myfread8(h); myfread(g_music, 8, 1, h); - F_loadmus(g_music); + MUS_load(g_music); } static void IT_savegame (FILE *h) { diff --git a/src/sdl/main.c b/src/sdl/main.c index 1c16dc3..057c82e 100644 --- a/src/sdl/main.c +++ b/src/sdl/main.c @@ -62,8 +62,7 @@ static const cfg_t arg[] = { {"file", NULL, Y_FILES}, {"cheat", &cheat, Y_SW_ON}, // {"vga", &shot_vga, Y_SW_ON}, - {"sndvol", &snd_vol, Y_WORD}, - {"musvol", &mus_vol, Y_WORD}, +// {"musvol", &mus_vol, Y_WORD}, {"mon", &nomon, Y_SW_OFF}, {"warp", &_warp, Y_BYTE}, // {"config", NULL, cfg_file, Y_STRING}, @@ -72,11 +71,10 @@ static const cfg_t arg[] = { static const cfg_t cfg[] = { // {"screenshot", &shot_vga, Y_SW_ON}, - {"sound_volume", &snd_vol, Y_WORD}, - {"music_volume", &mus_vol, Y_WORD}, - {"music_random", &music_random, Y_SW_ON}, - {"music_time", &music_time, Y_DWORD}, - {"music_fade", &music_fade, Y_DWORD}, +// {"music_volume", &mus_vol, Y_WORD}, +// {"music_random", &music_random, Y_SW_ON}, +// {"music_time", &music_time, Y_DWORD}, +// {"music_fade", &music_fade, Y_DWORD}, {"pl1_left", &pl1.kl, Y_KEY}, {"pl1_right",&pl1.kr, Y_KEY}, {"pl1_up", &pl1.ku, Y_KEY}, @@ -99,19 +97,19 @@ static const cfg_t cfg[] = { }; static void CFG_args (int argc, char **argv) { - const cfg_t *list[] = { arg, R_args() }; - ARG_parse(argc, argv, 2, list); + const cfg_t *list[] = { arg, R_args(), S_args(), MUS_args() }; + ARG_parse(argc, argv, 4, list); } static void CFG_load (void) { - const cfg_t *list[] = { cfg, R_conf() }; - CFG_read_config("default.cfg", 2, list); - CFG_read_config("doom2d.cfg", 2, list); + const cfg_t *list[] = { cfg, R_conf(), S_conf(), MUS_conf() }; + CFG_read_config("default.cfg", 4, list); + CFG_read_config("doom2d.cfg", 4, list); } static void CFG_save (void) { - const cfg_t *list[] = { cfg, R_conf() }; - CFG_update_config("doom2d.cfg", "doom2d.cfg", 2, list, "generated by doom2d, do not modify"); + const cfg_t *list[] = { cfg, R_conf(), S_conf(), MUS_conf() }; + CFG_update_config("doom2d.cfg", "doom2d.cfg", 4, list, "generated by doom2d, do not modify"); } /* --- error.h --- */ @@ -140,8 +138,8 @@ void ERR_failinit (char *s, ...) { void ERR_fatal (char *s, ...) { va_list ap; R_done(); + MUS_done(); S_done(); - S_donemusic(); M_shutdown(); SDL_Quit(); puts("\nКРИТИЧЕСКАЯ ОШИБКА:"); @@ -481,7 +479,7 @@ static void poll_events (void) { static void step (void) { poll_events(); - S_updatemusic(); + MUS_update(); Uint32 t = SDL_GetTicks(); if (t - ticks > DELAY) { ticks = t; @@ -536,7 +534,7 @@ int main (int argc, char *argv[]) { M_startup(); F_allocres(); S_init(); - S_initmusic(); + MUS_init(); R_init(); G_init(); ticks = SDL_GetTicks(); @@ -549,7 +547,7 @@ int main (int argc, char *argv[]) { #endif CFG_save(); R_done(); - S_donemusic(); + MUS_done(); S_done(); M_shutdown(); SDL_Quit(); diff --git a/src/sdl2/main.c b/src/sdl2/main.c index f9eb159..6044bfc 100644 --- a/src/sdl2/main.c +++ b/src/sdl2/main.c @@ -41,8 +41,7 @@ static const cfg_t arg[] = { {"file", NULL, Y_FILES}, {"cheat", &cheat, Y_SW_ON}, // {"vga", &shot_vga, Y_SW_ON}, - {"sndvol", &snd_vol, Y_WORD}, - {"musvol", &mus_vol, Y_WORD}, +// {"musvol", &mus_vol, Y_WORD}, {"mon", &nomon, Y_SW_OFF}, {"warp", &_warp, Y_BYTE}, // {"config", NULL, cfg_file, Y_STRING}, @@ -51,11 +50,10 @@ static const cfg_t arg[] = { static const cfg_t cfg[] = { // {"screenshot", &shot_vga, Y_SW_ON}, - {"sound_volume", &snd_vol, Y_WORD}, - {"music_volume", &mus_vol, Y_WORD}, - {"music_random", &music_random, Y_SW_ON}, - {"music_time", &music_time, Y_DWORD}, - {"music_fade", &music_fade, Y_DWORD}, +// {"music_volume", &mus_vol, Y_WORD}, +// {"music_random", &music_random, Y_SW_ON}, +// {"music_time", &music_time, Y_DWORD}, +// {"music_fade", &music_fade, Y_DWORD}, {"pl1_left", &pl1.kl, Y_KEY}, {"pl1_right",&pl1.kr, Y_KEY}, {"pl1_up", &pl1.ku, Y_KEY}, @@ -78,19 +76,19 @@ static const cfg_t cfg[] = { }; static void CFG_args (int argc, char **argv) { - const cfg_t *list[] = { arg, R_args() }; - ARG_parse(argc, argv, 2, list); + const cfg_t *list[] = { arg, R_args(), S_args(), MUS_args() }; + ARG_parse(argc, argv, 4, list); } static void CFG_load (void) { - const cfg_t *list[] = { cfg, R_conf() }; - CFG_read_config("default.cfg", 2, list); - CFG_read_config("doom2d.cfg", 2, list); + const cfg_t *list[] = { cfg, R_conf(), S_conf(), MUS_conf() }; + CFG_read_config("default.cfg", 4, list); + CFG_read_config("doom2d.cfg", 4, list); } static void CFG_save (void) { - const cfg_t *list[] = { cfg, R_conf() }; - CFG_update_config("doom2d.cfg", "doom2d.cfg", 2, list, "generated by doom2d, do not modify"); + const cfg_t *list[] = { cfg, R_conf(), S_conf(), MUS_conf() }; + CFG_update_config("doom2d.cfg", "doom2d.cfg", 4, list, "generated by doom2d, do not modify"); } /* --- error.h --- */ @@ -119,8 +117,8 @@ void ERR_failinit (char *s, ...) { void ERR_fatal (char *s, ...) { va_list ap; R_done(); + MUS_done(); S_done(); - S_donemusic(); M_shutdown(); SDL_Quit(); puts("\nКРИТИЧЕСКАЯ ОШИБКА:"); @@ -545,7 +543,7 @@ static void poll_events (void) { static void step (void) { poll_events(); - S_updatemusic(); + MUS_update(); Uint32 t = SDL_GetTicks(); if (t - ticks > DELAY) { ticks = t; @@ -599,7 +597,7 @@ int main (int argc, char **argv) { M_startup(); F_allocres(); S_init(); - S_initmusic(); + MUS_init(); R_init(); G_init(); ticks = SDL_GetTicks(); @@ -612,7 +610,7 @@ int main (int argc, char **argv) { #endif CFG_save(); R_done(); - S_donemusic(); + MUS_done(); S_done(); M_shutdown(); SDL_Quit(); diff --git a/src/sdlmixer/sound.c b/src/sdlmixer/sound.c index f8ef47e..ddacddf 100644 --- a/src/sdlmixer/sound.c +++ b/src/sdlmixer/sound.c @@ -28,7 +28,7 @@ typedef struct sdlmixer_snd { Mix_Chunk *c; } sdlmixer_snd; -short snd_vol; // public 0..128 +static short snd_vol; static int devfreq = MIX_DEFAULT_FREQUENCY; static Uint32 devformat = AUDIO_S16SYS; // MIX_DEFAULT_FORMAT @@ -39,45 +39,94 @@ static int devinit; /* music */ -short mus_vol; -char music_random; -int music_time; -int music_fade; +const cfg_t *MUS_args (void) { + return NULL; +} + +const cfg_t *MUS_conf (void) { + return NULL; +} + +const menu_t *MUS_menu (void) { + return NULL; +} -void S_initmusic (void) { +void MUS_init (void) { } -void S_donemusic (void) { +void MUS_done (void) { } -void S_startmusic (int time) { +void MUS_start (int time) { } -void S_stopmusic (void) { +void MUS_stop (void) { } -void S_volumemusic (int v) { +void MUS_volume (int v) { } -void F_loadmus (char n[8]) { +void MUS_load (char n[8]) { } -void F_freemus (void) { +void MUS_free (void) { } -void S_updatemusic (void) { +void MUS_update (void) { } /* Sound */ +static int sound_menu_handler (menu_msg_t *msg, const menu_t *m, void *data, int i) { + static int cur; + enum { VOLUME, __NUM__ }; + static const simple_menu_t sm = { + GM_BIG, "Sound", NULL, + { + { "Volume", NULL }, + } + }; + if (i == VOLUME) { + switch (msg->type) { + case GM_GETENTRY: return GM_init_int0(msg, GM_SCROLLER, 0, 0, 0); + case GM_GETINT: return GM_init_int(msg, snd_vol, 0, 128, 8); + case GM_SETINT: S_volume(msg->integer.i); return 1; + } + } + return simple_menu_handler(msg, i, __NUM__, &sm, &cur); +} + +const menu_t *S_menu (void) { + static const menu_t m = { + NULL, &sound_menu_handler + }; + return &m; +} + +const cfg_t *S_args (void) { + static const cfg_t args[] = { + { "sndvol", &snd_vol, Y_WORD }, + { NULL, NULL, 0 } + }; + return args; +} + +const cfg_t *S_conf (void) { + static const cfg_t conf[] = { + { "sound_volume", &snd_vol, Y_WORD }, + { NULL, NULL, 0 } + }; + return conf; +} + void S_init (void) { assert(devinit == 0); logo("S_init: initialize sound\n"); diff --git a/src/sound.h b/src/sound.h index 8851b85..81c7dca 100644 --- a/src/sound.h +++ b/src/sound.h @@ -27,12 +27,16 @@ #ifndef SOUND_H_INCLUDED #define SOUND_H_INCLUDED +#include "menu.h" +#include "system.h" + typedef struct { int tag; } snd_t; -// Sound volume 0..128 -extern short snd_vol; +const cfg_t *S_args (void); +const cfg_t *S_conf (void); +const menu_t *S_menu (void); // Get sound handle for resource snd_t *S_get (int id); diff --git a/src/stubsnd/sound.c b/src/stubsnd/sound.c index 58435f1..b47ba0c 100644 --- a/src/stubsnd/sound.c +++ b/src/stubsnd/sound.c @@ -2,49 +2,66 @@ #include "sound.h" #include "music.h" -short snd_vol; +/* Music */ -short mus_vol; -char music_random; -int music_time; -int music_fade; +const cfg_t *MUS_args (void) { + return NULL; +} -/* Music */ +const cfg_t *MUS_conf (void) { + return NULL; +} + +const menu_t *MUS_menu (void) { + return NULL; +} -void S_initmusic (void) { +void MUS_init (void) { } -void S_donemusic (void) { +void MUS_done (void) { } -void S_startmusic (int time) { +void MUS_start (int time) { } -void S_stopmusic (void) { +void MUS_stop (void) { } -void S_volumemusic (int v) { +void MUS_volume (int v) { } -void F_loadmus (char n[8]) { +void MUS_load (char n[8]) { } -void F_freemus (void) { +void MUS_free (void) { } -void S_updatemusic (void) { +void MUS_update (void) { } /* Sound */ +const cfg_t *S_args (void) { + return NULL; +} + +const cfg_t *S_conf (void) { + return NULL; +} + +const menu_t *S_menu (void) { + return NULL; +} + snd_t *S_get (int id) { return NULL; }