Merge branch 'music-debug' into 'master'

Music debugging, devmode music

See merge request KartKrew/Kart!885
This commit is contained in:
Oni 2023-01-25 00:14:42 +00:00
commit d42fdd0346
16 changed files with 96 additions and 44 deletions

View file

@ -103,7 +103,7 @@ std::optional<float> Gme::loop_point_seconds() const
if (loop_point_ms == -1) if (loop_point_ms == -1)
return std::nullopt; return std::nullopt;
return loop_point_ms / 44100.f; return loop_point_ms / 1000.f;
} }
float Gme::position_seconds() const float Gme::position_seconds() const

View file

@ -314,6 +314,8 @@ public:
return ogg_inst_->position_seconds(); return ogg_inst_->position_seconds();
if (gme_inst_) if (gme_inst_)
return gme_inst_->position_seconds(); return gme_inst_->position_seconds();
if (xmp_inst_)
return xmp_inst_->position_seconds();
return std::nullopt; return std::nullopt;
} }

View file

@ -129,6 +129,16 @@ float Xmp<C>::duration_seconds() const
return static_cast<float>(info.total_time) / 1000.f; return static_cast<float>(info.total_time) / 1000.f;
} }
template <size_t C>
float Xmp<C>::position_seconds() const {
SRB2_ASSERT(instance_ != nullptr);
SRB2_ASSERT(module_loaded_ == true);
xmp_frame_info info;
xmp_get_frame_info(instance_, &info);
return static_cast<float>(info.time) / 1000.f;
}
template <size_t C> template <size_t C>
void Xmp<C>::seek(int position_ms) void Xmp<C>::seek(int position_ms)
{ {

View file

@ -59,6 +59,7 @@ public:
void looping(bool looping) { looping_ = looping; }; void looping(bool looping) { looping_ = looping; };
void reset(); void reset();
float duration_seconds() const; float duration_seconds() const;
float position_seconds() const;
void seek(int position_ms); void seek(int position_ms);
~Xmp(); ~Xmp();

View file

@ -53,6 +53,12 @@ float XmpPlayer<C>::duration_seconds() const
return xmp_.duration_seconds(); return xmp_.duration_seconds();
} }
template <size_t C>
float XmpPlayer<C>::position_seconds() const
{
return xmp_.position_seconds();
}
template <size_t C> template <size_t C>
void XmpPlayer<C>::seek(float position_seconds) void XmpPlayer<C>::seek(float position_seconds)
{ {

View file

@ -39,6 +39,7 @@ public:
void looping(bool looping) { xmp_.looping(looping); } void looping(bool looping) { xmp_.looping(looping); }
void reset() { xmp_.reset(); } void reset() { xmp_.reset(); }
float duration_seconds() const; float duration_seconds() const;
float position_seconds() const;
void seek(float position_seconds); void seek(float position_seconds);
}; };

View file

