mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2024-12-27 21:01:04 +00:00
Minor refactoring and reordering
* I_GetMusicType() -> I_MusicType() * Wrap MIDI volume hack in #ifdef _WIN32 (cherry picked from commit a7d51bf81030c228937a8e759f8f43b85817fce6)
This commit is contained in:
parent
8c78d86c36
commit
5bac836d4c
3 changed files with 174 additions and 161 deletions
|
@ -66,9 +66,9 @@ void I_StartupSound(void);
|
|||
*/
|
||||
void I_ShutdownSound(void);
|
||||
|
||||
//
|
||||
// SFX I/O
|
||||
//
|
||||
/// ------------------------
|
||||
/// SFX I/O
|
||||
/// ------------------------
|
||||
|
||||
/** \brief Starts a sound in a particular sound channel.
|
||||
\param id sfxid
|
||||
|
@ -120,13 +120,9 @@ void I_UpdateSoundParams(INT32 handle, UINT8 vol, UINT8 sep, UINT8 pitch);
|
|||
*/
|
||||
void I_SetSfxVolume(UINT8 volume);
|
||||
|
||||
//
|
||||
// MUSIC I/O
|
||||
//
|
||||
|
||||
musictype_t I_GetMusicType(void);
|
||||
boolean I_MusicPlaying(void);
|
||||
boolean I_MusicPaused(void);
|
||||
/// ------------------------
|
||||
// MUSIC SYSTEM
|
||||
/// ------------------------
|
||||
|
||||
/** \brief Init the music systems
|
||||
*/
|
||||
|
@ -136,33 +132,23 @@ void I_InitMusic(void);
|
|||
*/
|
||||
void I_ShutdownMusic(void);
|
||||
|
||||
/** \brief PAUSE game handling.
|
||||
/// ------------------------
|
||||
// MUSIC PROPERTIES
|
||||
/// ------------------------
|
||||
|
||||
\param handle song handle
|
||||
musictype_t I_MusicType(void);
|
||||
boolean I_MusicPlaying(void);
|
||||
boolean I_MusicPaused(void);
|
||||
|
||||
\return void
|
||||
*/
|
||||
void I_PauseSong(void);
|
||||
/// ------------------------
|
||||
// MUSIC EFFECTS
|
||||
/// ------------------------
|
||||
|
||||
/** \brief RESUME game handling
|
||||
boolean I_SetSongSpeed(float speed);
|
||||
|
||||
\param handle song handle
|
||||
|
||||
\return void
|
||||
*/
|
||||
void I_ResumeSong(void);
|
||||
|
||||
//
|
||||
// MIDI I/O
|
||||
//
|
||||
|
||||
/** \brief The I_SetMIDIMusicVolume function
|
||||
|
||||
\param volume volume to set at
|
||||
|
||||
\return void
|
||||
*/
|
||||
void I_SetMIDIMusicVolume(UINT8 volume);
|
||||
/// ------------------------
|
||||
// MUSIC PLAYBACK
|
||||
/// ------------------------
|
||||
|
||||
/** \brief Registers a song handle to song data.
|
||||
|
||||
|
@ -175,6 +161,15 @@ void I_SetMIDIMusicVolume(UINT8 volume);
|
|||
*/
|
||||
boolean I_LoadSong(char *data, size_t len);
|
||||
|
||||
/** \brief See ::I_LoadSong, then think backwards
|
||||
|
||||
\param handle song handle
|
||||
|
||||
\sa I_LoadSong
|
||||
\todo remove midi handle
|
||||
*/
|
||||
void I_UnloadSong(void);
|
||||
|
||||
/** \brief Called by anything that wishes to start music
|
||||
|
||||
\param handle Song handle
|
||||
|
@ -195,35 +190,35 @@ boolean I_PlaySong(boolean looping);
|
|||
*/
|
||||
void I_StopSong(void);
|
||||
|
||||
/** \brief See ::I_LoadSong, then think backwards
|
||||
/** \brief PAUSE game handling.
|
||||
|
||||
\param handle song handle
|
||||
|
||||
\sa I_LoadSong
|
||||
\todo remove midi handle
|
||||
\return void
|
||||
*/
|
||||
void I_UnloadSong(void);
|
||||
void I_PauseSong(void);
|
||||
|
||||
//
|
||||
// DIGMUSIC I/O
|
||||
//
|
||||
/** \brief RESUME game handling
|
||||
|
||||
boolean I_SetSongSpeed(float speed);
|
||||
\param handle song handle
|
||||
|
||||
boolean I_SetSongTrack(INT32 track);
|
||||
\return void
|
||||
*/
|
||||
void I_ResumeSong(void);
|
||||
|
||||
/** \brief The I_SetDigMusicVolume function
|
||||
/** \brief The I_SetMusicVolume function
|
||||
|
||||
\param volume volume to set at
|
||||
|
||||
\return void
|
||||
*/
|
||||
void I_SetDigMusicVolume(UINT8 volume);
|
||||
void I_SetMusicVolume(UINT8 volume);
|
||||
|
||||
//
|
||||
// CD MUSIC I/O
|
||||
//
|
||||
boolean I_SetSongTrack(INT32 track);
|
||||
|
||||
/// ------------------------
|
||||
// CD MUSIC I/O
|
||||
/// ------------------------
|
||||
|
||||
/** \brief cd music interface
|
||||
*/
|
||||
|
|
|
@ -1249,7 +1249,7 @@ boolean S_MusicPaused(void)
|
|||
|
||||
musictype_t S_MusicType(void)
|
||||
{
|
||||
return I_GetMusicType();
|
||||
return I_MusicType();
|
||||
}
|
||||
|
||||
boolean S_MusicInfo(char *mname, UINT16 *mflags, boolean *looping)
|
||||
|
@ -1274,7 +1274,7 @@ boolean S_MusicExists(const char *mname, boolean checkMIDI, boolean checkDigi)
|
|||
}
|
||||
|
||||
/// ------------------------
|
||||
/// Music Properties
|
||||
/// Music Effects
|
||||
/// ------------------------
|
||||
|
||||
boolean S_SpeedMusic(float speed)
|
||||
|
@ -1283,7 +1283,7 @@ boolean S_SpeedMusic(float speed)
|
|||
}
|
||||
|
||||
/// ------------------------
|
||||
/// Music Routines
|
||||
/// Music Playback
|
||||
/// ------------------------
|
||||
|
||||
static boolean S_LoadMusic(const char *mname)
|
||||
|
@ -1462,7 +1462,7 @@ void S_SetMusicVolume(INT32 digvolume, INT32 seqvolume)
|
|||
digvolume = seqvolume = 31;
|
||||
#endif
|
||||
|
||||
switch(I_GetMusicType())
|
||||
switch(I_MusicType())
|
||||
{
|
||||
case MU_MID:
|
||||
case MU_MOD:
|
||||
|
|
|
@ -72,6 +72,10 @@ static Music_Emu *gme;
|
|||
static INT32 current_track;
|
||||
#endif
|
||||
|
||||
/// ------------------------
|
||||
/// Audio System
|
||||
/// ------------------------
|
||||
|
||||
void I_StartupSound(void)
|
||||
{
|
||||
I_Assert(!sound_started);
|
||||
|
@ -128,6 +132,10 @@ FUNCMATH void I_UpdateSound(void)
|
|||
{
|
||||
}
|
||||
|
||||
/// ------------------------
|
||||
/// SFX
|
||||
/// ------------------------
|
||||
|
||||
// this is as fast as I can possibly make it.
|
||||
// sorry. more asm needed.
|
||||
static Mix_Chunk *ds2chunk(void *stream)
|
||||
|
@ -430,11 +438,72 @@ void I_SetSfxVolume(UINT8 volume)
|
|||
sfx_volume = volume;
|
||||
}
|
||||
|
||||
//
|
||||
// Music
|
||||
//
|
||||
/// ------------------------
|
||||
/// Music Hooks
|
||||
/// ------------------------
|
||||
|
||||
musictype_t I_GetMusicType(void)
|
||||
static void music_loop(void)
|
||||
{
|
||||
Mix_PlayMusic(music, 0);
|
||||
Mix_SetMusicPosition(loop_point);
|
||||
}
|
||||
|
||||
#ifdef HAVE_LIBGME
|
||||
static void mix_gme(void *udata, Uint8 *stream, int len)
|
||||
{
|
||||
int i;
|
||||
short *p;
|
||||
|
||||
(void)udata;
|
||||
|
||||
// no gme? no music.
|
||||
if (!gme || gme_track_ended(gme) || songpaused)
|
||||
return;
|
||||
|
||||
// play gme into stream
|
||||
gme_play(gme, len/2, (short *)stream);
|
||||
|
||||
// apply volume to stream
|
||||
for (i = 0, p = (short *)stream; i < len/2; i++, p++)
|
||||
*p = ((INT32)*p) * music_volume*2 / 42;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/// ------------------------
|
||||
/// Music System
|
||||
/// ------------------------
|
||||
|
||||
FUNCMATH void I_InitMusic(void)
|
||||
{
|
||||
#ifdef HAVE_LIBGME
|
||||
gme = NULL;
|
||||
current_track = -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
void I_ShutdownMusic(void)
|
||||
{
|
||||
#ifdef HAVE_LIBGME
|
||||
if (gme)
|
||||
{
|
||||
Mix_HookMusic(NULL, NULL);
|
||||
gme_delete(gme);
|
||||
gme = NULL;
|
||||
}
|
||||
#endif
|
||||
if (!music)
|
||||
return;
|
||||
Mix_HookMusicFinished(NULL);
|
||||
Mix_FreeMusic(music);
|
||||
music = NULL;
|
||||
}
|
||||
|
||||
/// ------------------------
|
||||
/// Music Properties
|
||||
/// ------------------------
|
||||
|
||||
musictype_t I_MusicType(void)
|
||||
{
|
||||
#ifdef HAVE_LIBGME
|
||||
if (gme)
|
||||
|
@ -463,74 +532,9 @@ boolean I_MusicPaused(void)
|
|||
return songpaused;
|
||||
}
|
||||
|
||||
// Music hooks
|
||||
static void music_loop(void)
|
||||
{
|
||||
Mix_PlayMusic(music, 0);
|
||||
Mix_SetMusicPosition(loop_point);
|
||||
}
|
||||
|
||||
#ifdef HAVE_LIBGME
|
||||
static void mix_gme(void *udata, Uint8 *stream, int len)
|
||||
{
|
||||
int i;
|
||||
short *p;
|
||||
|
||||
(void)udata;
|
||||
|
||||
// no gme? no music.
|
||||
if (!gme || gme_track_ended(gme) || songpaused)
|
||||
return;
|
||||
|
||||
// play gme into stream
|
||||
gme_play(gme, len/2, (short *)stream);
|
||||
|
||||
// apply volume to stream
|
||||
for (i = 0, p = (short *)stream; i < len/2; i++, p++)
|
||||
*p = ((INT32)*p) * music_volume*2 / 42;
|
||||
}
|
||||
#endif
|
||||
|
||||
FUNCMATH void I_InitMusic(void)
|
||||
{
|
||||
#ifdef HAVE_LIBGME
|
||||
gme = NULL;
|
||||
current_track = -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
void I_ShutdownMusic(void)
|
||||
{
|
||||
#ifdef HAVE_LIBGME
|
||||
if (gme)
|
||||
{
|
||||
Mix_HookMusic(NULL, NULL);
|
||||
gme_delete(gme);
|
||||
gme = NULL;
|
||||
}
|
||||
#endif
|
||||
if (!music)
|
||||
return;
|
||||
Mix_HookMusicFinished(NULL);
|
||||
Mix_FreeMusic(music);
|
||||
music = NULL;
|
||||
}
|
||||
|
||||
void I_PauseSong(void)
|
||||
{
|
||||
Mix_PauseMusic();
|
||||
songpaused = true;
|
||||
}
|
||||
|
||||
void I_ResumeSong(void)
|
||||
{
|
||||
Mix_ResumeMusic();
|
||||
songpaused = false;
|
||||
}
|
||||
|
||||
//
|
||||
// Digital Music
|
||||
//
|
||||
/// ------------------------
|
||||
/// Music Effects
|
||||
/// ------------------------
|
||||
|
||||
boolean I_SetSongSpeed(float speed)
|
||||
{
|
||||
|
@ -550,40 +554,9 @@ boolean I_SetSongSpeed(float speed)
|
|||
return false;
|
||||
}
|
||||
|
||||
boolean I_SetSongTrack(int track)
|
||||
{
|
||||
#ifdef HAVE_LIBGME
|
||||
if (current_track == track)
|
||||
return false;
|
||||
|
||||
// If the specified track is within the number of tracks playing, then change it
|
||||
if (gme)
|
||||
{
|
||||
SDL_LockAudio();
|
||||
if (track >= 0
|
||||
&& track < gme_track_count(gme))
|
||||
{
|
||||
gme_err_t gme_e = gme_start_track(gme, track);
|
||||
if (gme_e != NULL)
|
||||
{
|
||||
CONS_Alert(CONS_ERROR, "GME error: %s\n", gme_e);
|
||||
return false;
|
||||
}
|
||||
current_track = track;
|
||||
SDL_UnlockAudio();
|
||||
return true;
|
||||
}
|
||||
SDL_UnlockAudio();
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
(void)track;
|
||||
return false;
|
||||
}
|
||||
|
||||
//
|
||||
// MIDI Music
|
||||
//
|
||||
/// ------------------------
|
||||
/// Music Playback
|
||||
/// ------------------------
|
||||
|
||||
boolean I_LoadSong(char *data, size_t len)
|
||||
{
|
||||
|
@ -731,6 +704,12 @@ boolean I_LoadSong(char *data, size_t len)
|
|||
return true;
|
||||
}
|
||||
|
||||
void I_UnloadSong(void)
|
||||
{
|
||||
Mix_FreeMusic(music);
|
||||
music = NULL;
|
||||
}
|
||||
|
||||
boolean I_PlaySong(boolean looping)
|
||||
{
|
||||
if (!music)
|
||||
|
@ -775,25 +754,64 @@ void I_StopSong(void)
|
|||
music = NULL;
|
||||
}
|
||||
|
||||
void I_PauseSong(void)
|
||||
{
|
||||
Mix_PauseMusic();
|
||||
songpaused = true;
|
||||
}
|
||||
|
||||
void I_ResumeSong(void)
|
||||
{
|
||||
Mix_ResumeMusic();
|
||||
songpaused = false;
|
||||
}
|
||||
|
||||
void I_SetMusicVolume(UINT8 volume)
|
||||
{
|
||||
if (!music)
|
||||
return;
|
||||
|
||||
if (I_GetMusicType() == MU_MID)
|
||||
#ifdef _WIN32
|
||||
if (I_MusicType() == MU_MID)
|
||||
// HACK: Until we stop using native MIDI,
|
||||
// disable volume changes
|
||||
music_volume = 31;
|
||||
else
|
||||
#endif
|
||||
music_volume = volume;
|
||||
|
||||
Mix_VolumeMusic((UINT32)music_volume*128/31);
|
||||
}
|
||||
|
||||
void I_UnloadSong(void)
|
||||
boolean I_SetSongTrack(int track)
|
||||
{
|
||||
Mix_FreeMusic(music);
|
||||
music = NULL;
|
||||
#ifdef HAVE_LIBGME
|
||||
if (current_track == track)
|
||||
return false;
|
||||
|
||||
// If the specified track is within the number of tracks playing, then change it
|
||||
if (gme)
|
||||
{
|
||||
SDL_LockAudio();
|
||||
if (track >= 0
|
||||
&& track < gme_track_count(gme))
|
||||
{
|
||||
gme_err_t gme_e = gme_start_track(gme, track);
|
||||
if (gme_e != NULL)
|
||||
{
|
||||
CONS_Alert(CONS_ERROR, "GME error: %s\n", gme_e);
|
||||
return false;
|
||||
}
|
||||
current_track = track;
|
||||
SDL_UnlockAudio();
|
||||
return true;
|
||||
}
|
||||
SDL_UnlockAudio();
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
(void)track;
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in a new issue