From df7a4bb0d909ee02d98c0179cc366caa24385d0b Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 23 Sep 2019 10:18:19 +0200 Subject: [PATCH 1/7] - removed a few dependencies of the Timidity++ code from the main GZDoom code base. The big issues, i.e. FileReader and SoundFontReader still need to be handled to make this a standalone library. --- src/sound/timiditypp/common.cpp | 10 +- src/sound/timiditypp/configfile.cpp | 6 +- src/sound/timiditypp/effect.cpp | 5 - src/sound/timiditypp/effect.h | 2 - src/sound/timiditypp/sysdep.h | 2 +- src/sound/timiditypp/t_swap.h | 255 ++++++++++++++++++++++++++++ 6 files changed, 265 insertions(+), 15 deletions(-) create mode 100644 src/sound/timiditypp/t_swap.h diff --git a/src/sound/timiditypp/common.cpp b/src/sound/timiditypp/common.cpp index f6c8bbea03..e9b912f79d 100644 --- a/src/sound/timiditypp/common.cpp +++ b/src/sound/timiditypp/common.cpp @@ -26,7 +26,6 @@ #include #include -#include "m_random.h" #include "common.h" namespace TimidityPlus @@ -113,16 +112,19 @@ int string_to_7bit_range(const char *string_, int *start, int *end) } -static FRandom pr_rnd; +double GenRand_Real1() +{ + return rand() * (1. / RAND_MAX); +} int int_rand(int n) { - return (int)pr_rnd.GenRand_Real1() * n; + return (int)GenRand_Real1() * n; } double flt_rand() { - return (int)pr_rnd.GenRand_Real1(); + return (int)GenRand_Real1(); } struct timidity_file *open_file(const char *name, FSoundFontReader *sfreader) diff --git a/src/sound/timiditypp/configfile.cpp b/src/sound/timiditypp/configfile.cpp index 8f7a57509d..445a0985bd 100644 --- a/src/sound/timiditypp/configfile.cpp +++ b/src/sound/timiditypp/configfile.cpp @@ -26,7 +26,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "common.h" #include "instrum.h" #include "quantity.h" -#include "cmdlib.h" namespace TimidityPlus @@ -642,8 +641,9 @@ int Instruments::read_config_file(const char *name, int self, int allow_missing_ init_mblock(&varbuf); if (!self) { - basedir = strdup_mblock(&varbuf, tf->filename.c_str()); - FixPathSeperator((char*)basedir); + char *c = strdup_mblock(&varbuf, tf->filename.c_str()); + basedir = c; + for (; c; c++) if (*c == '\\') *c = '/'; sep = (char*)strrchr(basedir, '/'); } else diff --git a/src/sound/timiditypp/effect.cpp b/src/sound/timiditypp/effect.cpp index 6b2084e9cb..5f1084c96e 100644 --- a/src/sound/timiditypp/effect.cpp +++ b/src/sound/timiditypp/effect.cpp @@ -210,11 +210,6 @@ void Effect::do_effect(int32_t *buf, int32_t count) effect_left_right_delay(buf, count); } -uint32_t Effect::frand(void) -{ - return rng.GenRand32(); -} - int32_t Effect::my_mod(int32_t x, int32_t n) { if (x >= n) diff --git a/src/sound/timiditypp/effect.h b/src/sound/timiditypp/effect.h index b447fd9c58..5cace9dd56 100644 --- a/src/sound/timiditypp/effect.h +++ b/src/sound/timiditypp/effect.h @@ -14,7 +14,6 @@ class Effect { void effect_left_right_delay(int32_t *, int32_t); void init_mtrand(void); - uint32_t frand(void); int32_t my_mod(int32_t, int32_t); int turn_counter = 0, tc = 0; @@ -22,7 +21,6 @@ class Effect double rate0 = 0, rate1 = 0, dr = 0; int32_t prev[AUDIO_BUFFER_SIZE * 2] = { 0 }; - FRandom rng; Reverb *reverb; public: diff --git a/src/sound/timiditypp/sysdep.h b/src/sound/timiditypp/sysdep.h index 7ecd63ddac..58aa0a843f 100644 --- a/src/sound/timiditypp/sysdep.h +++ b/src/sound/timiditypp/sysdep.h @@ -28,7 +28,7 @@ #include // int types are defined here -#include "m_swap.h" +#include "t_swap.h" namespace TimidityPlus { diff --git a/src/sound/timiditypp/t_swap.h b/src/sound/timiditypp/t_swap.h new file mode 100644 index 0000000000..de9b7780a9 --- /dev/null +++ b/src/sound/timiditypp/t_swap.h @@ -0,0 +1,255 @@ +// +// DESCRIPTION: +// Endianess handling, swapping 16bit and 32bit. +// +//----------------------------------------------------------------------------- + + +#ifndef __M_SWAP_H__ +#define __M_SWAP_H__ + +#include + +// Endianess handling. +// WAD files are stored little endian. + +#ifdef __APPLE__ +#include + +inline short LittleShort(short x) +{ + return (short)OSSwapLittleToHostInt16((uint16_t)x); +} + +inline unsigned short LittleShort(unsigned short x) +{ + return OSSwapLittleToHostInt16(x); +} + +inline short LittleShort(int x) +{ + return OSSwapLittleToHostInt16((uint16_t)x); +} + +inline unsigned short LittleShort(unsigned int x) +{ + return OSSwapLittleToHostInt16((uint16_t)x); +} + +inline int LittleLong(int x) +{ + return OSSwapLittleToHostInt32((uint32_t)x); +} + +inline unsigned int LittleLong(unsigned int x) +{ + return OSSwapLittleToHostInt32(x); +} + +inline short BigShort(short x) +{ + return (short)OSSwapBigToHostInt16((uint16_t)x); +} + +inline unsigned short BigShort(unsigned short x) +{ + return OSSwapBigToHostInt16(x); +} + +inline int BigLong(int x) +{ + return OSSwapBigToHostInt32((uint32_t)x); +} + +inline unsigned int BigLong(unsigned int x) +{ + return OSSwapBigToHostInt32(x); +} + +#elif defined __BIG_ENDIAN__ + +// Swap 16bit, that is, MSB and LSB byte. +// No masking with 0xFF should be necessary. +inline short LittleShort (short x) +{ + return (short)((((unsigned short)x)>>8) | (((unsigned short)x)<<8)); +} + +inline unsigned short LittleShort (unsigned short x) +{ + return (unsigned short)((x>>8) | (x<<8)); +} + +inline short LittleShort (int x) +{ + return LittleShort((short)x); +} + +inline unsigned short LittleShort (unsigned int x) +{ + return LittleShort((unsigned short)x); +} + +// Swapping 32bit. +inline unsigned int LittleLong (unsigned int x) +{ + return (unsigned int)( + (x>>24) + | ((x>>8) & 0xff00) + | ((x<<8) & 0xff0000) + | (x<<24)); +} + +inline int LittleLong (int x) +{ + return (int)( + (((unsigned int)x)>>24) + | ((((unsigned int)x)>>8) & 0xff00) + | ((((unsigned int)x)<<8) & 0xff0000) + | (((unsigned int)x)<<24)); +} + +inline short BigShort(short x) +{ + return x; +} + +inline unsigned short BigShort(unsigned short x) +{ + return x; +} + +inline unsigned int BigLong(unsigned int x) +{ + return x; +} + +inline int BigLong(int x) +{ + return x; +} + +#else + +inline short LittleShort(short x) +{ + return x; +} + +inline unsigned short LittleShort(unsigned short x) +{ + return x; +} + +inline unsigned int LittleLong(unsigned int x) +{ + return x; +} + +inline int LittleLong(int x) +{ + return x; +} + +#ifdef _MSC_VER + +inline short BigShort(short x) +{ + return (short)_byteswap_ushort((unsigned short)x); +} + +inline unsigned short BigShort(unsigned short x) +{ + return _byteswap_ushort(x); +} + +inline int BigLong(int x) +{ + return (int)_byteswap_ulong((unsigned long)x); +} + +inline unsigned int BigLong(unsigned int x) +{ + return (unsigned int)_byteswap_ulong((unsigned long)x); +} +#pragma warning (default: 4035) + +#else + +inline short BigShort (short x) +{ + return (short)((((unsigned short)x)>>8) | (((unsigned short)x)<<8)); +} + +inline unsigned short BigShort (unsigned short x) +{ + return (unsigned short)((x>>8) | (x<<8)); +} + +inline unsigned int BigLong (unsigned int x) +{ + return (unsigned int)( + (x>>24) + | ((x>>8) & 0xff00) + | ((x<<8) & 0xff0000) + | (x<<24)); +} + +inline int BigLong (int x) +{ + return (int)( + (((unsigned int)x)>>24) + | ((((unsigned int)x)>>8) & 0xff00) + | ((((unsigned int)x)<<8) & 0xff0000) + | (((unsigned int)x)<<24)); +} + +#endif + +#endif // __BIG_ENDIAN__ + +// These may be destructive so they should create errors +unsigned long BigLong(unsigned long) = delete; +long BigLong(long) = delete; +unsigned long LittleLong(unsigned long) = delete; +long LittleLong(long) = delete; + + +// Data accessors, since some data is highly likely to be unaligned. +#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || defined(__x86_64__) +inline int GetShort(const unsigned char *foo) +{ + return *(const short *)foo; +} +inline int GetInt(const unsigned char *foo) +{ + return *(const int *)foo; +} +#else +inline int GetShort(const unsigned char *foo) +{ + return short(foo[0] | (foo[1] << 8)); +} +inline int GetInt(const unsigned char *foo) +{ + return int(foo[0] | (foo[1] << 8) | (foo[2] << 16) | (foo[3] << 24)); +} +#endif +inline int GetBigInt(const unsigned char *foo) +{ + return int((foo[0] << 24) | (foo[1] << 16) | (foo[2] << 8) | foo[3]); +} + +#ifdef __BIG_ENDIAN__ +inline int GetNativeInt(const unsigned char *foo) +{ + return GetBigInt(foo); +} +#else +inline int GetNativeInt(const unsigned char *foo) +{ + return GetInt(foo); +} +#endif + +#endif // __M_SWAP_H__ From 2cf8cc47dfc445637c8ba01bb8986ad918785078 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 23 Sep 2019 11:27:57 +0200 Subject: [PATCH 2/7] - moved the instrument set maintenance out of the Timidity++ library into the player class. This removes the dependency on the sound font manager from the low level library, reducing the direct dependencies to FileReader and SoundFontReader. --- .../mididevices/music_timiditypp_mididevice.cpp | 17 ++++++++++++----- src/sound/music/i_soundfont.h | 5 +++++ src/sound/timiditypp/common.cpp | 4 ++-- src/sound/timiditypp/common.h | 4 +++- src/sound/timiditypp/configfile.cpp | 2 +- src/sound/timiditypp/instrum.cpp | 7 ++----- src/sound/timiditypp/instrum.h | 11 ++--------- 7 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/sound/mididevices/music_timiditypp_mididevice.cpp b/src/sound/mididevices/music_timiditypp_mididevice.cpp index 381551d3a7..e7a0c56cc9 100644 --- a/src/sound/mididevices/music_timiditypp_mididevice.cpp +++ b/src/sound/mididevices/music_timiditypp_mididevice.cpp @@ -45,6 +45,7 @@ class TimidityPPMIDIDevice : public SoftSynthMIDIDevice { static TimidityPlus::Instruments *instruments; + static FString configName; int sampletime; public: TimidityPPMIDIDevice(const char *args, int samplerate); @@ -70,6 +71,7 @@ protected: void ComputeOutput(float *buffer, int len); }; TimidityPlus::Instruments *TimidityPPMIDIDevice::instruments; +FString TimidityPPMIDIDevice::configName; // Config file to use CUSTOM_CVAR(String, timidity_config, "gzdoom", CVAR_ARCHIVE | CVAR_GLOBALCONFIG) @@ -95,7 +97,7 @@ TimidityPPMIDIDevice::TimidityPPMIDIDevice(const char *args, int samplerate) if (args == NULL || *args == 0) args = timidity_config; Renderer = nullptr; - if (instruments != nullptr && !instruments->checkConfig(args)) + if (instruments != nullptr && configName.CompareNoCase(args)) // Only load instruments if they have changed from the last played song. { delete instruments; instruments = nullptr; @@ -104,11 +106,16 @@ TimidityPPMIDIDevice::TimidityPPMIDIDevice(const char *args, int samplerate) if (instruments == nullptr) { - instruments = new TimidityPlus::Instruments; - if (!instruments->load(args)) + + auto sfreader = sfmanager.OpenSoundFont(args, SF_SF2 | SF_GUS); + if (sfreader != nullptr) { - delete instruments; - instruments = nullptr; + instruments = new TimidityPlus::Instruments; + if (!instruments->load(sfreader)) + { + delete instruments; + instruments = nullptr; + } } } if (instruments != nullptr) diff --git a/src/sound/music/i_soundfont.h b/src/sound/music/i_soundfont.h index 681558a865..9206e11ea1 100644 --- a/src/sound/music/i_soundfont.h +++ b/src/sound/music/i_soundfont.h @@ -44,6 +44,11 @@ public: virtual ~FSoundFontReader() {} virtual FileReader OpenMainConfigFile() = 0; // this is special because it needs to be synthesized for .sf files and set some restrictions for patch sets + virtual FString MainConfigFileName() + { + return basePath() + "timidity.cfg"; + } + virtual FileReader OpenFile(const char *name) = 0; std::pair LookupFile(const char *name); void AddPath(const char *str); diff --git a/src/sound/timiditypp/common.cpp b/src/sound/timiditypp/common.cpp index e9b912f79d..8e642d9c9a 100644 --- a/src/sound/timiditypp/common.cpp +++ b/src/sound/timiditypp/common.cpp @@ -127,14 +127,14 @@ double flt_rand() return (int)GenRand_Real1(); } -struct timidity_file *open_file(const char *name, FSoundFontReader *sfreader) +struct timidity_file *open_file(const char *name, SoundFontReaderInterface *sfreader) { FileReader fr; FString filename; if (name == nullptr) { fr = sfreader->OpenMainConfigFile(); - filename = sfreader->basePath() + "timidity.cfg"; + filename = sfreader->MainConfigFileName(); } else { diff --git a/src/sound/timiditypp/common.h b/src/sound/timiditypp/common.h index 74c7070df1..ea38674295 100644 --- a/src/sound/timiditypp/common.h +++ b/src/sound/timiditypp/common.h @@ -32,6 +32,8 @@ namespace TimidityPlus { + //class SoundFontReaderInterface; + using SoundFontReaderInterface = FSoundFontReader; struct timidity_file { @@ -39,7 +41,7 @@ struct timidity_file std::string filename; }; -extern struct timidity_file *open_file(const char *name, FSoundFontReader *); +extern struct timidity_file *open_file(const char *name, SoundFontReaderInterface *); extern void tf_close(struct timidity_file *tf); extern void skip(struct timidity_file *tf, size_t len); extern char *tf_gets(char *buff, int n, struct timidity_file *tf); diff --git a/src/sound/timiditypp/configfile.cpp b/src/sound/timiditypp/configfile.cpp index 445a0985bd..92ccfc6ed3 100644 --- a/src/sound/timiditypp/configfile.cpp +++ b/src/sound/timiditypp/configfile.cpp @@ -643,7 +643,7 @@ int Instruments::read_config_file(const char *name, int self, int allow_missing_ { char *c = strdup_mblock(&varbuf, tf->filename.c_str()); basedir = c; - for (; c; c++) if (*c == '\\') *c = '/'; + for (; *c; c++) if (*c == '\\') *c = '/'; sep = (char*)strrchr(basedir, '/'); } else diff --git a/src/sound/timiditypp/instrum.cpp b/src/sound/timiditypp/instrum.cpp index 554f01317d..ba9f5878e0 100644 --- a/src/sound/timiditypp/instrum.cpp +++ b/src/sound/timiditypp/instrum.cpp @@ -52,16 +52,13 @@ Instruments::Instruments() memcpy(layer_items, static_layer_items, sizeof(layer_items)); } -bool Instruments::load(const char *config) +bool Instruments::load(SoundFontReaderInterface *sf) { - sfreader = sfmanager.OpenSoundFont(config, SF_SF2 | SF_GUS); - if (sfreader == nullptr) return false; - + sfreader = sf; if (read_config_file(nullptr, 0, 0) == RC_OK) { init_load_soundfont(); set_default_instrument(); - configFileName = config; return true; } return false; diff --git a/src/sound/timiditypp/instrum.h b/src/sound/timiditypp/instrum.h index 0119159b3e..6b96a0a3a8 100644 --- a/src/sound/timiditypp/instrum.h +++ b/src/sound/timiditypp/instrum.h @@ -31,7 +31,6 @@ #include "sflayer.h" #include "sfitem.h" -class FSoundFontReader; namespace TimidityPlus { @@ -233,7 +232,7 @@ struct SampleImporter; class Instruments { std::string configFileName; - FSoundFontReader *sfreader; + SoundFontReaderInterface *sfreader; ToneBank standard_tonebank, standard_drumset; @@ -462,7 +461,7 @@ class Instruments public: Instruments(); - bool load(const char *config); + bool load(SoundFontReaderInterface *); ~Instruments(); const ToneBank *toneBank(int i) const @@ -556,12 +555,6 @@ public: { set_default_instrument(def_instr_name); } - - bool checkConfig(const char *filename) - { - return configFileName.compare(filename) == 0; - } - }; From 16ab52c5f365239cdfe39e7c33423cca0649807a Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 23 Sep 2019 12:45:26 +0200 Subject: [PATCH 3/7] - thinned out the FSoundFontReader interface a bit more by moving the file open code into the FSoundFontReader class itself. --- src/sound/music/i_soundfont.cpp | 39 +++++++++++++++++++++++++++++++++ src/sound/music/i_soundfont.h | 7 ++++++ src/sound/timiditypp/common.cpp | 20 +---------------- src/sound/timiditypp/timidity.h | 1 - 4 files changed, 47 insertions(+), 20 deletions(-) diff --git a/src/sound/music/i_soundfont.cpp b/src/sound/music/i_soundfont.cpp index a591eac978..1df64bddc9 100644 --- a/src/sound/music/i_soundfont.cpp +++ b/src/sound/music/i_soundfont.cpp @@ -39,6 +39,7 @@ #include "i_system.h" #include "gameconfigfile.h" #include "resourcefiles/resourcefile.h" +#include "timiditypp/common.h" FSoundFontManager sfmanager; @@ -97,6 +98,44 @@ int FSoundFontReader::pathcmp(const char *p1, const char *p2) return mCaseSensitivePaths? strcmp(p1, p2) : stricmp(p1, p2); } + +FileReader FSoundFontReader::Open(const char *name, std::string& filename) +{ + FileReader fr; + if (name == nullptr) + { + fr = OpenMainConfigFile(); + filename = MainConfigFileName(); + } + else + { + auto res = LookupFile(name); + fr = std::move(res.first); + filename = res.second; + } + return fr; +} + +//========================================================================== +// +// This is the interface function for Timidity++ +// +//========================================================================== + +struct TimidityPlus::timidity_file* FSoundFontReader::open_timidity_file(const char* name) +{ + std::string filename; + + FileReader fr = Open(name, filename); + if (!fr.isOpen()) return nullptr; + + auto tf = new TimidityPlus::timidity_file; + tf->url = std::move(fr); + tf->filename = std::move(filename); + return tf; +} + + //========================================================================== // // Note that the file type has already been checked diff --git a/src/sound/music/i_soundfont.h b/src/sound/music/i_soundfont.h index 9206e11ea1..80a20486e5 100644 --- a/src/sound/music/i_soundfont.h +++ b/src/sound/music/i_soundfont.h @@ -20,6 +20,10 @@ struct FSoundFontInfo int type; }; +namespace TimidityPlus +{ + struct timidity_file; +} //========================================================================== // // @@ -56,6 +60,9 @@ public: { return ""; // archived patch sets do not use paths } + + virtual FileReader Open(const char* name, std::string &filename); + virtual struct TimidityPlus::timidity_file* open_timidity_file(const char* name); }; //========================================================================== diff --git a/src/sound/timiditypp/common.cpp b/src/sound/timiditypp/common.cpp index 8e642d9c9a..3ea76febe5 100644 --- a/src/sound/timiditypp/common.cpp +++ b/src/sound/timiditypp/common.cpp @@ -129,25 +129,7 @@ double flt_rand() struct timidity_file *open_file(const char *name, SoundFontReaderInterface *sfreader) { - FileReader fr; - FString filename; - if (name == nullptr) - { - fr = sfreader->OpenMainConfigFile(); - filename = sfreader->MainConfigFileName(); - } - else - { - auto res = sfreader->LookupFile(name); - fr = std::move(res.first); - filename = res.second; - } - if (!fr.isOpen()) return nullptr; - - auto tf = new timidity_file; - tf->url = std::move(fr); - tf->filename = filename.GetChars(); - return tf; + return sfreader->open_timidity_file(name); } /* This closes files opened with open_file */ diff --git a/src/sound/timiditypp/timidity.h b/src/sound/timiditypp/timidity.h index 5fe3667f63..ce528d46e5 100644 --- a/src/sound/timiditypp/timidity.h +++ b/src/sound/timiditypp/timidity.h @@ -170,6 +170,5 @@ const int max_voices = DEFAULT_VOICES; const int temper_type_mute = 0; const int opt_preserve_silence = 0; const int opt_init_keysig = 8; - } #endif /* TIMIDITY_H_INCLUDED */ From cf6d0c31273881c24c9cdbc54d10b0549fbf8c9b Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 23 Sep 2019 13:53:28 +0200 Subject: [PATCH 4/7] - implemented an abstract sound font reader interface for Timidity++. The only dependency left on the main GZDoom code are the CVars, which will be dealt with next. --- .../music_timiditypp_mididevice.cpp | 1 + src/sound/music/i_soundfont.cpp | 34 +++++++++++++++++-- src/sound/music/i_soundfont.h | 13 +++---- src/sound/timidity/timidity.cpp | 1 + src/sound/timiditypp/common.cpp | 27 ++------------- src/sound/timiditypp/common.h | 32 ++++++++++------- src/sound/timiditypp/configfile.cpp | 2 +- src/sound/timiditypp/effect.h | 1 - src/sound/timiditypp/filter.cpp | 1 + src/sound/timiditypp/mix.cpp | 7 +--- src/sound/timiditypp/playmidi.cpp | 7 ++++ 11 files changed, 72 insertions(+), 54 deletions(-) diff --git a/src/sound/mididevices/music_timiditypp_mididevice.cpp b/src/sound/mididevices/music_timiditypp_mididevice.cpp index e7a0c56cc9..16aad4974a 100644 --- a/src/sound/mididevices/music_timiditypp_mididevice.cpp +++ b/src/sound/mididevices/music_timiditypp_mididevice.cpp @@ -37,6 +37,7 @@ #include "i_musicinterns.h" #include "v_text.h" #include "doomerrors.h" +#include "i_soundfont.h" #include "timiditypp/timidity.h" #include "timiditypp/instrum.h" diff --git a/src/sound/music/i_soundfont.cpp b/src/sound/music/i_soundfont.cpp index 1df64bddc9..70dc8ffe07 100644 --- a/src/sound/music/i_soundfont.cpp +++ b/src/sound/music/i_soundfont.cpp @@ -35,6 +35,7 @@ #include #include #include "i_soundfont.h" +#include "i_soundinternal.h" #include "cmdlib.h" #include "i_system.h" #include "gameconfigfile.h" @@ -43,6 +44,33 @@ FSoundFontManager sfmanager; +struct timidity_file_FileReader : public TimidityPlus::timidity_file +{ + FileReader fr; + + char* gets(char* buff, int n) override + { + if (!fr.isOpen()) return nullptr; + return fr.Gets(buff, n); + } + long read(void* buff, int32_t size, int32_t nitems) override + { + if (!fr.isOpen()) return 0; + return (long)fr.Read(buff, size * nitems) / size; + } + long seek(long offset, int whence) override + { + if (!fr.isOpen()) return 0; + return (long)fr.Seek(offset, (FileReader::ESeek)whence); + } + long tell() override + { + if (!fr.isOpen()) return 0; + return (long)fr.Tell(); + } + +}; + //========================================================================== // // returns both a file reader and the full name of the looked up file @@ -122,15 +150,15 @@ FileReader FSoundFontReader::Open(const char *name, std::string& filename) // //========================================================================== -struct TimidityPlus::timidity_file* FSoundFontReader::open_timidity_file(const char* name) +struct TimidityPlus::timidity_file* FSoundFontReader::open_timidityplus_file(const char* name) { std::string filename; FileReader fr = Open(name, filename); if (!fr.isOpen()) return nullptr; - auto tf = new TimidityPlus::timidity_file; - tf->url = std::move(fr); + auto tf = new timidity_file_FileReader; + tf->fr = std::move(fr); tf->filename = std::move(filename); return tf; } diff --git a/src/sound/music/i_soundfont.h b/src/sound/music/i_soundfont.h index 80a20486e5..f100ff94fd 100644 --- a/src/sound/music/i_soundfont.h +++ b/src/sound/music/i_soundfont.h @@ -3,6 +3,7 @@ #include "doomtype.h" #include "w_wad.h" #include "files.h" +#include "timiditypp/timidity_file.h" enum { @@ -20,17 +21,13 @@ struct FSoundFontInfo int type; }; -namespace TimidityPlus -{ - struct timidity_file; -} //========================================================================== // // // //========================================================================== -class FSoundFontReader +class FSoundFontReader : public TimidityPlus::SoundFontReaderInterface { protected: // This is only doable for loose config files that get set as sound fonts. All other cases read from a contained environment where this does not apply. @@ -62,7 +59,11 @@ public: } virtual FileReader Open(const char* name, std::string &filename); - virtual struct TimidityPlus::timidity_file* open_timidity_file(const char* name); + virtual struct TimidityPlus::timidity_file* open_timidityplus_file(const char* name); + virtual void timidityplus_add_path(const char* name) + { + return AddPath(name); + } }; //========================================================================== diff --git a/src/sound/timidity/timidity.cpp b/src/sound/timidity/timidity.cpp index 22ec94d978..c52842e3b1 100644 --- a/src/sound/timidity/timidity.cpp +++ b/src/sound/timidity/timidity.cpp @@ -36,6 +36,7 @@ #include "i_musicinterns.h" #include "v_text.h" #include "timidity.h" +#include "i_soundfont.h" CUSTOM_CVAR(String, midi_config, "gzdoom", CVAR_ARCHIVE | CVAR_GLOBALCONFIG) { diff --git a/src/sound/timiditypp/common.cpp b/src/sound/timiditypp/common.cpp index 3ea76febe5..230796d290 100644 --- a/src/sound/timiditypp/common.cpp +++ b/src/sound/timiditypp/common.cpp @@ -129,48 +129,27 @@ double flt_rand() struct timidity_file *open_file(const char *name, SoundFontReaderInterface *sfreader) { - return sfreader->open_timidity_file(name); + return sfreader->open_timidityplus_file(name); } /* This closes files opened with open_file */ void tf_close(struct timidity_file *tf) { - tf->url.Close(); delete tf; } /* This is meant for skipping a few bytes. */ void skip(struct timidity_file *tf, size_t len) { - tf->url.Seek((long)len, FileReader::SeekCur); -} - -char *tf_gets(char *buff, int n, struct timidity_file *tf) -{ - return tf->url.Gets(buff, n); + tf_seek(tf, (long)len, SEEK_CUR); } int tf_getc(struct timidity_file *tf) { unsigned char c; - auto read = tf->url.Read(&c, 1); + auto read = tf_read(&c, 1, 1, tf); return read == 0 ? EOF : c; } -long tf_read(void *buff, int32_t size, int32_t nitems, struct timidity_file *tf) -{ - return (long)tf->url.Read(buff, size * nitems) / size; -} - -long tf_seek(struct timidity_file *tf, long offset, int whence) -{ - - return (long)tf->url.Seek(offset, (FileReader::ESeek)whence); -} - -long tf_tell(struct timidity_file *tf) -{ - return (long)tf->url.Tell(); -} } diff --git a/src/sound/timiditypp/common.h b/src/sound/timiditypp/common.h index ea38674295..a999f5041d 100644 --- a/src/sound/timiditypp/common.h +++ b/src/sound/timiditypp/common.h @@ -27,28 +27,34 @@ #include #include #include -#include "files.h" -#include "i_soundfont.h" +#include "timidity_file.h" namespace TimidityPlus { - //class SoundFontReaderInterface; - using SoundFontReaderInterface = FSoundFontReader; - -struct timidity_file +inline char* tf_gets(char* buff, int n, struct timidity_file* tf) { - FileReader url; - std::string filename; -}; + return tf->gets(buff, n); +} + +inline long tf_read(void* buff, int32_t size, int32_t nitems, struct timidity_file* tf) +{ + return (long)tf->read(buff, size, nitems); +} + +inline long tf_seek(struct timidity_file* tf, long offset, int whence) +{ + return (long)tf->seek(offset, whence); +} + +inline long tf_tell(struct timidity_file* tf) +{ + return (long)tf->tell(); +} extern struct timidity_file *open_file(const char *name, SoundFontReaderInterface *); extern void tf_close(struct timidity_file *tf); extern void skip(struct timidity_file *tf, size_t len); -extern char *tf_gets(char *buff, int n, struct timidity_file *tf); int tf_getc(struct timidity_file *tf); -extern long tf_read(void *buff, int32_t size, int32_t nitems, struct timidity_file *tf); -extern long tf_seek(struct timidity_file *tf, long offset, int whence); -extern long tf_tell(struct timidity_file *tf); extern int int_rand(int n); /* random [0..n-1] */ double flt_rand(); diff --git a/src/sound/timiditypp/configfile.cpp b/src/sound/timiditypp/configfile.cpp index 92ccfc6ed3..a3874e4b27 100644 --- a/src/sound/timiditypp/configfile.cpp +++ b/src/sound/timiditypp/configfile.cpp @@ -1397,7 +1397,7 @@ int Instruments::read_config_file(const char *name, int self, int allow_missing_ continue; } for (i = 1; i < words; i++) - sfreader->AddPath(w[i]); + sfreader->timidityplus_add_path(w[i]); } else if (!strcmp(w[0], "source") || !strcmp(w[0], "trysource")) { diff --git a/src/sound/timiditypp/effect.h b/src/sound/timiditypp/effect.h index 5cace9dd56..6d65d8e200 100644 --- a/src/sound/timiditypp/effect.h +++ b/src/sound/timiditypp/effect.h @@ -1,7 +1,6 @@ #pragma once #include -#include "m_random.h" #include "timidity.h" diff --git a/src/sound/timiditypp/filter.cpp b/src/sound/timiditypp/filter.cpp index 1e82de4c58..08dbc83cfe 100644 --- a/src/sound/timiditypp/filter.cpp +++ b/src/sound/timiditypp/filter.cpp @@ -36,6 +36,7 @@ #include "common.h" #include "filter.h" +#include "sysdep.h" namespace TimidityPlus { diff --git a/src/sound/timiditypp/mix.cpp b/src/sound/timiditypp/mix.cpp index b4b19e2ea7..204dc46ed2 100644 --- a/src/sound/timiditypp/mix.cpp +++ b/src/sound/timiditypp/mix.cpp @@ -32,15 +32,10 @@ #include "resample.h" #include "mix.h" #include "optcode.h" -#include "c_cvars.h" - -CUSTOM_CVAR(Float, min_sustain_time, 5000, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -{ - if (self < 0) self = 0; -} namespace TimidityPlus { +extern float min_sustain_time; #define FROM_FINAL_VOLUME(a) (a) diff --git a/src/sound/timiditypp/playmidi.cpp b/src/sound/timiditypp/playmidi.cpp index fa4bd43c13..2f134c13b6 100644 --- a/src/sound/timiditypp/playmidi.cpp +++ b/src/sound/timiditypp/playmidi.cpp @@ -59,6 +59,7 @@ namespace TimidityPlus float timidity_drum_power = 1.f; int timidity_key_adjust = 0; float timidity_tempo_adjust = 1.f; + float min_sustain_time = 5000; // The following options have no generic use and are only meaningful for some SYSEX events not normally found in common MIDIs. // For now they are kept as unchanging global variables @@ -196,6 +197,12 @@ CUSTOM_CVAR(Float, timidity_tempo_adjust, 1, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) ChangeVarSync(TimidityPlus::timidity_tempo_adjust, *self); } +CUSTOM_CVAR(Float, min_sustain_time, 5000, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + if (self < 0) self = 0; + ChangeVarSync(TimidityPlus::min_sustain_time, *self); +} + namespace TimidityPlus { From 98329311b465a8cf3ece7a8d7c8b3f1bb17e3fd1 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 23 Sep 2019 13:58:16 +0200 Subject: [PATCH 5/7] - moved the CVars out of the Timidity++ backend. --- .../music_timiditypp_mididevice.cpp | 134 +++++++++++++++++ src/sound/timiditypp/playmidi.cpp | 138 ------------------ src/sound/timiditypp/timidity.h | 4 + 3 files changed, 138 insertions(+), 138 deletions(-) diff --git a/src/sound/mididevices/music_timiditypp_mididevice.cpp b/src/sound/mididevices/music_timiditypp_mididevice.cpp index 16aad4974a..76b3d76bc4 100644 --- a/src/sound/mididevices/music_timiditypp_mididevice.cpp +++ b/src/sound/mididevices/music_timiditypp_mididevice.cpp @@ -43,6 +43,140 @@ #include "timiditypp/instrum.h" #include "timiditypp/playmidi.h" + + +template void ChangeVarSync(T& var, T value) +{ + std::lock_guard lock(TimidityPlus::CvarCritSec); + var = value; +} + +CUSTOM_CVAR(Bool, timidity_modulation_wheel, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + ChangeVarSync(TimidityPlus::timidity_modulation_wheel, *self); +} + +CUSTOM_CVAR(Bool, timidity_portamento, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + ChangeVarSync(TimidityPlus::timidity_portamento, *self); +} +/* +* reverb=0 no reverb 0 +* reverb=1 old reverb 1 +* reverb=1,n set reverb level to n (-1 to -127) +* reverb=2 "global" old reverb 2 +* reverb=2,n set reverb level to n (-1 to -127) - 128 +* reverb=3 new reverb 3 +* reverb=3,n set reverb level to n (-1 to -127) - 256 +* reverb=4 "global" new reverb 4 +* reverb=4,n set reverb level to n (-1 to -127) - 384 +*/ +EXTERN_CVAR(Int, timidity_reverb_level) +EXTERN_CVAR(Int, timidity_reverb) + +static void SetReverb() +{ + int value = 0; + int mode = timidity_reverb; + int level = timidity_reverb_level; + + if (mode == 0 || level == 0) value = mode; + else value = (mode - 1) * -128 - level; + ChangeVarSync(TimidityPlus::timidity_reverb, value); +} + +CUSTOM_CVAR(Int, timidity_reverb, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + if (self < 0 || self > 4) self = 0; + else SetReverb(); +} + +CUSTOM_CVAR(Int, timidity_reverb_level, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + if (self < 0 || self > 127) self = 0; + else SetReverb(); +} + +CUSTOM_CVAR(Int, timidity_chorus, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + ChangeVarSync(TimidityPlus::timidity_chorus, *self); +} + +CUSTOM_CVAR(Bool, timidity_surround_chorus, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + if (currSong != nullptr && currSong->GetDeviceType() == MDEV_TIMIDITY) + { + MIDIDeviceChanged(-1, true); + } + ChangeVarSync(TimidityPlus::timidity_surround_chorus, *self); +} + +CUSTOM_CVAR(Bool, timidity_channel_pressure, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + ChangeVarSync(TimidityPlus::timidity_channel_pressure, *self); +} + +CUSTOM_CVAR(Int, timidity_lpf_def, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + ChangeVarSync(TimidityPlus::timidity_lpf_def, *self); +} + +CUSTOM_CVAR(Bool, timidity_temper_control, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + ChangeVarSync(TimidityPlus::timidity_temper_control, *self); +} + +CUSTOM_CVAR(Bool, timidity_modulation_envelope, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + ChangeVarSync(TimidityPlus::timidity_modulation_envelope, *self); + if (currSong != nullptr && currSong->GetDeviceType() == MDEV_TIMIDITY) + { + MIDIDeviceChanged(-1, true); + } +} + +CUSTOM_CVAR(Bool, timidity_overlap_voice_allow, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + ChangeVarSync(TimidityPlus::timidity_overlap_voice_allow, *self); +} + +CUSTOM_CVAR(Bool, timidity_drum_effect, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + ChangeVarSync(TimidityPlus::timidity_drum_effect, *self); +} + +CUSTOM_CVAR(Bool, timidity_pan_delay, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + ChangeVarSync(TimidityPlus::timidity_pan_delay, *self); +} + +CUSTOM_CVAR(Float, timidity_drum_power, 1.0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) /* coef. of drum amplitude */ +{ + if (self < 0) self = 0; + else if (self > MAX_AMPLIFICATION / 100.f) self = MAX_AMPLIFICATION / 100.f; + ChangeVarSync(TimidityPlus::timidity_drum_power, *self); +} +CUSTOM_CVAR(Int, timidity_key_adjust, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + if (self < -24) self = -24; + else if (self > 24) self = 24; + ChangeVarSync(TimidityPlus::timidity_key_adjust, *self); +} +// For testing mainly. +CUSTOM_CVAR(Float, timidity_tempo_adjust, 1, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + if (self < 0.25) self = 0.25; + else if (self > 10) self = 10; + ChangeVarSync(TimidityPlus::timidity_tempo_adjust, *self); +} + +CUSTOM_CVAR(Float, min_sustain_time, 5000, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + if (self < 0) self = 0; + ChangeVarSync(TimidityPlus::min_sustain_time, *self); +} + + class TimidityPPMIDIDevice : public SoftSynthMIDIDevice { static TimidityPlus::Instruments *instruments; diff --git a/src/sound/timiditypp/playmidi.cpp b/src/sound/timiditypp/playmidi.cpp index 2f134c13b6..4f0297f66b 100644 --- a/src/sound/timiditypp/playmidi.cpp +++ b/src/sound/timiditypp/playmidi.cpp @@ -25,7 +25,6 @@ #include #include -#include #include "timidity.h" #include "common.h" #include "instrum.h" @@ -35,10 +34,8 @@ #include "reverb.h" #include "freq.h" #include "quantity.h" -#include "c_cvars.h" #include "tables.h" #include "effect.h" -#include "i_musicinterns.h" namespace TimidityPlus @@ -70,142 +67,7 @@ namespace TimidityPlus static bool opt_tva_release = false; static bool opt_insertion_effect = false; static bool opt_delay_control = false; -} -template void ChangeVarSync(T&var, T value) -{ - std::lock_guard lock(TimidityPlus::CvarCritSec); - var = value; -} - -CUSTOM_CVAR(Bool, timidity_modulation_wheel, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -{ - ChangeVarSync(TimidityPlus::timidity_modulation_wheel, *self); -} - -CUSTOM_CVAR(Bool, timidity_portamento, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -{ - ChangeVarSync(TimidityPlus::timidity_portamento, *self); -} -/* -* reverb=0 no reverb 0 -* reverb=1 old reverb 1 -* reverb=1,n set reverb level to n (-1 to -127) -* reverb=2 "global" old reverb 2 -* reverb=2,n set reverb level to n (-1 to -127) - 128 -* reverb=3 new reverb 3 -* reverb=3,n set reverb level to n (-1 to -127) - 256 -* reverb=4 "global" new reverb 4 -* reverb=4,n set reverb level to n (-1 to -127) - 384 -*/ -EXTERN_CVAR(Int, timidity_reverb_level) -EXTERN_CVAR(Int, timidity_reverb) - -static void SetReverb() -{ - int value = 0; - int mode = timidity_reverb; - int level = timidity_reverb_level; - - if (mode == 0 || level == 0) value = mode; - else value = (mode - 1) * -128 - level; - ChangeVarSync(TimidityPlus::timidity_reverb, value); -} - -CUSTOM_CVAR(Int, timidity_reverb, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -{ - if (self < 0 || self > 4) self = 0; - else SetReverb(); -} - -CUSTOM_CVAR(Int, timidity_reverb_level, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -{ - if (self < 0 || self > 127) self = 0; - else SetReverb(); -} - -CUSTOM_CVAR(Int, timidity_chorus, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -{ - ChangeVarSync(TimidityPlus::timidity_chorus, *self); -} - -CUSTOM_CVAR(Bool, timidity_surround_chorus, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -{ - if (currSong != nullptr && currSong->GetDeviceType() == MDEV_TIMIDITY) - { - MIDIDeviceChanged(-1, true); - } - ChangeVarSync(TimidityPlus::timidity_surround_chorus, *self); -} - -CUSTOM_CVAR(Bool, timidity_channel_pressure, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -{ - ChangeVarSync(TimidityPlus::timidity_channel_pressure, *self); -} - -CUSTOM_CVAR(Int, timidity_lpf_def, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -{ - ChangeVarSync(TimidityPlus::timidity_lpf_def, *self); -} - -CUSTOM_CVAR(Bool, timidity_temper_control, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -{ - ChangeVarSync(TimidityPlus::timidity_temper_control, *self); -} - -CUSTOM_CVAR(Bool, timidity_modulation_envelope, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -{ - ChangeVarSync(TimidityPlus::timidity_modulation_envelope, *self); - if (currSong != nullptr && currSong->GetDeviceType() == MDEV_TIMIDITY) - { - MIDIDeviceChanged(-1, true); - } -} - -CUSTOM_CVAR(Bool, timidity_overlap_voice_allow, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -{ - ChangeVarSync(TimidityPlus::timidity_overlap_voice_allow, *self); -} - -CUSTOM_CVAR(Bool, timidity_drum_effect, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -{ - ChangeVarSync(TimidityPlus::timidity_drum_effect, *self); -} - -CUSTOM_CVAR(Bool, timidity_pan_delay, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -{ - ChangeVarSync(TimidityPlus::timidity_pan_delay, *self); -} - -CUSTOM_CVAR(Float, timidity_drum_power, 1.0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) /* coef. of drum amplitude */ -{ - if (self < 0) self = 0; - else if (self > MAX_AMPLIFICATION/100.f) self = MAX_AMPLIFICATION/100.f; - ChangeVarSync(TimidityPlus::timidity_drum_power, *self); -} -CUSTOM_CVAR(Int, timidity_key_adjust, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -{ - if (self < -24) self = -24; - else if (self > 24) self = 24; - ChangeVarSync(TimidityPlus::timidity_key_adjust, *self); -} -// For testing mainly. -CUSTOM_CVAR(Float, timidity_tempo_adjust, 1, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -{ - if (self < 0.25) self = 0.25; - else if (self > 10) self = 10; - ChangeVarSync(TimidityPlus::timidity_tempo_adjust, *self); -} - -CUSTOM_CVAR(Float, min_sustain_time, 5000, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -{ - if (self < 0) self = 0; - ChangeVarSync(TimidityPlus::min_sustain_time, *self); -} - - -namespace TimidityPlus -{ // These two variables need to remain global or things will get messy because they get accessed from non-class code. int32_t control_ratio = 22; diff --git a/src/sound/timiditypp/timidity.h b/src/sound/timiditypp/timidity.h index ce528d46e5..59f8f529ee 100644 --- a/src/sound/timiditypp/timidity.h +++ b/src/sound/timiditypp/timidity.h @@ -30,6 +30,7 @@ #include "controls.h" #include "mblock.h" +#include #include #ifdef _MSC_VER @@ -124,6 +125,7 @@ namespace TimidityPlus { +extern std::mutex CvarCritSec; extern bool timidity_modulation_wheel; extern bool timidity_portamento; extern int timidity_reverb; @@ -139,6 +141,8 @@ extern bool timidity_pan_delay; extern float timidity_drum_power; extern int timidity_key_adjust; extern float timidity_tempo_adjust; +extern float min_sustain_time; +extern int timidity_lpf_def; extern int32_t playback_rate; extern int32_t control_ratio; // derived from playback_rate From 56e4c8f21385ad8ddfd69a8a4ee89e82742820b4 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 23 Sep 2019 14:14:32 +0200 Subject: [PATCH 6/7] - handled the final piece where Timidity++ had a direct dependency on GZDoom - the error logging function. This is npw a function pointer so that a simple stdout printout can be used as default, but allows to override it. Also added the missing timidity_file.h header. --- .../music_timiditypp_mididevice.cpp | 66 +++++---- src/sound/timiditypp/common.cpp | 27 ++++ src/sound/timiditypp/controls.h | 2 +- src/sound/timiditypp/timidity.h | 1 + src/sound/timiditypp/timidity_file.h | 133 ++++++++++++++++++ 5 files changed, 200 insertions(+), 29 deletions(-) create mode 100644 src/sound/timiditypp/timidity_file.h diff --git a/src/sound/mididevices/music_timiditypp_mididevice.cpp b/src/sound/mididevices/music_timiditypp_mididevice.cpp index 76b3d76bc4..066694a523 100644 --- a/src/sound/mididevices/music_timiditypp_mididevice.cpp +++ b/src/sound/mididevices/music_timiditypp_mididevice.cpp @@ -44,6 +44,43 @@ #include "timiditypp/playmidi.h" +//========================================================================== +// +// Error printing override to redirect to the internal console instead of stdout. +// +//========================================================================== + +static void gzdoom_ctl_cmsg(int type, int verbosity_level, const char* fmt, ...) +{ + if (verbosity_level >= TimidityPlus::VERB_DEBUG) return; // Don't waste time on diagnostics. + + va_list args; + va_start(args, fmt); + FString msg; + msg.VFormat(fmt, args); + va_end(args); + + switch (type) + { + case TimidityPlus::CMSG_ERROR: + Printf(TEXTCOLOR_RED "%s\n", msg.GetChars()); + break; + + case TimidityPlus::CMSG_WARNING: + Printf(TEXTCOLOR_YELLOW "%s\n", msg.GetChars()); + break; + + case TimidityPlus::CMSG_INFO: + DPrintf(DMSG_SPAMMY, "%s\n", msg.GetChars()); + break; + } +} + +//========================================================================== +// +// CVar interface to configurable parameters +// +//========================================================================== template void ChangeVarSync(T& var, T value) { @@ -237,11 +274,11 @@ TimidityPPMIDIDevice::TimidityPPMIDIDevice(const char *args, int samplerate) delete instruments; instruments = nullptr; } + TimidityPlus::ctl_cmsg = gzdoom_ctl_cmsg; TimidityPlus::set_playback_rate(SampleRate); if (instruments == nullptr) { - auto sfreader = sfmanager.OpenSoundFont(args, SF_SF2 | SF_GUS); if (sfreader != nullptr) { @@ -367,30 +404,3 @@ void TimidityPP_Shutdown() TimidityPlus::free_gauss_table(); TimidityPlus::free_global_mblock(); } - - -void TimidityPlus::ctl_cmsg(int type, int verbosity_level, const char *fmt, ...) -{ - if (verbosity_level >= VERB_DEBUG) return; // Don't waste time on diagnostics. - - va_list args; - va_start(args, fmt); - FString msg; - msg.VFormat(fmt, args); - va_end(args); - - switch (type) - { - case CMSG_ERROR: - Printf(TEXTCOLOR_RED "%s\n", msg.GetChars()); - break; - - case CMSG_WARNING: - Printf(TEXTCOLOR_YELLOW "%s\n", msg.GetChars()); - break; - - case CMSG_INFO: - DPrintf(DMSG_SPAMMY, "%s\n", msg.GetChars()); - break; - } -} \ No newline at end of file diff --git a/src/sound/timiditypp/common.cpp b/src/sound/timiditypp/common.cpp index 230796d290..87ce4d13ec 100644 --- a/src/sound/timiditypp/common.cpp +++ b/src/sound/timiditypp/common.cpp @@ -27,6 +27,7 @@ #include #include #include "common.h" +#include "controls.h" namespace TimidityPlus { @@ -151,5 +152,31 @@ int tf_getc(struct timidity_file *tf) return read == 0 ? EOF : c; } +void default_ctl_cmsg(int type, int verbosity_level, const char* fmt, ...) +{ + if (verbosity_level >= VERB_DEBUG) return; // Don't waste time on diagnostics. + + char buffer[2048]; + va_list args; + va_start(args, fmt); + + switch (type) + { + case CMSG_ERROR: + vprintf("Error: %s\n", args); + break; + + case CMSG_WARNING: + vprintf("Warning: %s\n", args); + break; + + case CMSG_INFO: + vprintf("Info: %s\n", args); + break; + } +} + +// Allow hosting applications to capture the messages and deal with them themselves. +void (*ctl_cmsg)(int type, int verbosity_level, const char* fmt, ...) = default_ctl_cmsg; } diff --git a/src/sound/timiditypp/controls.h b/src/sound/timiditypp/controls.h index d82f0a0ba4..b7279c201f 100644 --- a/src/sound/timiditypp/controls.h +++ b/src/sound/timiditypp/controls.h @@ -52,7 +52,7 @@ inline bool RC_IS_SKIP_FILE(int rc) } -void ctl_cmsg(int type, int verbosity_level, const char *fmt, ...); +extern void (*ctl_cmsg)(int type, int verbosity_level, const char* fmt, ...); } diff --git a/src/sound/timiditypp/timidity.h b/src/sound/timiditypp/timidity.h index 59f8f529ee..31db58ac46 100644 --- a/src/sound/timiditypp/timidity.h +++ b/src/sound/timiditypp/timidity.h @@ -174,5 +174,6 @@ const int max_voices = DEFAULT_VOICES; const int temper_type_mute = 0; const int opt_preserve_silence = 0; const int opt_init_keysig = 8; + } #endif /* TIMIDITY_H_INCLUDED */ diff --git a/src/sound/timiditypp/timidity_file.h b/src/sound/timiditypp/timidity_file.h new file mode 100644 index 0000000000..2798f2763d --- /dev/null +++ b/src/sound/timiditypp/timidity_file.h @@ -0,0 +1,133 @@ +/* + TiMidity++ -- File interface for the pure sequencer. + Copyright (C) 2019 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 2 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, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#pragma once +#include +#include +#include + +namespace TimidityPlus +{ + +struct timidity_file +{ + std::string filename; + + virtual ~timidity_file() {} + virtual char* gets(char* buff, int n) = 0; + virtual long read(void* buff, int32_t size, int32_t nitems) = 0; + virtual long seek(long offset, int whence) = 0; + virtual long tell() = 0; +}; + +class SoundFontReaderInterface +{ +public: + virtual struct timidity_file* open_timidityplus_file(const char* fn) = 0; + virtual void timidityplus_add_path(const char* path) = 0; +}; + + +// A minimalistic sound font reader interface. Normally this should be replaced with something better tied into the host application. +#ifdef USE_BASE_INTERFACE + +// Base version of timidity_file using stdio's FILE. +struct timidity_file_FILE : public timidity_file +{ + FILE* f = nullptr; + + ~timidity_file_FILE() + { + if (f) fclose(f); + } + char* gets(char* buff, int n) override + { + if (!f) return nullptr; + return fgets(buff, n, f); + } + long read(void* buff, int32_t size, int32_t nitems) override + { + if (!f) return 0; + return (long)fread(buff, size, nitems, f); + } + long seek(long offset, int whence) override + { + if (!f) return 0; + return fseek(f, offset, whence); + } + long tell() override + { + if (!f) return 0; + return ftell(f); + } +}; + +class BaseSoundFontReader : public SoundFontReaderInterface +{ + std::vector paths; + + bool IsAbsPath(const char *name) + { + if (name[0] == '/' || name[0] == '\\') return true; + #ifdef _WIN32 + /* [A-Za-z]: (for Windows) */ + if (isalpha(name[0]) && name[1] == ':') return true; + #endif /* _WIN32 */ + return 0; + } + + struct timidity_file* open_timidityplus_file(const char* fn) + { + FILE *f = nullptr; + std::string fullname; + if (!fn) + { + f = fopen("timidity.cfg", "rt"); + fullname = "timidity.cfg"; + } + else + { + if (!IsAbsPath(fn)) + { + for(int i = (int)paths.size()-1; i>=0; i--) + { + fullname = paths[i] + fn; + f = fopen(fullname.c_str(), "rt"); + break; + } + } + if (!f) f = fopen(fn, "rt"); + } + if (!f) return nullptr; + auto tf = new timidity_file_FILE; + tf->f = f; + tf->filename = fullname; + return tf; + } + + void timidityplus_add_path(const char* path) + { + std::string p = path; + if (p.back() != '/' && p.back() != '\\') p += '/'; // always let it end with a slash. + paths.push_back(p); + } +}; +#endif + +} From 115d1cb182168bb2c8c29a3650dfc33b08e3e6cb Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 23 Sep 2019 14:27:43 +0200 Subject: [PATCH 7/7] - made the Timidity++ backend a library, now that it has no dependencies on GZDoom anymore. --- CMakeLists.txt | 2 ++ libraries/timidityplus/CMakeLists.txt | 36 +++++++++++++++++++ .../timidityplus}/common.cpp | 1 + .../timidityplus}/configfile.cpp | 0 .../timidityplus}/effect.cpp | 0 .../timidityplus}/fft4g.cpp | 0 .../timidityplus}/filter.cpp | 0 .../timidityplus}/freq.cpp | 0 .../timidityplus}/instrum.cpp | 0 .../timidityplus}/mblock.cpp | 0 .../timidityplus}/mix.cpp | 0 .../timidityplus}/playmidi.cpp | 1 + .../timidityplus}/quantity.cpp | 0 .../timidityplus}/readmidic.cpp | 0 .../timidityplus}/recache.cpp | 0 .../timidityplus}/resample.cpp | 0 .../timidityplus}/reverb.cpp | 0 .../timidityplus}/sbkconv.cpp | 0 .../timidityplus}/sffile.cpp | 0 .../timidityplus}/sfitem.cpp | 0 .../timidityplus}/smplfile.cpp | 0 .../timidityplus}/sndfont.cpp | 0 .../timidityplus}/tables.cpp | 0 .../timidityplus}/timiditypp/common.h | 0 .../timidityplus}/timiditypp/controls.h | 0 .../timidityplus}/timiditypp/effect.h | 0 .../timidityplus}/timiditypp/fft4g.h | 0 .../timidityplus}/timiditypp/filter.h | 0 .../timidityplus}/timiditypp/freq.h | 0 .../timidityplus}/timiditypp/instrum.h | 0 .../timidityplus}/timiditypp/mblock.h | 0 .../timidityplus}/timiditypp/mix.h | 0 .../timidityplus}/timiditypp/optcode.h | 0 .../timidityplus}/timiditypp/playmidi.h | 0 .../timidityplus}/timiditypp/quantity.h | 0 .../timidityplus}/timiditypp/recache.h | 0 .../timidityplus}/timiditypp/resample.h | 0 .../timidityplus}/timiditypp/reverb.h | 0 .../timidityplus}/timiditypp/sffile.h | 0 .../timidityplus}/timiditypp/sfitem.h | 0 .../timidityplus}/timiditypp/sflayer.h | 0 .../timidityplus}/timiditypp/sysdep.h | 0 .../timidityplus}/timiditypp/t_swap.h | 0 .../timidityplus}/timiditypp/tables.h | 0 .../timidityplus}/timiditypp/timidity.h | 0 .../timidityplus}/timiditypp/timidity_file.h | 0 src/CMakeLists.txt | 27 ++------------ 47 files changed, 42 insertions(+), 25 deletions(-) create mode 100644 libraries/timidityplus/CMakeLists.txt rename {src/sound/timiditypp => libraries/timidityplus}/common.cpp (99%) rename {src/sound/timiditypp => libraries/timidityplus}/configfile.cpp (100%) rename {src/sound/timiditypp => libraries/timidityplus}/effect.cpp (100%) rename {src/sound/timiditypp => libraries/timidityplus}/fft4g.cpp (100%) rename {src/sound/timiditypp => libraries/timidityplus}/filter.cpp (100%) rename {src/sound/timiditypp => libraries/timidityplus}/freq.cpp (100%) rename {src/sound/timiditypp => libraries/timidityplus}/instrum.cpp (100%) rename {src/sound/timiditypp => libraries/timidityplus}/mblock.cpp (100%) rename {src/sound/timiditypp => libraries/timidityplus}/mix.cpp (100%) rename {src/sound/timiditypp => libraries/timidityplus}/playmidi.cpp (99%) rename {src/sound/timiditypp => libraries/timidityplus}/quantity.cpp (100%) rename {src/sound/timiditypp => libraries/timidityplus}/readmidic.cpp (100%) rename {src/sound/timiditypp => libraries/timidityplus}/recache.cpp (100%) rename {src/sound/timiditypp => libraries/timidityplus}/resample.cpp (100%) rename {src/sound/timiditypp => libraries/timidityplus}/reverb.cpp (100%) rename {src/sound/timiditypp => libraries/timidityplus}/sbkconv.cpp (100%) rename {src/sound/timiditypp => libraries/timidityplus}/sffile.cpp (100%) rename {src/sound/timiditypp => libraries/timidityplus}/sfitem.cpp (100%) rename {src/sound/timiditypp => libraries/timidityplus}/smplfile.cpp (100%) rename {src/sound/timiditypp => libraries/timidityplus}/sndfont.cpp (100%) rename {src/sound/timiditypp => libraries/timidityplus}/tables.cpp (100%) rename {src/sound => libraries/timidityplus}/timiditypp/common.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/controls.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/effect.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/fft4g.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/filter.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/freq.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/instrum.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/mblock.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/mix.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/optcode.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/playmidi.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/quantity.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/recache.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/resample.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/reverb.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/sffile.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/sfitem.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/sflayer.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/sysdep.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/t_swap.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/tables.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/timidity.h (100%) rename {src/sound => libraries/timidityplus}/timiditypp/timidity_file.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6dc631d682..5647cf0d3a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -385,6 +385,7 @@ endif() set( LZMA_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libraries/lzma/C" ) set( ADL_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libraries/adlmidi" ) set( OPN_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libraries/opnmidi" ) +set( TIMIDITYPP_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libraries/timidityplus" ) if( NOT CMAKE_CROSSCOMPILING ) if( NOT CROSS_EXPORTS ) @@ -408,6 +409,7 @@ add_subdirectory( libraries/dumb ) add_subdirectory( libraries/gdtoa ) add_subdirectory( libraries/adlmidi ) add_subdirectory( libraries/opnmidi ) +add_subdirectory( libraries/timidityplus ) add_subdirectory( wadsrc ) add_subdirectory( wadsrc_bm ) add_subdirectory( wadsrc_lights ) diff --git a/libraries/timidityplus/CMakeLists.txt b/libraries/timidityplus/CMakeLists.txt new file mode 100644 index 0000000000..8ef8983d9b --- /dev/null +++ b/libraries/timidityplus/CMakeLists.txt @@ -0,0 +1,36 @@ +cmake_minimum_required( VERSION 2.8.7 ) + +make_release_only() + +if( ZD_CMAKE_COMPILER_IS_GNUC_COMPATIBLE ) + set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wno-unused-parameter -fomit-frame-pointer" ) +endif() + +set (CMAKE_C_FLAGS ${CMAKE_C_FLAGS} ${ZD_FASTMATH_FLAG}) + +include_directories( timiditypp ) + +add_library( timidityplus STATIC + fft4g.cpp + reverb.cpp + common.cpp + configfile.cpp + effect.cpp + filter.cpp + freq.cpp + instrum.cpp + mblock.cpp + mix.cpp + playmidi.cpp + quantity.cpp + readmidic.cpp + recache.cpp + resample.cpp + sbkconv.cpp + sffile.cpp + sfitem.cpp + smplfile.cpp + sndfont.cpp + tables.cpp + ) +target_link_libraries( timidityplus ) diff --git a/src/sound/timiditypp/common.cpp b/libraries/timidityplus/common.cpp similarity index 99% rename from src/sound/timiditypp/common.cpp rename to libraries/timidityplus/common.cpp index 87ce4d13ec..f4908b93a3 100644 --- a/src/sound/timiditypp/common.cpp +++ b/libraries/timidityplus/common.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include diff --git a/src/sound/timiditypp/configfile.cpp b/libraries/timidityplus/configfile.cpp similarity index 100% rename from src/sound/timiditypp/configfile.cpp rename to libraries/timidityplus/configfile.cpp diff --git a/src/sound/timiditypp/effect.cpp b/libraries/timidityplus/effect.cpp similarity index 100% rename from src/sound/timiditypp/effect.cpp rename to libraries/timidityplus/effect.cpp diff --git a/src/sound/timiditypp/fft4g.cpp b/libraries/timidityplus/fft4g.cpp similarity index 100% rename from src/sound/timiditypp/fft4g.cpp rename to libraries/timidityplus/fft4g.cpp diff --git a/src/sound/timiditypp/filter.cpp b/libraries/timidityplus/filter.cpp similarity index 100% rename from src/sound/timiditypp/filter.cpp rename to libraries/timidityplus/filter.cpp diff --git a/src/sound/timiditypp/freq.cpp b/libraries/timidityplus/freq.cpp similarity index 100% rename from src/sound/timiditypp/freq.cpp rename to libraries/timidityplus/freq.cpp diff --git a/src/sound/timiditypp/instrum.cpp b/libraries/timidityplus/instrum.cpp similarity index 100% rename from src/sound/timiditypp/instrum.cpp rename to libraries/timidityplus/instrum.cpp diff --git a/src/sound/timiditypp/mblock.cpp b/libraries/timidityplus/mblock.cpp similarity index 100% rename from src/sound/timiditypp/mblock.cpp rename to libraries/timidityplus/mblock.cpp diff --git a/src/sound/timiditypp/mix.cpp b/libraries/timidityplus/mix.cpp similarity index 100% rename from src/sound/timiditypp/mix.cpp rename to libraries/timidityplus/mix.cpp diff --git a/src/sound/timiditypp/playmidi.cpp b/libraries/timidityplus/playmidi.cpp similarity index 99% rename from src/sound/timiditypp/playmidi.cpp rename to libraries/timidityplus/playmidi.cpp index 4f0297f66b..f87b3c2bb0 100644 --- a/src/sound/timiditypp/playmidi.cpp +++ b/libraries/timidityplus/playmidi.cpp @@ -22,6 +22,7 @@ #include #include +#include #include #include diff --git a/src/sound/timiditypp/quantity.cpp b/libraries/timidityplus/quantity.cpp similarity index 100% rename from src/sound/timiditypp/quantity.cpp rename to libraries/timidityplus/quantity.cpp diff --git a/src/sound/timiditypp/readmidic.cpp b/libraries/timidityplus/readmidic.cpp similarity index 100% rename from src/sound/timiditypp/readmidic.cpp rename to libraries/timidityplus/readmidic.cpp diff --git a/src/sound/timiditypp/recache.cpp b/libraries/timidityplus/recache.cpp similarity index 100% rename from src/sound/timiditypp/recache.cpp rename to libraries/timidityplus/recache.cpp diff --git a/src/sound/timiditypp/resample.cpp b/libraries/timidityplus/resample.cpp similarity index 100% rename from src/sound/timiditypp/resample.cpp rename to libraries/timidityplus/resample.cpp diff --git a/src/sound/timiditypp/reverb.cpp b/libraries/timidityplus/reverb.cpp similarity index 100% rename from src/sound/timiditypp/reverb.cpp rename to libraries/timidityplus/reverb.cpp diff --git a/src/sound/timiditypp/sbkconv.cpp b/libraries/timidityplus/sbkconv.cpp similarity index 100% rename from src/sound/timiditypp/sbkconv.cpp rename to libraries/timidityplus/sbkconv.cpp diff --git a/src/sound/timiditypp/sffile.cpp b/libraries/timidityplus/sffile.cpp similarity index 100% rename from src/sound/timiditypp/sffile.cpp rename to libraries/timidityplus/sffile.cpp diff --git a/src/sound/timiditypp/sfitem.cpp b/libraries/timidityplus/sfitem.cpp similarity index 100% rename from src/sound/timiditypp/sfitem.cpp rename to libraries/timidityplus/sfitem.cpp diff --git a/src/sound/timiditypp/smplfile.cpp b/libraries/timidityplus/smplfile.cpp similarity index 100% rename from src/sound/timiditypp/smplfile.cpp rename to libraries/timidityplus/smplfile.cpp diff --git a/src/sound/timiditypp/sndfont.cpp b/libraries/timidityplus/sndfont.cpp similarity index 100% rename from src/sound/timiditypp/sndfont.cpp rename to libraries/timidityplus/sndfont.cpp diff --git a/src/sound/timiditypp/tables.cpp b/libraries/timidityplus/tables.cpp similarity index 100% rename from src/sound/timiditypp/tables.cpp rename to libraries/timidityplus/tables.cpp diff --git a/src/sound/timiditypp/common.h b/libraries/timidityplus/timiditypp/common.h similarity index 100% rename from src/sound/timiditypp/common.h rename to libraries/timidityplus/timiditypp/common.h diff --git a/src/sound/timiditypp/controls.h b/libraries/timidityplus/timiditypp/controls.h similarity index 100% rename from src/sound/timiditypp/controls.h rename to libraries/timidityplus/timiditypp/controls.h diff --git a/src/sound/timiditypp/effect.h b/libraries/timidityplus/timiditypp/effect.h similarity index 100% rename from src/sound/timiditypp/effect.h rename to libraries/timidityplus/timiditypp/effect.h diff --git a/src/sound/timiditypp/fft4g.h b/libraries/timidityplus/timiditypp/fft4g.h similarity index 100% rename from src/sound/timiditypp/fft4g.h rename to libraries/timidityplus/timiditypp/fft4g.h diff --git a/src/sound/timiditypp/filter.h b/libraries/timidityplus/timiditypp/filter.h similarity index 100% rename from src/sound/timiditypp/filter.h rename to libraries/timidityplus/timiditypp/filter.h diff --git a/src/sound/timiditypp/freq.h b/libraries/timidityplus/timiditypp/freq.h similarity index 100% rename from src/sound/timiditypp/freq.h rename to libraries/timidityplus/timiditypp/freq.h diff --git a/src/sound/timiditypp/instrum.h b/libraries/timidityplus/timiditypp/instrum.h similarity index 100% rename from src/sound/timiditypp/instrum.h rename to libraries/timidityplus/timiditypp/instrum.h diff --git a/src/sound/timiditypp/mblock.h b/libraries/timidityplus/timiditypp/mblock.h similarity index 100% rename from src/sound/timiditypp/mblock.h rename to libraries/timidityplus/timiditypp/mblock.h diff --git a/src/sound/timiditypp/mix.h b/libraries/timidityplus/timiditypp/mix.h similarity index 100% rename from src/sound/timiditypp/mix.h rename to libraries/timidityplus/timiditypp/mix.h diff --git a/src/sound/timiditypp/optcode.h b/libraries/timidityplus/timiditypp/optcode.h similarity index 100% rename from src/sound/timiditypp/optcode.h rename to libraries/timidityplus/timiditypp/optcode.h diff --git a/src/sound/timiditypp/playmidi.h b/libraries/timidityplus/timiditypp/playmidi.h similarity index 100% rename from src/sound/timiditypp/playmidi.h rename to libraries/timidityplus/timiditypp/playmidi.h diff --git a/src/sound/timiditypp/quantity.h b/libraries/timidityplus/timiditypp/quantity.h similarity index 100% rename from src/sound/timiditypp/quantity.h rename to libraries/timidityplus/timiditypp/quantity.h diff --git a/src/sound/timiditypp/recache.h b/libraries/timidityplus/timiditypp/recache.h similarity index 100% rename from src/sound/timiditypp/recache.h rename to libraries/timidityplus/timiditypp/recache.h diff --git a/src/sound/timiditypp/resample.h b/libraries/timidityplus/timiditypp/resample.h similarity index 100% rename from src/sound/timiditypp/resample.h rename to libraries/timidityplus/timiditypp/resample.h diff --git a/src/sound/timiditypp/reverb.h b/libraries/timidityplus/timiditypp/reverb.h similarity index 100% rename from src/sound/timiditypp/reverb.h rename to libraries/timidityplus/timiditypp/reverb.h diff --git a/src/sound/timiditypp/sffile.h b/libraries/timidityplus/timiditypp/sffile.h similarity index 100% rename from src/sound/timiditypp/sffile.h rename to libraries/timidityplus/timiditypp/sffile.h diff --git a/src/sound/timiditypp/sfitem.h b/libraries/timidityplus/timiditypp/sfitem.h similarity index 100% rename from src/sound/timiditypp/sfitem.h rename to libraries/timidityplus/timiditypp/sfitem.h diff --git a/src/sound/timiditypp/sflayer.h b/libraries/timidityplus/timiditypp/sflayer.h similarity index 100% rename from src/sound/timiditypp/sflayer.h rename to libraries/timidityplus/timiditypp/sflayer.h diff --git a/src/sound/timiditypp/sysdep.h b/libraries/timidityplus/timiditypp/sysdep.h similarity index 100% rename from src/sound/timiditypp/sysdep.h rename to libraries/timidityplus/timiditypp/sysdep.h diff --git a/src/sound/timiditypp/t_swap.h b/libraries/timidityplus/timiditypp/t_swap.h similarity index 100% rename from src/sound/timiditypp/t_swap.h rename to libraries/timidityplus/timiditypp/t_swap.h diff --git a/src/sound/timiditypp/tables.h b/libraries/timidityplus/timiditypp/tables.h similarity index 100% rename from src/sound/timiditypp/tables.h rename to libraries/timidityplus/timiditypp/tables.h diff --git a/src/sound/timiditypp/timidity.h b/libraries/timidityplus/timiditypp/timidity.h similarity index 100% rename from src/sound/timiditypp/timidity.h rename to libraries/timidityplus/timiditypp/timidity.h diff --git a/src/sound/timiditypp/timidity_file.h b/libraries/timidityplus/timiditypp/timidity_file.h similarity index 100% rename from src/sound/timiditypp/timidity_file.h rename to libraries/timidityplus/timiditypp/timidity_file.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4b7dc1951b..136f73002b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -468,7 +468,7 @@ set( ZDOOM_LIBS ${ZDOOM_LIBS} "${ZLIB_LIBRARIES}" "${JPEG_LIBRARIES}" "${BZIP2_L if (HAVE_VULKAN) set( ZDOOM_LIBS ${ZDOOM_LIBS} "glslang" "SPIRV" "OGLCompiler") endif() -include_directories( "${ZLIB_INCLUDE_DIR}" "${BZIP2_INCLUDE_DIR}" "${LZMA_INCLUDE_DIR}" "${JPEG_INCLUDE_DIR}" "${GME_INCLUDE_DIR}" "${ADL_INCLUDE_DIR}" "${OPN_INCLUDE_DIR}" ) +include_directories( "${ZLIB_INCLUDE_DIR}" "${BZIP2_INCLUDE_DIR}" "${LZMA_INCLUDE_DIR}" "${JPEG_INCLUDE_DIR}" "${GME_INCLUDE_DIR}" "${ADL_INCLUDE_DIR}" "${OPN_INCLUDE_DIR}" "${TIMIDITYPP_INCLUDE_DIR}" ) if( ${HAVE_VM_JIT} ) add_definitions( -DHAVE_VM_JIT ) @@ -694,7 +694,6 @@ file( GLOB HEADER_FILES sound/oplsynth/dosbox/*.h sound/thirdparty/*.h sound/timidity/*.h - sound/timiditypp/*.h sound/wildmidi/*.h rendering/*.h rendering/2d/*.h @@ -846,8 +845,6 @@ set( FASTMATH_SOURCES sound/music/music_midi_base.cpp sound/backend/oalsound.cpp sound/backend/sndfile_decoder.cpp - sound/timiditypp/fft4g.cpp - sound/timiditypp/reverb.cpp gamedata/textures/hires/hqnx/init.cpp gamedata/textures/hires/hqnx/hq2x.cpp gamedata/textures/hires/hqnx/hq3x.cpp @@ -1232,25 +1229,6 @@ set (PCH_SOURCES sound/timidity/playmidi.cpp sound/timidity/resample.cpp sound/timidity/timidity.cpp - sound/timiditypp/common.cpp - sound/timiditypp/configfile.cpp - sound/timiditypp/effect.cpp - sound/timiditypp/filter.cpp - sound/timiditypp/freq.cpp - sound/timiditypp/instrum.cpp - sound/timiditypp/mblock.cpp - sound/timiditypp/mix.cpp - sound/timiditypp/playmidi.cpp - sound/timiditypp/quantity.cpp - sound/timiditypp/readmidic.cpp - sound/timiditypp/recache.cpp - sound/timiditypp/resample.cpp - sound/timiditypp/sbkconv.cpp - sound/timiditypp/sffile.cpp - sound/timiditypp/sfitem.cpp - sound/timiditypp/smplfile.cpp - sound/timiditypp/sndfont.cpp - sound/timiditypp/tables.cpp sound/wildmidi/file_io.cpp sound/wildmidi/gus_pat.cpp sound/wildmidi/reverb.cpp @@ -1352,7 +1330,7 @@ if( UNIX ) endif() endif() -target_link_libraries( zdoom ${ZDOOM_LIBS} gdtoa dumb lzma adl opn ) +target_link_libraries( zdoom ${ZDOOM_LIBS} gdtoa dumb lzma adl opn timidityplus ) include_directories( . g_statusbar @@ -1484,7 +1462,6 @@ source_group("Audio Files\\Backend" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_ source_group("Audio Files\\OPL Synth" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/sound/oplsynth/.+") source_group("Audio Files\\OPL Synth\\DOSBox" FILES sound/oplsynth/dosbox/opl.cpp sound/oplsynth/dosbox/opl.h) source_group("Audio Files\\Timidity" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/sound/timidity/.+") -source_group("Audio Files\\Timiditypp" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/sound/timiditypp/.+") source_group("Audio Files\\WildMidi" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/sound/wildmidi/.+") source_group("Audio Files\\MIDI Devices" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/sound/mididevices/.+") source_group("Audio Files\\MIDI Sources" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/sound/midisources/.+")