mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2025-02-18 01:21:32 +00:00
- some cleanup on music code.
* change the license of the main file because there is no more id-based code here licensed under the GPL. * moved VM interface definition out of the implementation. * moved idmus CCMD out of implementation because it is dependent on Doom level definitions. * moved s_music.cpp into the music folder with the rest of the music code.
This commit is contained in:
parent
56f2b2ac56
commit
4af96bab47
15 changed files with 196 additions and 225 deletions
|
@ -884,7 +884,6 @@ set (PCH_SOURCES
|
||||||
sound/s_sndseq.cpp
|
sound/s_sndseq.cpp
|
||||||
sound/s_doomsound.cpp
|
sound/s_doomsound.cpp
|
||||||
sound/s_sound.cpp
|
sound/s_sound.cpp
|
||||||
sound/s_music.cpp
|
|
||||||
serializer.cpp
|
serializer.cpp
|
||||||
scriptutil.cpp
|
scriptutil.cpp
|
||||||
st_stuff.cpp
|
st_stuff.cpp
|
||||||
|
@ -1097,6 +1096,7 @@ set (PCH_SOURCES
|
||||||
scripting/zscript/ast.cpp
|
scripting/zscript/ast.cpp
|
||||||
scripting/zscript/zcc_compile.cpp
|
scripting/zscript/zcc_compile.cpp
|
||||||
scripting/zscript/zcc_parser.cpp
|
scripting/zscript/zcc_parser.cpp
|
||||||
|
sound/music/music.cpp
|
||||||
sound/music/i_music.cpp
|
sound/music/i_music.cpp
|
||||||
sound/music/i_soundfont.cpp
|
sound/music/i_soundfont.cpp
|
||||||
sound/backend/i_sound.cpp
|
sound/backend/i_sound.cpp
|
||||||
|
|
|
@ -65,6 +65,8 @@
|
||||||
#include "v_video.h"
|
#include "v_video.h"
|
||||||
#include "md5.h"
|
#include "md5.h"
|
||||||
#include "findfile.h"
|
#include "findfile.h"
|
||||||
|
#include "i_music.h"
|
||||||
|
#include "s_music.h"
|
||||||
|
|
||||||
extern FILE *Logfile;
|
extern FILE *Logfile;
|
||||||
extern bool insave;
|
extern bool insave;
|
||||||
|
@ -1084,3 +1086,57 @@ CCMD(r_showcaps)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// CCMD idmus
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
CCMD(idmus)
|
||||||
|
{
|
||||||
|
level_info_t* info;
|
||||||
|
FString map;
|
||||||
|
int l;
|
||||||
|
|
||||||
|
if (!nomusic)
|
||||||
|
{
|
||||||
|
if (argv.argc() > 1)
|
||||||
|
{
|
||||||
|
if (gameinfo.flags & GI_MAPxx)
|
||||||
|
{
|
||||||
|
l = atoi(argv[1]);
|
||||||
|
if (l <= 99)
|
||||||
|
{
|
||||||
|
map = CalcMapName(0, l);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Printf("%s\n", GStrings("STSTR_NOMUS"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
map = CalcMapName(argv[1][0] - '0', argv[1][1] - '0');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((info = FindLevelInfo(map)))
|
||||||
|
{
|
||||||
|
if (info->Music.IsNotEmpty())
|
||||||
|
{
|
||||||
|
S_ChangeMusic(info->Music, info->musicorder);
|
||||||
|
Printf("%s\n", GStrings("STSTR_MUS"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Printf("%s\n", GStrings("STSTR_NOMUS"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Printf("Music is disabled\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1280,7 +1280,7 @@ void C_FullConsole ()
|
||||||
gamestate = GS_FULLCONSOLE;
|
gamestate = GS_FULLCONSOLE;
|
||||||
primaryLevel->Music = "";
|
primaryLevel->Music = "";
|
||||||
S_Start ();
|
S_Start ();
|
||||||
S_StartMusic();
|
S_StopMusic(true);
|
||||||
P_FreeLevelData ();
|
P_FreeLevelData ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -148,6 +148,7 @@ void DrawFullscreenSubtitle(const char *text);
|
||||||
void D_Cleanup();
|
void D_Cleanup();
|
||||||
void FreeSBarInfoScript();
|
void FreeSBarInfoScript();
|
||||||
void I_UpdateWindowTitle();
|
void I_UpdateWindowTitle();
|
||||||
|
void S_ParseMusInfo();
|
||||||
|
|
||||||
// PRIVATE FUNCTION PROTOTYPES ---------------------------------------------
|
// PRIVATE FUNCTION PROTOTYPES ---------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -415,7 +415,14 @@ void P_SetupLevel(FLevelLocals *Level, int position, bool newGame)
|
||||||
|
|
||||||
// Make sure all sounds are stopped before Z_FreeTags.
|
// Make sure all sounds are stopped before Z_FreeTags.
|
||||||
S_Start();
|
S_Start();
|
||||||
S_StartMusic();
|
S_ResetMusic();
|
||||||
|
|
||||||
|
// Don't start the music if loading a savegame, because the music is stored there.
|
||||||
|
// Don't start the music if revisiting a level in a hub for the same reason.
|
||||||
|
if (!primaryLevel->IsReentering())
|
||||||
|
{
|
||||||
|
primaryLevel->SetMusic();
|
||||||
|
}
|
||||||
|
|
||||||
// [RH] clear out the mid-screen message
|
// [RH] clear out the mid-screen message
|
||||||
C_MidPrint(nullptr, nullptr);
|
C_MidPrint(nullptr, nullptr);
|
||||||
|
|
|
@ -56,6 +56,7 @@
|
||||||
#include "c_cvars.h"
|
#include "c_cvars.h"
|
||||||
#include "c_bind.h"
|
#include "c_bind.h"
|
||||||
#include "c_dispatch.h"
|
#include "c_dispatch.h"
|
||||||
|
#include "s_music.h"
|
||||||
|
|
||||||
DVector2 AM_GetPosition();
|
DVector2 AM_GetPosition();
|
||||||
int Net_GetLatency(int *ld, int *ad);
|
int Net_GetLatency(int *ld, int *ad);
|
||||||
|
@ -3435,6 +3436,16 @@ DEFINE_ACTION_FUNCTION(_Console, Printf)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION(DObject, S_ChangeMusic)
|
||||||
|
{
|
||||||
|
PARAM_PROLOGUE;
|
||||||
|
PARAM_STRING(music);
|
||||||
|
PARAM_INT(order);
|
||||||
|
PARAM_BOOL(looping);
|
||||||
|
PARAM_BOOL(force);
|
||||||
|
ACTION_RETURN_BOOL(S_ChangeMusic(music, order, looping, force));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -3619,3 +3630,8 @@ DEFINE_GLOBAL(StatusBar);
|
||||||
|
|
||||||
DEFINE_GLOBAL(Bindings)
|
DEFINE_GLOBAL(Bindings)
|
||||||
DEFINE_GLOBAL(AutomapBindings)
|
DEFINE_GLOBAL(AutomapBindings)
|
||||||
|
|
||||||
|
DEFINE_GLOBAL_NAMED(mus_playing, musplaying);
|
||||||
|
DEFINE_FIELD_X(MusPlayingInfo, MusPlayingInfo, name);
|
||||||
|
DEFINE_FIELD_X(MusPlayingInfo, MusPlayingInfo, baseorder);
|
||||||
|
DEFINE_FIELD_X(MusPlayingInfo, MusPlayingInfo, loop);
|
||||||
|
|
|
@ -45,9 +45,9 @@
|
||||||
#include "c_dispatch.h"
|
#include "c_dispatch.h"
|
||||||
#include "templates.h"
|
#include "templates.h"
|
||||||
#include "stats.h"
|
#include "stats.h"
|
||||||
|
#include "cmdlib.h"
|
||||||
#include "c_cvars.h"
|
#include "c_cvars.h"
|
||||||
#include "c_console.h"
|
#include "c_console.h"
|
||||||
#include "vm.h"
|
|
||||||
#include "v_text.h"
|
#include "v_text.h"
|
||||||
#include "i_sound.h"
|
#include "i_sound.h"
|
||||||
#include "i_soundfont.h"
|
#include "i_soundfont.h"
|
||||||
|
@ -61,9 +61,7 @@ void I_InitSoundFonts();
|
||||||
|
|
||||||
EXTERN_CVAR (Int, snd_samplerate)
|
EXTERN_CVAR (Int, snd_samplerate)
|
||||||
EXTERN_CVAR (Int, snd_mididevice)
|
EXTERN_CVAR (Int, snd_mididevice)
|
||||||
|
EXTERN_CVAR(Float, snd_mastervolume)
|
||||||
static bool ungzip(uint8_t *data, int size, std::vector<uint8_t> &newdata);
|
|
||||||
|
|
||||||
int nomusic = 0;
|
int nomusic = 0;
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -73,7 +71,7 @@ int nomusic = 0;
|
||||||
// Maximum volume of MOD/stream music.
|
// Maximum volume of MOD/stream music.
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
CUSTOM_CVAR (Float, snd_musicvolume, 0.5f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CUSTOM_CVARD(Float, snd_musicvolume, 0.5, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "controls music volume")
|
||||||
{
|
{
|
||||||
if (self < 0.f)
|
if (self < 0.f)
|
||||||
self = 0.f;
|
self = 0.f;
|
||||||
|
@ -100,6 +98,12 @@ CUSTOM_CVAR (Float, snd_musicvolume, 0.5f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CUSTOM_CVARD(Bool, mus_enabled, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "enables/disables music")
|
||||||
|
{
|
||||||
|
if (self) S_RestartMusic();
|
||||||
|
else S_StopMusic(true);
|
||||||
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// Callbacks for the music system.
|
// Callbacks for the music system.
|
||||||
|
@ -214,7 +218,7 @@ static void SetupDMXGUS()
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
void I_InitMusic (void)
|
void I_InitMusic(void)
|
||||||
{
|
{
|
||||||
I_InitSoundFonts();
|
I_InitSoundFonts();
|
||||||
|
|
||||||
|
@ -360,7 +364,7 @@ UNSAFE_CCMD (writewave)
|
||||||
if (source == nullptr) return;
|
if (source == nullptr) return;
|
||||||
|
|
||||||
EMidiDevice dev = MDEV_DEFAULT;
|
EMidiDevice dev = MDEV_DEFAULT;
|
||||||
|
#ifndef ZMUSIC_LITE
|
||||||
if (argv.argc() >= 6)
|
if (argv.argc() >= 6)
|
||||||
{
|
{
|
||||||
if (!stricmp(argv[5], "WildMidi")) dev = MDEV_WILDMIDI;
|
if (!stricmp(argv[5], "WildMidi")) dev = MDEV_WILDMIDI;
|
||||||
|
@ -376,6 +380,7 @@ UNSAFE_CCMD (writewave)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
// We must stop the currently playing music to avoid interference between two synths.
|
// We must stop the currently playing music to avoid interference between two synths.
|
||||||
auto savedsong = mus_playing;
|
auto savedsong = mus_playing;
|
||||||
S_StopMusic(true);
|
S_StopMusic(true);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string>
|
#include "zstring.h"
|
||||||
#include "doomtype.h"
|
#include "tarray.h"
|
||||||
#include "filesystem.h"
|
#include "filesystem.h"
|
||||||
#include "files.h"
|
#include "files.h"
|
||||||
#include "filereadermusicinterface.h"
|
#include "filereadermusicinterface.h"
|
||||||
|
|
|
@ -1,29 +1,11 @@
|
||||||
//-----------------------------------------------------------------------------
|
/*
|
||||||
//
|
**
|
||||||
// Copyright 1993-1996 id Software
|
** music.cpp
|
||||||
// Copyright 1999-2016 Randy Heit
|
**
|
||||||
// Copyright 2002-2016 Christoph Oelckers
|
** music engine
|
||||||
//
|
**
|
||||||
// This program is free software: you can redistribute it and/or modify
|
** Copyright 1999-2016 Randy Heit
|
||||||
// it under the terms of the GNU General Public License as published by
|
** Copyright 2002-2016 Christoph Oelckers
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with this program. If not, see http://www.gnu.org/licenses/
|
|
||||||
//
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// DESCRIPTION: none
|
|
||||||
//
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
/* For code that originates from ZDoom the following applies:
|
|
||||||
**
|
**
|
||||||
**---------------------------------------------------------------------------
|
**---------------------------------------------------------------------------
|
||||||
**
|
**
|
||||||
|
@ -104,10 +86,6 @@ static FPlayList PlayList;
|
||||||
float relative_volume = 1.f;
|
float relative_volume = 1.f;
|
||||||
float saved_relative_volume = 1.0f; // this could be used to implement an ACS FadeMusic function
|
float saved_relative_volume = 1.0f; // this could be used to implement an ACS FadeMusic function
|
||||||
|
|
||||||
DEFINE_GLOBAL_NAMED(mus_playing, musplaying);
|
|
||||||
DEFINE_FIELD_X(MusPlayingInfo, MusPlayingInfo, name);
|
|
||||||
DEFINE_FIELD_X(MusPlayingInfo, MusPlayingInfo, baseorder);
|
|
||||||
DEFINE_FIELD_X(MusPlayingInfo, MusPlayingInfo, loop);
|
|
||||||
|
|
||||||
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
||||||
|
|
||||||
|
@ -257,13 +235,11 @@ void S_UpdateMusic ()
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// S_Start
|
// Resets the music player if music playback was paused.
|
||||||
//
|
//
|
||||||
// Per level startup code. Kills playing sounds at start of level
|
|
||||||
// and starts new music.
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
void S_StartMusic ()
|
void S_ResetMusic ()
|
||||||
{
|
{
|
||||||
// stop the old music if it has been paused.
|
// stop the old music if it has been paused.
|
||||||
// This ensures that the new music is started from the beginning
|
// This ensures that the new music is started from the beginning
|
||||||
|
@ -272,13 +248,6 @@ void S_StartMusic ()
|
||||||
|
|
||||||
// start new music for the level
|
// start new music for the level
|
||||||
MusicPaused = false;
|
MusicPaused = false;
|
||||||
|
|
||||||
// Don't start the music if loading a savegame, because the music is stored there.
|
|
||||||
// Don't start the music if revisiting a level in a hub for the same reason.
|
|
||||||
if (!primaryLevel->IsReentering())
|
|
||||||
{
|
|
||||||
primaryLevel->SetMusic();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -361,6 +330,7 @@ bool S_ChangeMusic (const char *musicname, int order, bool looping, bool force)
|
||||||
mus_playing.LastSong = "";
|
mus_playing.LastSong = "";
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
if (*musicname == '/') musicname++;
|
||||||
|
|
||||||
FString DEH_Music;
|
FString DEH_Music;
|
||||||
if (musicname[0] == '$')
|
if (musicname[0] == '$')
|
||||||
|
@ -460,7 +430,7 @@ bool S_ChangeMusic (const char *musicname, int order, bool looping, bool force)
|
||||||
// shutdown old music
|
// shutdown old music
|
||||||
S_StopMusic (true);
|
S_StopMusic (true);
|
||||||
|
|
||||||
// Just record it if volume is 0
|
// Just record it if volume is 0 or music was disabled
|
||||||
if (snd_musicvolume <= 0)
|
if (snd_musicvolume <= 0)
|
||||||
{
|
{
|
||||||
mus_playing.loop = looping;
|
mus_playing.loop = looping;
|
||||||
|
@ -505,22 +475,10 @@ bool S_ChangeMusic (const char *musicname, int order, bool looping, bool force)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_ACTION_FUNCTION(DObject, S_ChangeMusic)
|
|
||||||
{
|
|
||||||
PARAM_PROLOGUE;
|
|
||||||
PARAM_STRING(music);
|
|
||||||
PARAM_INT(order);
|
|
||||||
PARAM_BOOL(looping);
|
|
||||||
PARAM_BOOL(force);
|
|
||||||
ACTION_RETURN_BOOL(S_ChangeMusic(music, order, looping, force));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// S_RestartMusic
|
// S_RestartMusic
|
||||||
//
|
//
|
||||||
// Must only be called from snd_reset in i_sound.cpp!
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
void S_RestartMusic ()
|
void S_RestartMusic ()
|
||||||
|
@ -613,60 +571,6 @@ void S_StopMusic (bool force)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
// CCMD idmus
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
CCMD (idmus)
|
|
||||||
{
|
|
||||||
level_info_t *info;
|
|
||||||
FString map;
|
|
||||||
int l;
|
|
||||||
|
|
||||||
if (!nomusic)
|
|
||||||
{
|
|
||||||
if (argv.argc() > 1)
|
|
||||||
{
|
|
||||||
if (gameinfo.flags & GI_MAPxx)
|
|
||||||
{
|
|
||||||
l = atoi (argv[1]);
|
|
||||||
if (l <= 99)
|
|
||||||
{
|
|
||||||
map = CalcMapName (0, l);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Printf ("%s\n", GStrings("STSTR_NOMUS"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
map = CalcMapName (argv[1][0] - '0', argv[1][1] - '0');
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( (info = FindLevelInfo (map)) )
|
|
||||||
{
|
|
||||||
if (info->Music.IsNotEmpty())
|
|
||||||
{
|
|
||||||
S_ChangeMusic (info->Music, info->musicorder);
|
|
||||||
Printf ("%s\n", GStrings("STSTR_MUS"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Printf ("%s\n", GStrings("STSTR_NOMUS"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Printf("Music is disabled\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// CCMD changemus
|
// CCMD changemus
|
|
@ -63,7 +63,7 @@
|
||||||
auto ret = ChangeMusicSetting(zmusic_##key, mus_playing.handle,*self); \
|
auto ret = ChangeMusicSetting(zmusic_##key, mus_playing.handle,*self); \
|
||||||
if (ret) S_MIDIDeviceChanged(-1);
|
if (ret) S_MIDIDeviceChanged(-1);
|
||||||
|
|
||||||
|
#ifndef ZMUSIC_LITE
|
||||||
CUSTOM_CVAR(Int, adl_chips_count, 6, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_VIRTUAL)
|
CUSTOM_CVAR(Int, adl_chips_count, 6, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_VIRTUAL)
|
||||||
{
|
{
|
||||||
FORWARD_CVAR(adl_chips_count);
|
FORWARD_CVAR(adl_chips_count);
|
||||||
|
@ -103,7 +103,7 @@ CUSTOM_CVAR(Int, adl_volume_model, 3/*ADLMIDI_VolumeModel_DMX*/, CVAR_ARCHIVE |
|
||||||
{
|
{
|
||||||
FORWARD_CVAR(adl_bank);
|
FORWARD_CVAR(adl_bank);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// Fluidsynth MIDI device
|
// Fluidsynth MIDI device
|
||||||
|
@ -223,6 +223,7 @@ CUSTOM_CVAR(Bool, opl_fullpan, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_VIR
|
||||||
FORWARD_BOOL_CVAR(opl_fullpan);
|
FORWARD_BOOL_CVAR(opl_fullpan);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef ZMUSIC_LITE
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// OPN MIDI device
|
// OPN MIDI device
|
||||||
|
@ -382,12 +383,13 @@ CUSTOM_CVAR(Float, timidity_min_sustain_time, 5000, CVAR_ARCHIVE | CVAR_GLOBALCO
|
||||||
{
|
{
|
||||||
FORWARD_CVAR(timidity_min_sustain_time);
|
FORWARD_CVAR(timidity_min_sustain_time);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
CUSTOM_CVAR(String, timidity_config, GAMENAMELOWERCASE, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_VIRTUAL)
|
CUSTOM_CVAR(String, timidity_config, GAMENAMELOWERCASE, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_VIRTUAL)
|
||||||
{
|
{
|
||||||
FORWARD_STRING_CVAR(timidity_config);
|
FORWARD_STRING_CVAR(timidity_config);
|
||||||
}
|
}
|
||||||
|
#ifndef ZMUSIC_LITE
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// WildMidi
|
// WildMidi
|
||||||
|
@ -408,7 +410,7 @@ CUSTOM_CVAR(Bool, wildmidi_enhanced_resampling, true, CVAR_ARCHIVE | CVAR_GLOBAL
|
||||||
{
|
{
|
||||||
FORWARD_BOOL_CVAR(wildmidi_enhanced_resampling);
|
FORWARD_BOOL_CVAR(wildmidi_enhanced_resampling);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
|
|
|
@ -38,6 +38,8 @@
|
||||||
#include "menu/menu.h"
|
#include "menu/menu.h"
|
||||||
#include <zmusic.h>
|
#include <zmusic.h>
|
||||||
#include "s_music.h"
|
#include "s_music.h"
|
||||||
|
#include "c_cvars.h"
|
||||||
|
#include "printf.h"
|
||||||
|
|
||||||
#define DEF_MIDIDEV -5
|
#define DEF_MIDIDEV -5
|
||||||
|
|
||||||
|
|
72
src/sound/music/s_music.h
Normal file
72
src/sound/music/s_music.h
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
|
||||||
|
#ifndef __S_MUSIC__
|
||||||
|
#define __S_MUSIC__
|
||||||
|
|
||||||
|
#include "zstring.h"
|
||||||
|
#include "tarray.h"
|
||||||
|
#include "name.h"
|
||||||
|
#include <zmusic.h>
|
||||||
|
|
||||||
|
void S_CreateStream();
|
||||||
|
void S_PauseStream(bool pause);
|
||||||
|
void S_StopStream();
|
||||||
|
void S_SetStreamVolume(float vol);
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
void S_InitMusic ();
|
||||||
|
void S_ResetMusic ();
|
||||||
|
|
||||||
|
|
||||||
|
// Start music using <music_name>
|
||||||
|
bool S_StartMusic (const char *music_name);
|
||||||
|
|
||||||
|
// Start music using <music_name>, and set whether looping
|
||||||
|
bool S_ChangeMusic (const char *music_name, int order=0, bool looping=true, bool force=false);
|
||||||
|
|
||||||
|
void S_RestartMusic ();
|
||||||
|
void S_MIDIDeviceChanged(int newdev);
|
||||||
|
|
||||||
|
int S_GetMusic (const char **name);
|
||||||
|
|
||||||
|
// Stops the music for sure.
|
||||||
|
void S_StopMusic (bool force);
|
||||||
|
|
||||||
|
// Stop and resume music, during game PAUSE.
|
||||||
|
void S_PauseMusic ();
|
||||||
|
void S_ResumeMusic ();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Updates music & sounds
|
||||||
|
//
|
||||||
|
void S_UpdateMusic ();
|
||||||
|
|
||||||
|
struct MidiDeviceSetting
|
||||||
|
{
|
||||||
|
int device;
|
||||||
|
FString args;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef TMap<FName, FName> MusicAliasMap;
|
||||||
|
typedef TMap<FName, MidiDeviceSetting> MidiDeviceMap;
|
||||||
|
typedef TMap<FName, float> MusicVolumeMap;
|
||||||
|
|
||||||
|
extern MusicAliasMap MusicAliases;
|
||||||
|
extern MidiDeviceMap MidiDevices;
|
||||||
|
extern MusicVolumeMap MusicVolumes;
|
||||||
|
|
||||||
|
struct MusPlayingInfo
|
||||||
|
{
|
||||||
|
FString name;
|
||||||
|
ZMusic_MusicStream handle;
|
||||||
|
int baseorder;
|
||||||
|
bool loop;
|
||||||
|
FString LastSong; // last music that was played
|
||||||
|
};
|
||||||
|
|
||||||
|
extern MusPlayingInfo mus_playing;
|
||||||
|
|
||||||
|
extern float relative_volume, saved_relative_volume;
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -230,7 +230,7 @@ static const char *SICommandStrings[] =
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static FMusicVolume *MusicVolumes;
|
static FMusicVolume *MusicVolumes_;
|
||||||
static TArray<FSavedPlayerSoundInfo> SavedPlayerSounds;
|
static TArray<FSavedPlayerSoundInfo> SavedPlayerSounds;
|
||||||
|
|
||||||
static int NumPlayerReserves;
|
static int NumPlayerReserves;
|
||||||
|
@ -256,7 +256,7 @@ static uint8_t CurrentPitchMask;
|
||||||
|
|
||||||
float S_GetMusicVolume (const char *music)
|
float S_GetMusicVolume (const char *music)
|
||||||
{
|
{
|
||||||
FMusicVolume *musvol = MusicVolumes;
|
FMusicVolume *musvol = MusicVolumes_;
|
||||||
|
|
||||||
while (musvol != NULL)
|
while (musvol != NULL)
|
||||||
{
|
{
|
||||||
|
@ -744,10 +744,10 @@ void S_ClearSoundData()
|
||||||
soundEngine->Clear();
|
soundEngine->Clear();
|
||||||
|
|
||||||
Ambients.Clear();
|
Ambients.Clear();
|
||||||
while (MusicVolumes != NULL)
|
while (MusicVolumes_ != NULL)
|
||||||
{
|
{
|
||||||
FMusicVolume *me = MusicVolumes;
|
FMusicVolume *me = MusicVolumes_;
|
||||||
MusicVolumes = me->Next;
|
MusicVolumes_ = me->Next;
|
||||||
M_Free(me);
|
M_Free(me);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1184,8 +1184,8 @@ static void S_AddSNDINFO (int lump)
|
||||||
FMusicVolume *mv = (FMusicVolume *)M_Malloc (sizeof(*mv) + musname.Len());
|
FMusicVolume *mv = (FMusicVolume *)M_Malloc (sizeof(*mv) + musname.Len());
|
||||||
mv->Volume = (float)sc.Float;
|
mv->Volume = (float)sc.Float;
|
||||||
strcpy (mv->MusicName, musname);
|
strcpy (mv->MusicName, musname);
|
||||||
mv->Next = MusicVolumes;
|
mv->Next = MusicVolumes_;
|
||||||
MusicVolumes = mv;
|
MusicVolumes_ = mv;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -1412,7 +1412,6 @@ DEFINE_ACTION_FUNCTION(DObject, S_ResumeSound)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CCMD (snd_status)
|
CCMD (snd_status)
|
||||||
{
|
{
|
||||||
GSnd->PrintStatus ();
|
GSnd->PrintStatus ();
|
||||||
|
|
|
@ -1,93 +0,0 @@
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// Copyright 1993-1996 id Software
|
|
||||||
// Copyright 1999-2016 Randy Heit
|
|
||||||
// Copyright 2002-2016 Christoph Oelckers
|
|
||||||
//
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with this program. If not, see http://www.gnu.org/licenses/
|
|
||||||
//
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// DESCRIPTION:
|
|
||||||
// The not so system specific sound interface.
|
|
||||||
//
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef __S_MUSIC__
|
|
||||||
#define __S_MUSIC__
|
|
||||||
|
|
||||||
#include <zmusic.h>
|
|
||||||
#include "doomtype.h"
|
|
||||||
#include "i_soundinternal.h"
|
|
||||||
|
|
||||||
|
|
||||||
void S_ParseMusInfo();
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
void S_InitMusic ();
|
|
||||||
void S_StartMusic ();
|
|
||||||
|
|
||||||
|
|
||||||
// Start music using <music_name>
|
|
||||||
bool S_StartMusic (const char *music_name);
|
|
||||||
|
|
||||||
// Start music using <music_name>, and set whether looping
|
|
||||||
bool S_ChangeMusic (const char *music_name, int order=0, bool looping=true, bool force=false);
|
|
||||||
|
|
||||||
void S_RestartMusic ();
|
|
||||||
void S_MIDIDeviceChanged(int newdev);
|
|
||||||
|
|
||||||
int S_GetMusic (const char **name);
|
|
||||||
|
|
||||||
// Stops the music for sure.
|
|
||||||
void S_StopMusic (bool force);
|
|
||||||
|
|
||||||
// Stop and resume music, during game PAUSE.
|
|
||||||
void S_PauseMusic ();
|
|
||||||
void S_ResumeMusic ();
|
|
||||||
|
|
||||||
//
|
|
||||||
// Updates music & sounds
|
|
||||||
//
|
|
||||||
void S_UpdateMusic ();
|
|
||||||
|
|
||||||
struct MidiDeviceSetting
|
|
||||||
{
|
|
||||||
int device;
|
|
||||||
FString args;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef TMap<FName, FName> MusicAliasMap;
|
|
||||||
typedef TMap<FName, MidiDeviceSetting> MidiDeviceMap;
|
|
||||||
|
|
||||||
extern MusicAliasMap MusicAliases;
|
|
||||||
extern MidiDeviceMap MidiDevices;
|
|
||||||
|
|
||||||
struct MusPlayingInfo
|
|
||||||
{
|
|
||||||
FString name;
|
|
||||||
ZMusic_MusicStream handle;
|
|
||||||
int baseorder;
|
|
||||||
bool loop;
|
|
||||||
FString LastSong; // last music that was played
|
|
||||||
};
|
|
||||||
|
|
||||||
extern MusPlayingInfo mus_playing;
|
|
||||||
|
|
||||||
extern float relative_volume, saved_relative_volume;
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
Reference in a new issue