Use enum class for sound_sample_rate

This commit is contained in:
Kp 2023-01-07 22:17:31 +00:00
parent 60adb6ecd8
commit 5ce4d49004
10 changed files with 28 additions and 22 deletions

View file

@ -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<CArg>
{
bool CtlNoCursor;
@ -150,7 +153,7 @@ struct Arg : prohibit_void_ptr<Arg>
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

View file

@ -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<uint8_t[]>
{
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

View file

@ -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;

View file

@ -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())

View file

@ -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;

View file

@ -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);

View file

@ -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;

View file

@ -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<uint8_t[]>(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
}

View file

@ -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();

View file

@ -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"))
{