@ -20,7 +20,6 @@
#include "lua_script.h" // Lua stuff #include "lua_script.h" // Lua stuff
#include "m_cond.h" // Emblem constants #include "m_cond.h" // Emblem constants
#include "v_video.h" // video flags (for lua) #include "v_video.h" // video flags (for lua)
#include "i_sound.h" // musictype_t (for lua)
#include "g_state.h" // gamestate_t (for lua) #include "g_state.h" // gamestate_t (for lua)
#include "r_data.h" // patchalphastyle_t #include "r_data.h" // patchalphastyle_t
#include "k_boss.h" // spottype_t (for lua) #include "k_boss.h" // spottype_t (for lua)
@ -6783,18 +6782,6 @@ struct int_const_s const INT_CONST[] = {
{"MA_NOCUTSCENES",MA_NOCUTSCENES}, {"MA_NOCUTSCENES",MA_NOCUTSCENES},
{"MA_INGAME",MA_INGAME}, {"MA_INGAME",MA_INGAME},
// music types
{"MU_NONE", MU_NONE},
{"MU_WAV", MU_WAV},
{"MU_MOD", MU_MOD},
{"MU_MID", MU_MID},
{"MU_OGG", MU_OGG},
{"MU_MP3", MU_MP3},
{"MU_FLAC", MU_FLAC},
{"MU_GME", MU_GME},
{"MU_MOD_EX", MU_MOD_EX},
{"MU_MID_EX", MU_MID_EX},
// gamestates // gamestates
{"GS_NULL",GS_NULL}, {"GS_NULL",GS_NULL},
{"GS_LEVEL",GS_LEVEL}, {"GS_LEVEL",GS_LEVEL},

View file

@ -564,7 +564,7 @@ typedef enum
DBG_DETAILED = 0x00000002, DBG_DETAILED = 0x00000002,
DBG_PLAYER = 0x00000004, DBG_PLAYER = 0x00000004,
DBG_RENDER = 0x00000008, DBG_RENDER = 0x00000008,
//DBG_NIGHTSBASIC = 0x00000010, // free DBG_MUSIC = 0x00000010,
//DBG_NIGHTS = 0x00000020, // free //DBG_NIGHTS = 0x00000020, // free
DBG_POLYOBJ = 0x00000040, DBG_POLYOBJ = 0x00000040,
DBG_GAMELOGIC = 0x00000080, DBG_GAMELOGIC = 0x00000080,

View file

@ -22,20 +22,6 @@
extern "C" { extern "C" {
#endif #endif
// copied from SDL mixer, plus GME
typedef enum {
MU_NONE,
MU_WAV,
MU_MOD,
MU_MID,
MU_OGG,
MU_MP3,
MU_FLAC,
MU_GME,
MU_MOD_EX, // libopenmpt
MU_MID_EX // Non-native MIDI
} musictype_t;
/** \brief Sound subsystem runing and waiting /** \brief Sound subsystem runing and waiting
*/ */
extern UINT8 sound_started; extern UINT8 sound_started;
@ -139,7 +125,7 @@ void I_ShutdownMusic(void);
// MUSIC PROPERTIES // MUSIC PROPERTIES
/// ------------------------ /// ------------------------
musictype_t I_SongType(void); const char *I_SongType(void);
boolean I_SongPlaying(void); boolean I_SongPlaying(void);
boolean I_SongPaused(void); boolean I_SongPaused(void);

View file

@ -2608,7 +2608,7 @@ static int lib_sMusicType(lua_State *L)
return LUA_ErrInvalid(L, "player_t"); return LUA_ErrInvalid(L, "player_t");
} }
if (!player || P_IsLocalPlayer(player)) if (!player || P_IsLocalPlayer(player))
lua_pushinteger(L, S_MusicType()); lua_pushstring(L, S_MusicType());
else else
lua_pushnil(L); lua_pushnil(L);
return 1; return 1;

View file

@ -690,6 +690,7 @@ struct debugFlagNames_s const debug_flag_names[] =
{"Lua", DBG_LUA}, {"Lua", DBG_LUA},
{"RNG", DBG_RNG}, {"RNG", DBG_RNG},
{"Randomizer", DBG_RNG}, // alt name {"Randomizer", DBG_RNG}, // alt name
{"Music", DBG_MUSIC},
{NULL, 0} {NULL, 0}
}; };

View file

@ -36,6 +36,7 @@
#include "r_fps.h" // R_ResetViewInterpolation in level load #include "r_fps.h" // R_ResetViewInterpolation in level load
#include "s_sound.h" #include "s_sound.h"
#include "i_sound.h" // I_FreeSfx
#include "st_stuff.h" #include "st_stuff.h"
#include "w_wad.h" #include "w_wad.h"
#include "z_zone.h" #include "z_zone.h"

View file

