From 5ce4d4900473122fb5dda6200ac421fcdde4d5a1 Mon Sep 17 00:00:00 2001 From: Kp Date: Sat, 7 Jan 2023 22:17:31 +0000 Subject: [PATCH] Use enum class for sound_sample_rate --- common/include/args.h | 5 ++++- common/main/digi.h | 14 +++++++------- similar/arch/sdl/digi_audio.cpp | 4 ++-- similar/arch/sdl/digi_mixer.cpp | 4 ++-- similar/main/ai.cpp | 2 +- similar/main/bmread.cpp | 2 +- similar/main/game.cpp | 4 ++-- similar/main/multi.cpp | 7 +++++-- similar/main/piggy.cpp | 4 ++-- similar/misc/args.cpp | 4 ++-- 10 files changed, 28 insertions(+), 22 deletions(-) diff --git a/common/include/args.h b/common/include/args.h index 6ab404407..25ad001d4 100644 --- a/common/include/args.h +++ b/common/include/args.h @@ -61,6 +61,9 @@ enum SyncGLMethod : uint8_t { #include "pack.h" namespace dcx { + +enum class sound_sample_rate : uint16_t; + struct CArg : prohibit_void_ptr { bool CtlNoCursor; @@ -150,7 +153,7 @@ struct Arg : prohibit_void_ptr bool SysNoMovies; bool GfxSkipHiresMovie; bool GfxSkipHiresGFX; - int SndDigiSampleRate; + sound_sample_rate SndDigiSampleRate; std::string EdiAutoLoad; bool EdiSaveHoardData; bool EdiMacData; // also used for some read routines in non-editor build diff --git a/common/main/digi.h b/common/main/digi.h index d6e7f8062..e84eb7877 100644 --- a/common/main/digi.h +++ b/common/main/digi.h @@ -58,6 +58,13 @@ enum class sound_stack : uint8_t cancel_previous, }; +enum class sound_sample_rate : uint16_t +{ + _11k = 11025, + _22k = 22050, + _44k = 44100, +}; + struct digi_sound_deleter : std::default_delete { game_sound_offset offset = {}; @@ -202,13 +209,6 @@ extern void digi_start_sound_queued( short soundnum, fix volume ); // Following declarations are for the runtime switching system -#define SAMPLE_RATE_11K 11025 -#define SAMPLE_RATE_22K 22050 -#define SAMPLE_RATE_44K 44100 - -#define SDLMIXER_SYSTEM 1 -#define SDLAUDIO_SYSTEM 2 - #define MUSIC_TYPE_NONE 0 #define MUSIC_TYPE_BUILTIN 1 #if DXX_USE_SDL_REDBOOK_AUDIO diff --git a/similar/arch/sdl/digi_audio.cpp b/similar/arch/sdl/digi_audio.cpp index b773988ce..29f46e034 100644 --- a/similar/arch/sdl/digi_audio.cpp +++ b/similar/arch/sdl/digi_audio.cpp @@ -200,12 +200,12 @@ int digi_audio_init() #if defined(DXX_BUILD_DESCENT_I) /* Descent 1 sounds are always 11Khz. */ - WaveSpec.freq = SAMPLE_RATE_11K; + WaveSpec.freq = underlying_value(sound_sample_rate::_11k); #elif defined(DXX_BUILD_DESCENT_II) /* Descent 2 sounds are available in both 11Khz and 22Khz. The user may * pick at program start time which to use. */ - WaveSpec.freq = GameArg.SndDigiSampleRate; + WaveSpec.freq = underlying_value(GameArg.SndDigiSampleRate); #endif //added/changed by Sam Lantinga on 12/01/98 for new SDL version WaveSpec.format = AUDIO_U8; diff --git a/similar/arch/sdl/digi_mixer.cpp b/similar/arch/sdl/digi_mixer.cpp index 00a906f89..1e9f29ff8 100644 --- a/similar/arch/sdl/digi_mixer.cpp +++ b/similar/arch/sdl/digi_mixer.cpp @@ -69,7 +69,7 @@ namespace { * Descent 2 sounds (variously, 11Khz or 22Khz), so the upsample should be * straightforward. */ -constexpr unsigned digi_sample_rate = SAMPLE_RATE_44K; +constexpr auto digi_sample_rate = underlying_value(sound_sample_rate::_44k); enumerated_bitset<64, sound_channel> channels; /* channel management */ @@ -320,7 +320,7 @@ static void mixdigi_convert_sound(const unsigned i) #elif defined(DXX_BUILD_DESCENT_II) Uint16 out_format; Mix_QuerySpec(&out_freq, &out_format, &out_channels); // get current output settings - const auto freq = GameArg.SndDigiSampleRate; + const auto freq = underlying_value(GameArg.SndDigiSampleRate); #endif if (!data.empty()) diff --git a/similar/main/ai.cpp b/similar/main/ai.cpp index 2054436cd..0ff85cfa0 100644 --- a/similar/main/ai.cpp +++ b/similar/main/ai.cpp @@ -2527,7 +2527,7 @@ static int do_robot_dying_frame(const vmobjptridx_t objp, fix64 start_time, fix objp->mtype.phys_info.rotvel.y = (GameTime64 - start_time)/5; objp->mtype.phys_info.rotvel.z = (GameTime64 - start_time)/7; - if (const auto SndDigiSampleRate = GameArg.SndDigiSampleRate) + if (const auto SndDigiSampleRate = underlying_value(GameArg.SndDigiSampleRate)) sound_duration = fixdiv(GameSounds[digi_xlat_sound(death_sound)].length, SndDigiSampleRate); else sound_duration = F1_0; diff --git a/similar/main/bmread.cpp b/similar/main/bmread.cpp index 5d7b501cd..a309c091e 100644 --- a/similar/main/bmread.cpp +++ b/similar/main/bmread.cpp @@ -388,7 +388,7 @@ int ds_load(int skip, const char * filename ) { #if defined(DXX_BUILD_DESCENT_I) snprintf(rawname, sizeof(rawname), "Sounds/%s.raw", fname.data()); #elif defined(DXX_BUILD_DESCENT_II) - snprintf(rawname, sizeof(rawname), "Sounds/%s.%s", fname.data(), (GameArg.SndDigiSampleRate==SAMPLE_RATE_22K) ? "r22" : "raw"); + snprintf(rawname, sizeof(rawname), "Sounds/%s.r%s", fname.data(), (GameArg.SndDigiSampleRate == sound_sample_rate::_22k) ? "22" : "aw"); #endif const auto i = piggy_find_sound(fname); diff --git a/similar/main/game.cpp b/similar/main/game.cpp index 84fa361d5..57ae78e25 100644 --- a/similar/main/game.cpp +++ b/similar/main/game.cpp @@ -1139,8 +1139,8 @@ static inline void do_afterburner_stuff(object_array &) ubyte Last_afterburner_state = 0; fix64 Time_flash_last_played; -#define AFTERBURNER_LOOP_START ((GameArg.SndDigiSampleRate==SAMPLE_RATE_22K)?32027:(32027/2)) //20098 -#define AFTERBURNER_LOOP_END ((GameArg.SndDigiSampleRate==SAMPLE_RATE_22K)?48452:(48452/2)) //25776 +#define AFTERBURNER_LOOP_START ((GameArg.SndDigiSampleRate == sound_sample_rate::_22k)?32027:(32027/2)) //20098 +#define AFTERBURNER_LOOP_END ((GameArg.SndDigiSampleRate == sound_sample_rate::_22k)?48452:(48452/2)) //25776 namespace { static fix Last_afterburner_charge; diff --git a/similar/main/multi.cpp b/similar/main/multi.cpp index 52cc431b4..eebd9eb0d 100644 --- a/similar/main/multi.cpp +++ b/similar/main/multi.cpp @@ -5589,13 +5589,15 @@ void init_hoard_data(d_vclip_array &Vclip) //Load sounds for orb game hoard_resources.snd_idx = Num_sound_files; + const auto SndDigiSampleRate = GameArg.SndDigiSampleRate; range_for (const unsigned i, xrange(4u)) { int len; len = PHYSFSX_readInt(ifile); //get 11k len - if (GameArg.SndDigiSampleRate == SAMPLE_RATE_22K) { + if (SndDigiSampleRate == sound_sample_rate::_22k) + { PHYSFSX_fseek(ifile,len,SEEK_CUR); //skip over 11k sample len = PHYSFSX_readInt(ifile); //get 22k len } @@ -5605,7 +5607,8 @@ void init_hoard_data(d_vclip_array &Vclip) gs.data = digi_sound::allocated_data{std::make_unique(len), game_sound_offset{}}; PHYSFS_read(ifile, gs.data.get(), 1, len); - if (GameArg.SndDigiSampleRate == SAMPLE_RATE_11K) { + if (SndDigiSampleRate == sound_sample_rate::_11k) + { len = PHYSFSX_readInt(ifile); //get 22k len PHYSFSX_fseek(ifile,len,SEEK_CUR); //skip over 22k sample } diff --git a/similar/main/piggy.cpp b/similar/main/piggy.cpp index 0025dd915..a17dbc6b6 100644 --- a/similar/main/piggy.cpp +++ b/similar/main/piggy.cpp @@ -73,7 +73,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #define D1_PALETTE "palette.256" -#define DEFAULT_SNDFILE ((Piggy_hamfile_version < pig_hamfile_version::_3) ? DEFAULT_HAMFILE_SHAREWARE : (GameArg.SndDigiSampleRate == SAMPLE_RATE_22K) ? "descent2.s22" : "descent2.s11") +#define DEFAULT_SNDFILE ((Piggy_hamfile_version < pig_hamfile_version::_3) ? DEFAULT_HAMFILE_SHAREWARE : (GameArg.SndDigiSampleRate == sound_sample_rate::_22k) ? "descent2.s22" : "descent2.s11") #define MAC_ALIEN1_PIGSIZE 5013035 #define MAC_ALIEN2_PIGSIZE 4909916 @@ -997,7 +997,7 @@ int read_hamfile(d_level_shared_robot_info_state &LevelSharedRobotInfoState) if (ham_fp) { shareware = 1; - GameArg.SndDigiSampleRate = SAMPLE_RATE_11K; + GameArg.SndDigiSampleRate = sound_sample_rate::_11k; if (CGameArg.SndDisableSdlMixer) { digi_close(); diff --git a/similar/misc/args.cpp b/similar/misc/args.cpp index ac172123e..f077ee4ef 100644 --- a/similar/misc/args.cpp +++ b/similar/misc/args.cpp @@ -177,7 +177,7 @@ namespace { static void InitGameArg() { #if defined(DXX_BUILD_DESCENT_II) - GameArg.SndDigiSampleRate = SAMPLE_RATE_22K; + GameArg.SndDigiSampleRate = sound_sample_rate::_22k; #endif ::dcx::InitGameArg(); } @@ -266,7 +266,7 @@ static void ReadCmdArgs(Inilist &ini, Arglist &Args) CGameArg.SndNoMusic = true; #if defined(DXX_BUILD_DESCENT_II) else if (!d_stricmp(p, "-sound11k")) - GameArg.SndDigiSampleRate = SAMPLE_RATE_11K; + GameArg.SndDigiSampleRate = sound_sample_rate::_11k; #endif else if (!d_stricmp(p, "-nosdlmixer")) {