Added I_GetMusicType and removed midimode variable: other targets

(cherry picked from commit 14b393ab16)
This commit is contained in:
mazmazz 2018-08-23 10:19:04 -04:00
parent 06b7367941
commit 46b53e8bae
5 changed files with 155 additions and 193 deletions

View File

@ -60,6 +60,11 @@ void I_SetSfxVolume(INT32 volume)
// //
UINT8 music_started = 0; UINT8 music_started = 0;
musictype_t I_GetMusicType(void)
{
return MU_NONE;
}
void I_InitMusic(void){} void I_InitMusic(void){}
void I_ShutdownMusic(void){} void I_ShutdownMusic(void){}
@ -99,12 +104,12 @@ boolean I_PlaySong(boolean looping)
return false; return false;
} }
void I_StopSong(INT32 handle) void I_StopSong(void)
{ {
(void)handle; (void)handle;
} }
void I_UnRegisterSong(INT32 handle) void I_UnloadSong(void)
{ {
(void)handle; (void)handle;
} }
@ -115,19 +120,6 @@ void I_UnRegisterSong(INT32 handle)
UINT8 digmusic_started = 0; UINT8 digmusic_started = 0;
void I_InitDigMusic(void){}
void I_ShutdownDigMusic(void){}
boolean I_StartDigSong(const char *musicname, INT32 looping)
{
(void)musicname;
(void)looping;
return false;
}
void I_StopDigSong(void){}
void I_SetDigMusicVolume(INT32 volume) void I_SetDigMusicVolume(INT32 volume)
{ {
(void)volume; (void)volume;
@ -137,4 +129,4 @@ boolean I_SetSongSpeed(float speed)
{ {
(void)speed; (void)speed;
return false; return false;
} }

View File

@ -322,6 +322,13 @@ static int islooping=0;
static int musicdies=-1; static int musicdies=-1;
UINT8 music_started=0; UINT8 music_started=0;
musictype_t I_GetMusicType(void)
{
if (currsong)
return MU_MID;
else
return MU_NONE;
}
/* load_midi_mem: /* load_midi_mem:
* Loads a standard MIDI file from memory, returning a pointer to * Loads a standard MIDI file from memory, returning a pointer to
@ -389,7 +396,7 @@ static MIDI *load_midi_mem(char *mempointer,int *e)
return midi; return midi;
} }
void I_InitMIDIMusic(void) void I_InitMusic(void)
{ {
if (nomidimusic) if (nomidimusic)
return; return;
@ -398,12 +405,12 @@ void I_InitMIDIMusic(void)
music_started = true; music_started = true;
} }
void I_ShutdownMIDIMusic(void) void I_ShutdownMusic(void)
{ {
if ( !music_started ) if ( !music_started )
return; return;
I_StopSong(1); I_StopSong();
music_started=false; music_started=false;
} }
@ -439,7 +446,7 @@ void I_ResumeSong (INT32 handle)
midi_resume(); midi_resume();
} }
void I_StopSong(INT32 handle) void I_StopSong(void)
{ {
handle = 0; handle = 0;
if (nomidimusic) if (nomidimusic)
@ -462,7 +469,7 @@ int I_QrySongPlaying(int handle)
} }
#endif #endif
void I_UnRegisterSong(INT32 handle) void I_UnloadSong(void)
{ {
handle = 0; handle = 0;
if (nomidimusic) if (nomidimusic)
@ -496,20 +503,6 @@ boolean I_LoadSong(char *data, size_t len)
return 1; return 1;
} }
/// \todo Add OGG/MP3 support for dos
boolean I_StartDigSong(const char *musicname, INT32 looping)
{
musicname = NULL;
looping = 0;
//CONS_Printf("I_StartDigSong: Not yet supported under DOS.\n");
return false;
}
void I_StopDigSong(void)
{
// CONS_Printf("I_StopDigSong: Not yet supported under DOS.\n");
}
void I_SetDigMusicVolume(INT32 volume) void I_SetDigMusicVolume(INT32 volume)
{ {
volume = 0; volume = 0;
@ -524,4 +517,4 @@ boolean I_SetSongSpeed(float speed)
{ {
(void)speed; (void)speed;
return false; return false;
} }

View File

@ -61,11 +61,21 @@ void I_SetSfxVolume(UINT8 volume)
// MUSIC I/O // MUSIC I/O
// //
musictype_t I_GetMusicType(void)
{
return MU_NONE;
}
void I_InitMusic(void){} void I_InitMusic(void){}
void I_ShutdownMusic(void){} void I_ShutdownMusic(void){}
void I_PauseSong(INT32 handle) void I_SetMIDIMusicVolume(UINT8 volume)
{
(void)volume;
}
void I_PauseSong(void)
{ {
(void)handle; (void)handle;
} }
@ -93,12 +103,12 @@ boolean I_PlaySong(boolean looping)
return false; return false;
} }
void I_StopSong(INT32 handle) void I_StopSong(void)
{ {
(void)handle; (void)handle;
} }
void I_UnRegisterSong(INT32 handle) void I_UnloadSong(void)
{ {
(void)handle; (void)handle;
} }
@ -107,19 +117,6 @@ void I_UnRegisterSong(INT32 handle)
// DIGMUSIC I/O // DIGMUSIC I/O
// //
void I_InitDigMusic(void){}
void I_ShutdownDigMusic(void){}
boolean I_StartDigSong(const char *musicname, boolean looping)
{
(void)musicname;
(void)looping;
return false;
}
void I_StopDigSong(void){}
void I_SetDigMusicVolume(UINT8 volume) void I_SetDigMusicVolume(UINT8 volume)
{ {
(void)volume; (void)volume;
@ -135,4 +132,4 @@ boolean I_SetSongTrack(int track)
{ {
(void)track; (void)track;
return false; return false;
} }

View File

@ -1313,10 +1313,27 @@ void I_StartupSound(void)
// MUSIC API. // MUSIC API.
// //
void I_ShutdownMIDIMusic(void) musictype_t I_GetMusicType(void)
{ {
nomidimusic = false; #ifdef HAVE_MIXER
if (nodigimusic) I_ShutdownMusic(); #ifdef HAVE_LIBGME
if (gme)
return MU_GME;
else
#endif
if (!music)
return MU_NONE;
else if (Mix_GetMusicType(music) == MUS_MID)
return MU_MID;
else if (Mix_GetMusicType(music) == MUS_MOD || Mix_GetMusicType(music) == MUS_MODPLUG_UNUSED)
return MU_MOD;
else if (Mix_GetMusicType(music) == MUS_MP3 || Mix_GetMusicType(music) == MUS_MP3_MAD_UNUSED)
return MU_MP3;
else
return (musictype_t)Mix_GetMusicType(music);
#else
return MU_NONE
#endif
} }
#ifdef HAVE_LIBGME #ifdef HAVE_LIBGME
@ -1330,12 +1347,6 @@ static void I_ShutdownGMEMusic(void)
} }
#endif #endif
void I_ShutdownDigMusic(void)
{
nodigimusic = false;
if (nomidimusic) I_ShutdownMusic();
}
#ifdef HAVE_MIXER #ifdef HAVE_MIXER
static boolean LoadSong(void *data, size_t lumplength, size_t selectpos) static boolean LoadSong(void *data, size_t lumplength, size_t selectpos)
{ {
@ -1436,8 +1447,8 @@ void I_ShutdownMusic(void)
CONS_Printf("%s", M_GetText("I_ShutdownMusic: ")); CONS_Printf("%s", M_GetText("I_ShutdownMusic: "));
I_UnRegisterSong(0); I_UnloadSong();
I_StopDigSong(); I_StopSong();
Mix_CloseAudio(); Mix_CloseAudio();
#ifdef MIX_INIT #ifdef MIX_INIT
Mix_Quit(); Mix_Quit();
@ -1450,16 +1461,6 @@ void I_ShutdownMusic(void)
#endif #endif
} }
void I_InitMIDIMusic(void)
{
if (nodigimusic) I_InitMusic();
}
void I_InitDigMusic(void)
{
if (nomidimusic) I_InitMusic();
}
void I_InitMusic(void) void I_InitMusic(void)
{ {
#ifdef HAVE_MIXER #ifdef HAVE_MIXER
@ -1639,17 +1640,29 @@ void I_ResumeSong(void)
#endif #endif
} }
void I_StopSong(INT32 handle) void I_StopSong(void)
{ {
(void)handle; I_StopGME();
#ifdef HAVE_MIXER #ifdef HAVE_MIXER
if (nomidimusic || !musicStarted) if (nodigimusic)
return; return;
Mix_FadeOutMusic(MIDIfade);
#ifdef MIXER_POS
if (canlooping)
Mix_HookMusicFinished(NULL);
#endif #endif
Mix_HaltMusic();
while (Mix_PlayingMusic())
;
if (music[1])
Mix_FreeMusic(music[1]);
music[1] = NULL;
LoadSong(NULL, 0, 1);
} }
void I_UnRegisterSong(INT32 handle) void I_UnloadSong(void)
{ {
#ifdef HAVE_MIXER #ifdef HAVE_MIXER
@ -1714,7 +1727,7 @@ static void I_CleanupGME(void *userdata)
static boolean I_StartGMESong(const char *musicname, boolean looping) static boolean I_StartGMESong(const char *musicname, boolean looping)
{ {
#ifdef HAVE_LIBGME #ifdef HAVE_LIBGME
XBOXSTATIC char filename[9]; char filename[9];
void *data; void *data;
lumpnum_t lumpnum; lumpnum_t lumpnum;
size_t lumplength; size_t lumplength;
@ -1769,7 +1782,7 @@ static boolean I_StartGMESong(const char *musicname, boolean looping)
boolean I_StartDigSong(const char *musicname, boolean looping) boolean I_StartDigSong(const char *musicname, boolean looping)
{ {
#ifdef HAVE_MIXER #ifdef HAVE_MIXER
XBOXSTATIC char filename[9]; char filename[9];
void *data; void *data;
lumpnum_t lumpnum; lumpnum_t lumpnum;
size_t lumplength; size_t lumplength;
@ -1786,7 +1799,7 @@ boolean I_StartDigSong(const char *musicname, boolean looping)
lumpnum = W_CheckNumForName(filename); lumpnum = W_CheckNumForName(filename);
I_StopDigSong(); I_StopSong();
if (lumpnum == LUMPERROR) if (lumpnum == LUMPERROR)
{ {
@ -1811,7 +1824,7 @@ boolean I_StartDigSong(const char *musicname, boolean looping)
{ {
size_t scan; size_t scan;
const char *dataum = data; const char *dataum = data;
XBOXSTATIC char looplength[64]; char looplength[64];
UINT32 loopstart = 0; UINT32 loopstart = 0;
UINT8 newcount = 0; UINT8 newcount = 0;
@ -1938,29 +1951,6 @@ static void I_StopGME(void)
#endif #endif
} }
void I_StopDigSong(void)
{
I_StopGME();
#ifdef HAVE_MIXER
if (nodigimusic)
return;
#ifdef MIXER_POS
if (canlooping)
Mix_HookMusicFinished(NULL);
#endif
Mix_HaltMusic();
while (Mix_PlayingMusic())
;
if (music[1])
Mix_FreeMusic(music[1]);
music[1] = NULL;
LoadSong(NULL, 0, 1);
#endif
}
void I_SetDigMusicVolume(UINT8 volume) void I_SetDigMusicVolume(UINT8 volume)
{ {
I_SetMIDIMusicVolume(volume); I_SetMIDIMusicVolume(volume);
@ -1995,4 +1985,4 @@ static void SDLCALL I_FinishMusic(void)
if (Msc_Mutex) SDL_UnlockMutex(Msc_Mutex); if (Msc_Mutex) SDL_UnlockMutex(Msc_Mutex);
} }
#endif #endif
#endif //HAVE_SDL #endif //HAVE_SDL

View File

@ -22,12 +22,10 @@
#define HAVE_ZLIB #define HAVE_ZLIB
#ifndef _MSC_VER #ifndef _MSC_VER
#ifndef _WII
#ifndef _LARGEFILE64_SOURCE #ifndef _LARGEFILE64_SOURCE
#define _LARGEFILE64_SOURCE #define _LARGEFILE64_SOURCE
#endif #endif
#endif #endif
#endif
#ifndef _LFS64_LARGEFILE #ifndef _LFS64_LARGEFILE
#define _LFS64_LARGEFILE #define _LFS64_LARGEFILE
@ -44,7 +42,6 @@
static FMOD_SYSTEM *fsys; static FMOD_SYSTEM *fsys;
static FMOD_SOUND *music_stream; static FMOD_SOUND *music_stream;
static FMOD_CHANNEL *music_channel; static FMOD_CHANNEL *music_channel;
static boolean midimode;
static UINT8 music_volume, midi_volume, sfx_volume; static UINT8 music_volume, midi_volume, sfx_volume;
static INT32 current_track; static INT32 current_track;
@ -446,14 +443,48 @@ void I_SetSfxVolume(UINT8 volume)
// MUSIC // MUSIC
// //
musictype_t I_GetMusicType(void)
{
#ifdef HAVE_LIBGME
if (gme)
return MU_GME;
#endif
if (!music_stream)
return MU_NONE;
FMOD_SOUND_TYPE type;
if (FMOD_Sound_GetFormat(music_stream, &type, NULL, NULL, NULL) == FMOD_OK)
{
switch(type)
{
case FMOD_SOUND_TYPE_WAV:
return MU_WAV;
case FMOD_SOUND_TYPE_MOD:
return MU_MOD;
case FMOD_SOUND_TYPE_MID:
return MU_MID;
case FMOD_SOUND_TYPE_OGGVORBIS:
return MU_OGG;
case FMOD_SOUND_TYPE_MP3:
return MU_MP3;
case FMOD_SOUND_TYPE_FLAC:
return MU_FLAC;
default:
return MU_NONE;
}
}
else
return MU_NONE;
}
void I_InitMusic(void) void I_InitMusic(void)
{ {
} }
void I_ShutdownMusic(void) void I_ShutdownMusic(void)
{ {
I_ShutdownDigMusic(); I_StopSong();
I_ShutdownMIDIMusic();
} }
void I_PauseSong(void) void I_PauseSong(void)
@ -470,17 +501,7 @@ void I_ResumeSong(void)
FMR_MUSIC(FMOD_Channel_SetPaused(music_channel, false)); FMR_MUSIC(FMOD_Channel_SetPaused(music_channel, false));
} }
void I_InitDigMusic(void) boolean I_LoadSong(char *data, size_t len)
{
}
void I_ShutdownDigMusic(void)
{
if (!midimode)
I_StopDigSong();
}
boolean I_StartDigSong(const char *musicname, boolean looping)
{ {
char *data; char *data;
size_t len; size_t len;
@ -492,10 +513,7 @@ boolean I_StartDigSong(const char *musicname, boolean looping)
lumpnum = W_CheckNumForName(va("D_%s",musicname)); lumpnum = W_CheckNumForName(va("D_%s",musicname));
if (lumpnum == LUMPERROR) if (lumpnum == LUMPERROR)
return false; return false;
midimode = true;
} }
else
midimode = false;
data = (char *)W_CacheLumpNum(lumpnum, PU_MUSIC); data = (char *)W_CacheLumpNum(lumpnum, PU_MUSIC);
len = W_LumpLength(lumpnum); len = W_LumpLength(lumpnum);
@ -605,8 +623,6 @@ boolean I_StartDigSong(const char *musicname, boolean looping)
{ {
gme_equalizer_t gmeq = {GME_TREBLE, GME_BASS, 0,0,0,0,0,0,0,0}; gme_equalizer_t gmeq = {GME_TREBLE, GME_BASS, 0,0,0,0,0,0,0,0};
Z_Free(data); // We don't need this anymore. Z_Free(data); // We don't need this anymore.
gme_start_track(gme, 0);
current_track = 0;
gme_set_equalizer(gme,&gmeq); gme_set_equalizer(gme,&gmeq);
fmt.format = FMOD_SOUND_FORMAT_PCM16; fmt.format = FMOD_SOUND_FORMAT_PCM16;
fmt.defaultfrequency = 44100; fmt.defaultfrequency = 44100;
@ -616,32 +632,21 @@ boolean I_StartDigSong(const char *musicname, boolean looping)
fmt.pcmreadcallback = GMEReadCallback; fmt.pcmreadcallback = GMEReadCallback;
fmt.userdata = gme; fmt.userdata = gme;
FMR(FMOD_System_CreateStream(fsys, NULL, FMOD_OPENUSER | (looping ? FMOD_LOOP_NORMAL : 0), &fmt, &music_stream)); FMR(FMOD_System_CreateStream(fsys, NULL, FMOD_OPENUSER | (looping ? FMOD_LOOP_NORMAL : 0), &fmt, &music_stream));
FMR(FMOD_System_PlaySound(fsys, FMOD_CHANNEL_FREE, music_stream, false, &music_channel));
FMR(FMOD_Channel_SetVolume(music_channel, music_volume / 31.0));
FMR(FMOD_Channel_SetPriority(music_channel, 0));
return true; return true;
} }
#endif #endif
fmt.length = len; fmt.length = len;
FMOD_RESULT e = FMOD_System_CreateStream(fsys, data, FMOD_OPENMEMORY_POINT|(looping ? FMOD_LOOP_NORMAL : 0), &fmt, &music_stream);
if (e != FMOD_OK)
{ {
FMOD_RESULT e = FMOD_System_CreateStream(fsys, data, FMOD_OPENMEMORY_POINT|(looping ? FMOD_LOOP_NORMAL : 0), &fmt, &music_stream); if (e == FMOD_ERR_FORMAT)
if (e != FMOD_OK) CONS_Alert(CONS_WARNING, "Failed to play music lump %s due to invalid format.\n", W_CheckNameForNum(lumpnum));
{ else
if (e == FMOD_ERR_FORMAT) FMR(e);
CONS_Alert(CONS_WARNING, "Failed to play music lump %s due to invalid format.\n", W_CheckNameForNum(lumpnum)); return false;
else
FMR(e);
return false;
}
} }
FMR(FMOD_System_PlaySound(fsys, FMOD_CHANNEL_FREE, music_stream, false, &music_channel));
if (midimode)
FMR(FMOD_Channel_SetVolume(music_channel, midi_volume / 31.0));
else
FMR(FMOD_Channel_SetVolume(music_channel, music_volume / 31.0));
FMR(FMOD_Channel_SetPriority(music_channel, 0));
current_track = 0;
// Try to find a loop point in streaming music formats (ogg, mp3) // Try to find a loop point in streaming music formats (ogg, mp3)
FMOD_RESULT e; FMOD_RESULT e;
@ -704,28 +709,15 @@ boolean I_StartDigSong(const char *musicname, boolean looping)
return true; return true;
} }
// No special loop point, but we're playing so it's all good. // No special loop point
return true; return true;
} }
void I_StopDigSong(void)
{
if (music_stream)
FMR(FMOD_Sound_Release(music_stream));
music_stream = NULL;
#ifdef HAVE_LIBGME
if (gme)
gme_delete(gme);
gme = NULL;
#endif
current_track = -1;
}
void I_SetDigMusicVolume(UINT8 volume) void I_SetDigMusicVolume(UINT8 volume)
{ {
// volume is 0 to 31. // volume is 0 to 31.
music_volume = volume; music_volume = volume;
if (!midimode && music_stream) if (I_GetMusicType() != MU_MID && music_stream)
FMR_MUSIC(FMOD_Channel_SetVolume(music_channel, volume / 31.0)); FMR_MUSIC(FMOD_Channel_SetVolume(music_channel, volume / 31.0));
} }
@ -811,57 +803,55 @@ boolean I_SetSongTrack(INT32 track)
// Fuck MIDI. ... Okay fine, you can have your silly D_-only mode. // Fuck MIDI. ... Okay fine, you can have your silly D_-only mode.
// //
void I_InitMIDIMusic(void)
{
}
void I_ShutdownMIDIMusic(void)
{
if (midimode)
I_StopSong(0);
}
void I_SetMIDIMusicVolume(UINT8 volume) void I_SetMIDIMusicVolume(UINT8 volume)
{ {
// volume is 0 to 31. // volume is 0 to 31.
midi_volume = volume; midi_volume = volume;
if (midimode && music_stream) if (I_GetMusicType() != MU_MID && music_stream)
FMR_MUSIC(FMOD_Channel_SetVolume(music_channel, volume / 31.0)); FMR_MUSIC(FMOD_Channel_SetVolume(music_channel, volume / 31.0));
} }
boolean I_PlaySong(boolean looping) boolean I_PlaySong(boolean looping)
{ {
FMOD_CREATESOUNDEXINFO fmt; #ifdef HAVE_LIBGME
memset(&fmt, 0, sizeof(FMOD_CREATESOUNDEXINFO)); if (gme)
fmt.cbsize = sizeof(FMOD_CREATESOUNDEXINFO);
fmt.length = len;
FMR(FMOD_System_CreateStream(fsys, (char *)data, FMOD_OPENMEMORY_POINT, &fmt, &music_stream));
return 1337;
}
boolean I_PlaySong(INT32 handle, boolean looping)
{
if (1337 == handle)
{ {
midimode = true; gme_start_track(gme, 0);
if (looping) current_track = 0;
FMR(FMOD_Sound_SetMode(music_stream, FMOD_LOOP_NORMAL));
FMR(FMOD_System_PlaySound(fsys, FMOD_CHANNEL_FREE, music_stream, false, &music_channel)); FMR(FMOD_System_PlaySound(fsys, FMOD_CHANNEL_FREE, music_stream, false, &music_channel));
FMR_MUSIC(FMOD_Channel_SetVolume(music_channel, midi_volume / 31.0)); FMR(FMOD_Channel_SetVolume(music_channel, music_volume / 31.0));
FMR_MUSIC(FMOD_Channel_SetPriority(music_channel, 0)); FMR(FMOD_Channel_SetPriority(music_channel, 0));
return true;
} }
#endif
FMR(FMOD_System_PlaySound(fsys, FMOD_CHANNEL_FREE, music_stream, false, &music_channel));
if (I_GetMusicType() != MU_MID)
FMR(FMOD_Channel_SetVolume(music_channel, midi_volume / 31.0));
else
FMR(FMOD_Channel_SetVolume(music_channel, music_volume / 31.0));
FMR(FMOD_Channel_SetPriority(music_channel, 0));
current_track = 0;
return true; return true;
} }
void I_StopSong(INT32 handle) void I_StopSong(void)
{ {
I_UnRegisterSong(handle); #ifdef HAVE_LIBGME
if (gme)
gme_delete(gme);
gme = NULL;
#endif
current_track = -1;
I_UnloadSong();
} }
void I_UnRegisterSong(INT32 handle) void I_UnloadSong(void)
{ {
UNREFERENCED_PARAMETER(handle); UNREFERENCED_PARAMETER(handle);
if (music_stream) if (music_stream)
FMR(FMOD_Sound_Release(music_stream)); FMR(FMOD_Sound_Release(music_stream));
music_stream = NULL; music_stream = NULL;
} }