@ -1365,7 +1365,7 @@ int musicdef_volume;
// //
// Find music def by 6 char name // Find music def by 6 char name
// //
static musicdef_t *S_FindMusicDef(const char *name) musicdef_t *S_FindMusicDef(const char *name)
{ {
musicdef_t *def = musicdefstart; musicdef_t *def = musicdefstart;
@ -1702,7 +1702,7 @@ boolean S_MusicNotInFocus(void)
); );
} }
musictype_t S_MusicType(void) const char *S_MusicType(void)
{ {
return I_SongType(); return I_SongType();
} }
@ -2444,8 +2444,6 @@ static inline void PrintMusicDefField(const char *label, const char *field)
static void PrintSongAuthors(const musicdef_t *def) static void PrintSongAuthors(const musicdef_t *def)
{ {
CONS_Printf("Volume: %d/100\n\n", def->volume);
PrintMusicDefField("Title: ", def->title); PrintMusicDefField("Title: ", def->title);
PrintMusicDefField("Author: ", def->author); PrintMusicDefField("Author: ", def->author);

View file

@ -14,7 +14,6 @@
#ifndef __S_SOUND__ #ifndef __S_SOUND__
#define __S_SOUND__ #define __S_SOUND__
#include "i_sound.h" // musictype_t
#include "sounds.h" #include "sounds.h"
#include "m_fixed.h" #include "m_fixed.h"
#include "command.h" #include "command.h"
@ -162,7 +161,7 @@ boolean S_MusicDisabled(void);
boolean S_MusicPlaying(void); boolean S_MusicPlaying(void);
boolean S_MusicPaused(void); boolean S_MusicPaused(void);
boolean S_MusicNotInFocus(void); boolean S_MusicNotInFocus(void);
musictype_t S_MusicType(void); const char *S_MusicType(void);
const char *S_MusicName(void); const char *S_MusicName(void);
boolean S_MusicExists(const char *mname); boolean S_MusicExists(const char *mname);
@ -203,6 +202,7 @@ extern int musicdef_volume;
void S_LoadMusicDefs(UINT16 wadnum); void S_LoadMusicDefs(UINT16 wadnum);
void S_InitMusicDefs(void); void S_InitMusicDefs(void);
musicdef_t *S_FindMusicDef(const char *name);
void S_ShowMusicCredit(void); void S_ShowMusicCredit(void);
// //

View file

@ -375,10 +375,10 @@ void I_ShutdownMusic(void)
// MUSIC PROPERTIES // MUSIC PROPERTIES
/// ------------------------ /// ------------------------
musictype_t I_SongType(void) const char* I_SongType(void)
{ {
if (!music_player) if (!music_player)
return MU_NONE; return nullptr;
SdlAudioLockHandle _; SdlAudioLockHandle _;
@ -386,19 +386,19 @@ musictype_t I_SongType(void)
if (music_type == std::nullopt) if (music_type == std::nullopt)
{ {
return MU_NONE; return nullptr;
} }
switch (*music_type) switch (*music_type)
{ {
case audio::MusicType::kOgg: case audio::MusicType::kOgg:
return MU_OGG; return "OGG";
case audio::MusicType::kGme: case audio::MusicType::kGme:
return MU_GME; return "GME";
case audio::MusicType::kMod: case audio::MusicType::kMod:
return MU_MOD; return "Mod";
default: default:
return MU_NONE; return nullptr;
} }
} }

View file

@ -357,6 +357,60 @@ static INT32 SCR(INT32 r)
// ========================================================================= // =========================================================================
// Devmode information // Devmode information
static void ST_pushDebugString(INT32 *height, const char *string)
{
V_DrawRightAlignedString(320, *height, V_MONOSPACE, string);
*height -= 8;
}
static void ST_pushDebugTimeMS(INT32 *height, const char *label, UINT32 ms)
{
ST_pushDebugString(height, va("%s%02d:%05.2f", label,
ms / 60000, ms % 60000 / 1000.f));
}
static void ST_drawMusicDebug(INT32 *height)
{
char mname[7];
UINT16 mflags; // unused
boolean looping;
const musicdef_t *def;
const char *format;
if (!S_MusicInfo(mname, &mflags, &looping))
{
ST_pushDebugString(height, "Song: <NOTHING>");
return;
}
def = S_FindMusicDef(mname);
format = S_MusicType();
ST_pushDebugTimeMS(height, " Elapsed: ", S_GetMusicPosition());
ST_pushDebugTimeMS(height, looping
? " Loop B: "
: "Duration: ", S_GetMusicLength());
if (looping)
{
ST_pushDebugTimeMS(height, " Loop A: ", S_GetMusicLoopPoint());
}
if (def)
{
ST_pushDebugString(height, va(" Volume: %4d/100", def->volume));
}
if (format)
{
ST_pushDebugString(height, va(" Format: %8s", S_MusicType()));
}
ST_pushDebugString(height, va(" Song: %8s", mname));
}
static void ST_drawDebugInfo(void) static void ST_drawDebugInfo(void)
{ {
INT32 height = 192; INT32 height = 192;
@ -419,6 +473,11 @@ static void ST_drawDebugInfo(void)
height -= 32; height -= 32;
} }
if (cht_debug & DBG_MUSIC)
{
ST_drawMusicDebug(&height);
}
if (cht_debug & DBG_MEMORY) if (cht_debug & DBG_MEMORY)
V_DrawRightAlignedString(320, height, V_MONOSPACE, va("Heap used: %7sKB", sizeu1(Z_TagsUsage(0, INT32_MAX)>>10))); V_DrawRightAlignedString(320, height, V_MONOSPACE, va("Heap used: %7sKB", sizeu1(Z_TagsUsage(0, INT32_MAX)>>10)));
} }