diff --git a/CMakeLists.txt b/CMakeLists.txt index 5cf7f6b3e0..94b21aa917 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -389,6 +389,7 @@ set( TIMIDITYPP_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libraries/timidityplus" set( TIMIDITY_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libraries/timidity" ) set( WILDMIDI_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libraries/wildmidi" ) set( OPLSYNTH_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libraries/oplsynth" ) +set( ZMUSIC_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libraries/zmusic" ) if( NOT CMAKE_CROSSCOMPILING ) if( NOT CROSS_EXPORTS ) @@ -416,6 +417,7 @@ add_subdirectory( libraries/timidity ) add_subdirectory( libraries/timidityplus ) add_subdirectory( libraries/wildmidi ) add_subdirectory( libraries/oplsynth ) +add_subdirectory( libraries/zmusic ) add_subdirectory( wadsrc ) add_subdirectory( wadsrc_bm ) add_subdirectory( wadsrc_lights ) diff --git a/libraries/oplsynth/oplsynth/oplio.h b/libraries/oplsynth/oplsynth/oplio.h index 604c6422fe..92be980cb7 100644 --- a/libraries/oplsynth/oplsynth/oplio.h +++ b/libraries/oplsynth/oplsynth/oplio.h @@ -55,6 +55,7 @@ enum }; struct GenMidiVoice; +struct genmidi_op_t; struct OPLio { diff --git a/libraries/zmusic/CMakeLists.txt b/libraries/zmusic/CMakeLists.txt new file mode 100644 index 0000000000..d57e48cc7c --- /dev/null +++ b/libraries/zmusic/CMakeLists.txt @@ -0,0 +1,58 @@ +cmake_minimum_required( VERSION 2.8.7 ) + +if( ZD_CMAKE_COMPILER_IS_GNUC_COMPATIBLE ) + set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wno-unused-parameter -fomit-frame-pointer" ) + set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" ) +endif() + +set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ZD_FASTMATH_FLAG}") + +include( CheckFunctionExists ) + +option( DYN_FLUIDSYNTH "Dynamically load fluidsynth" ON ) + +CHECK_FUNCTION_EXISTS( stricmp STRICMP_EXISTS ) +if( NOT STRICMP_EXISTS ) + add_definitions( -Dstricmp=strcasecmp ) +endif() + +CHECK_FUNCTION_EXISTS( strnicmp STRNICMP_EXISTS ) +if( NOT STRNICMP_EXISTS ) + add_definitions( -Dstrnicmp=strncasecmp ) +endif() + +include_directories( "${ADL_INCLUDE_DIR}" "${OPN_INCLUDE_DIR}" "${TIMIDITYPP_INCLUDE_DIR}" "${TIMIDITY_INCLUDE_DIR}" "${WILDMIDI_INCLUDE_DIR}" "${OPLSYNTH_INCLUDE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}" ) + +if (WIN32) +set( PLAT_WIN32_SOURCES + mididevices/music_win_mididevice.cpp) +endif() + +file( GLOB HEADER_FILES + zmusic/*.h + ) +add_library( zmusic STATIC + i_module.cpp + mididevices/music_base_mididevice.cpp + mididevices/music_adlmidi_mididevice.cpp + mididevices/music_opl_mididevice.cpp + mididevices/music_opnmidi_mididevice.cpp + mididevices/music_timiditypp_mididevice.cpp + mididevices/music_fluidsynth_mididevice.cpp + mididevices/music_softsynth_mididevice.cpp + mididevices/music_timidity_mididevice.cpp + mididevices/music_wildmidi_mididevice.cpp + mididevices/music_wavewriter_mididevice.cpp + midisources/midisource.cpp + midisources/midisource_mus.cpp + midisources/midisource_smf.cpp + midisources/midisource_hmi.cpp + midisources/midisource_xmi.cpp + ${PLAT_WIN32_SOURCES} + ) +target_link_libraries( zmusic ) + + +source_group("MIDI Devices" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/mididevices/.+") +source_group("MIDI Sources" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/midisources/.+") +source_group("MIDI Headers" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/zmusic/.+") diff --git a/src/utility/i_module.cpp b/libraries/zmusic/i_module.cpp similarity index 100% rename from src/utility/i_module.cpp rename to libraries/zmusic/i_module.cpp diff --git a/src/utility/i_module.h b/libraries/zmusic/i_module.h similarity index 100% rename from src/utility/i_module.h rename to libraries/zmusic/i_module.h diff --git a/src/sound/mididevices/mididevice.h b/libraries/zmusic/mididevices/mididevice.h similarity index 95% rename from src/sound/mididevices/mididevice.h rename to libraries/zmusic/mididevices/mididevice.h index 4923f755ec..209321c2f1 100644 --- a/src/sound/mididevices/mididevice.h +++ b/libraries/zmusic/mididevices/mididevice.h @@ -1,29 +1,16 @@ #pragma once #include -#include "midiconfig.h" -#include "mididefs.h" +#include "zmusic/midiconfig.h" +#include "zmusic/mididefs.h" + +#include "mididevices/mididevice.h" void TimidityPP_Shutdown(); typedef void(*MidiCallback)(void *); // A device that provides a WinMM-like MIDI streaming interface ------------- -enum EMidiDevice -{ - MDEV_DEFAULT = -1, - MDEV_MMAPI = 0, - MDEV_OPL = 1, - MDEV_SNDSYS = 2, - MDEV_TIMIDITY = 3, - MDEV_FLUIDSYNTH = 4, - MDEV_GUS = 5, - MDEV_WILDMIDI = 6, - MDEV_ADL = 7, - MDEV_OPN = 8, - - MDEV_COUNT -}; struct MidiHeader { diff --git a/src/sound/mididevices/music_adlmidi_mididevice.cpp b/libraries/zmusic/mididevices/music_adlmidi_mididevice.cpp similarity index 100% rename from src/sound/mididevices/music_adlmidi_mididevice.cpp rename to libraries/zmusic/mididevices/music_adlmidi_mididevice.cpp diff --git a/src/sound/mididevices/music_base_mididevice.cpp b/libraries/zmusic/mididevices/music_base_mididevice.cpp similarity index 100% rename from src/sound/mididevices/music_base_mididevice.cpp rename to libraries/zmusic/mididevices/music_base_mididevice.cpp diff --git a/src/sound/mididevices/music_fluidsynth_mididevice.cpp b/libraries/zmusic/mididevices/music_fluidsynth_mididevice.cpp similarity index 99% rename from src/sound/mididevices/music_fluidsynth_mididevice.cpp rename to libraries/zmusic/mididevices/music_fluidsynth_mididevice.cpp index cc491d3194..d8962d69f3 100644 --- a/src/sound/mididevices/music_fluidsynth_mididevice.cpp +++ b/libraries/zmusic/mididevices/music_fluidsynth_mididevice.cpp @@ -37,11 +37,15 @@ #include #include #include "mididevice.h" -#include "mus2midi.h" +#include "zmusic/mus2midi.h" // FluidSynth implementation of a MIDI device ------------------------------- -#ifndef DYN_FLUIDSYNTH +#if !defined DYN_FLUIDSYNTH && defined _WIN32 +#define DYN_FLUIDSYNTH 1 // On Windows this is the only supported way to link to FluidSynth. +#endif + +#if !defined DYN_FLUIDSYNTH #include #else #include "i_module.h" diff --git a/src/sound/mididevices/music_opl_mididevice.cpp b/libraries/zmusic/mididevices/music_opl_mididevice.cpp similarity index 99% rename from src/sound/mididevices/music_opl_mididevice.cpp rename to libraries/zmusic/mididevices/music_opl_mididevice.cpp index bc6bdad656..fa78434abe 100644 --- a/src/sound/mididevices/music_opl_mididevice.cpp +++ b/libraries/zmusic/mididevices/music_opl_mididevice.cpp @@ -36,7 +36,7 @@ // HEADER FILES ------------------------------------------------------------ #include "mididevice.h" -#include "mus2midi.h" +#include "zmusic/mus2midi.h" #include "oplsynth/opl.h" #include "oplsynth/opl_mus_player.h" diff --git a/src/sound/mididevices/music_opnmidi_mididevice.cpp b/libraries/zmusic/mididevices/music_opnmidi_mididevice.cpp similarity index 100% rename from src/sound/mididevices/music_opnmidi_mididevice.cpp rename to libraries/zmusic/mididevices/music_opnmidi_mididevice.cpp diff --git a/src/sound/mididevices/music_softsynth_mididevice.cpp b/libraries/zmusic/mididevices/music_softsynth_mididevice.cpp similarity index 99% rename from src/sound/mididevices/music_softsynth_mididevice.cpp rename to libraries/zmusic/mididevices/music_softsynth_mididevice.cpp index cc178ae34d..1ae91d9413 100644 --- a/src/sound/mididevices/music_softsynth_mididevice.cpp +++ b/libraries/zmusic/mididevices/music_softsynth_mididevice.cpp @@ -35,6 +35,8 @@ // HEADER FILES ------------------------------------------------------------ #include +#include +#include #include "mididevice.h" // MACROS ------------------------------------------------------------------ diff --git a/src/sound/mididevices/music_timidity_mididevice.cpp b/libraries/zmusic/mididevices/music_timidity_mididevice.cpp similarity index 97% rename from src/sound/mididevices/music_timidity_mididevice.cpp rename to libraries/zmusic/mididevices/music_timidity_mididevice.cpp index 56321262bb..7d718f8c61 100644 --- a/src/sound/mididevices/music_timidity_mididevice.cpp +++ b/libraries/zmusic/mididevices/music_timidity_mididevice.cpp @@ -93,16 +93,16 @@ void TimidityMIDIDevice::LoadInstruments(GUSConfig *config) if (config->dmxgus.size()) { // Check if we got some GUS data before using it. - FString ultradir = getenv("ULTRADIR"); - if (ultradir.IsNotEmpty() || config->gus_patchdir.length() != 0) + std::string ultradir = getenv("ULTRADIR"); + if (ultradir.length() || config->gus_patchdir.length() != 0) { auto psreader = new Timidity::BaseSoundFontReader; // The GUS put its patches in %ULTRADIR%/MIDI so we can try that - if (ultradir.IsNotEmpty()) + if (ultradir.length()) { ultradir += "/midi"; - psreader->timidity_add_path(ultradir); + psreader->timidity_add_path(ultradir.c_str()); } // Load DMXGUS lump and patches from gus_patchdir if (config->gus_patchdir.length() != 0) psreader->timidity_add_path(config->gus_patchdir.c_str()); diff --git a/src/sound/mididevices/music_timiditypp_mididevice.cpp b/libraries/zmusic/mididevices/music_timiditypp_mididevice.cpp similarity index 100% rename from src/sound/mididevices/music_timiditypp_mididevice.cpp rename to libraries/zmusic/mididevices/music_timiditypp_mididevice.cpp diff --git a/src/sound/mididevices/music_wavewriter_mididevice.cpp b/libraries/zmusic/mididevices/music_wavewriter_mididevice.cpp similarity index 99% rename from src/sound/mididevices/music_wavewriter_mididevice.cpp rename to libraries/zmusic/mididevices/music_wavewriter_mididevice.cpp index 1c360c5b39..17066cbce4 100644 --- a/src/sound/mididevices/music_wavewriter_mididevice.cpp +++ b/libraries/zmusic/mididevices/music_wavewriter_mididevice.cpp @@ -36,7 +36,7 @@ // HEADER FILES ------------------------------------------------------------ #include "mididevice.h" -#include "m_swap.h" +#include "zmusic/m_swap.h" #include // MACROS ------------------------------------------------------------------ @@ -184,8 +184,8 @@ bool MIDIWaveWriter::CloseFile() } fclose(File); File = nullptr; - return false; } + return false; } //========================================================================== diff --git a/src/sound/mididevices/music_wildmidi_mididevice.cpp b/libraries/zmusic/mididevices/music_wildmidi_mididevice.cpp similarity index 100% rename from src/sound/mididevices/music_wildmidi_mididevice.cpp rename to libraries/zmusic/mididevices/music_wildmidi_mididevice.cpp diff --git a/src/sound/mididevices/music_win_mididevice.cpp b/libraries/zmusic/mididevices/music_win_mididevice.cpp similarity index 99% rename from src/sound/mididevices/music_win_mididevice.cpp rename to libraries/zmusic/mididevices/music_win_mididevice.cpp index 6ef9bfc816..11b6fc7012 100644 --- a/src/sound/mididevices/music_win_mididevice.cpp +++ b/libraries/zmusic/mididevices/music_win_mididevice.cpp @@ -44,8 +44,8 @@ // HEADER FILES ------------------------------------------------------------ #include "mididevice.h" -#include "m_swap.h" -#include "mus2midi.h" +#include "zmusic/m_swap.h" +#include "zmusic/mus2midi.h" #ifndef __GNUC__ #include diff --git a/src/sound/midisources/midisource.cpp b/libraries/zmusic/midisources/midisource.cpp similarity index 100% rename from src/sound/midisources/midisource.cpp rename to libraries/zmusic/midisources/midisource.cpp diff --git a/src/sound/midisources/midisource.h b/libraries/zmusic/midisources/midisource.h similarity index 98% rename from src/sound/midisources/midisource.h rename to libraries/zmusic/midisources/midisource.h index 41b3942045..42f7690d83 100644 --- a/src/sound/midisources/midisource.h +++ b/libraries/zmusic/midisources/midisource.h @@ -11,8 +11,8 @@ #include #include #include -#include "mididevices/mus2midi.h" -#include "mididevices/mididefs.h" +#include "zmusic/mus2midi.h" +#include "zmusic/mididefs.h" extern char MIDI_EventLengths[7]; extern char MIDI_CommonLengths[15]; diff --git a/src/sound/midisources/midisource_hmi.cpp b/libraries/zmusic/midisources/midisource_hmi.cpp similarity index 99% rename from src/sound/midisources/midisource_hmi.cpp rename to libraries/zmusic/midisources/midisource_hmi.cpp index 65852ac4ed..96fba013e1 100644 --- a/src/sound/midisources/midisource_hmi.cpp +++ b/libraries/zmusic/midisources/midisource_hmi.cpp @@ -35,8 +35,9 @@ // HEADER FILES ------------------------------------------------------------ #include +#include #include "midisource.h" -#include "m_swap.h" +#include "zmusic/m_swap.h" // MACROS ------------------------------------------------------------------ diff --git a/src/sound/midisources/midisource_mus.cpp b/libraries/zmusic/midisources/midisource_mus.cpp similarity index 99% rename from src/sound/midisources/midisource_mus.cpp rename to libraries/zmusic/midisources/midisource_mus.cpp index 350a253569..b5c2dfc8c2 100644 --- a/src/sound/midisources/midisource_mus.cpp +++ b/libraries/zmusic/midisources/midisource_mus.cpp @@ -33,8 +33,9 @@ // HEADER FILES ------------------------------------------------------------ +#include #include "midisource.h" -#include "m_swap.h" +#include "zmusic/m_swap.h" // MACROS ------------------------------------------------------------------ diff --git a/src/sound/midisources/midisource_smf.cpp b/libraries/zmusic/midisources/midisource_smf.cpp similarity index 100% rename from src/sound/midisources/midisource_smf.cpp rename to libraries/zmusic/midisources/midisource_smf.cpp diff --git a/src/sound/midisources/midisource_xmi.cpp b/libraries/zmusic/midisources/midisource_xmi.cpp similarity index 99% rename from src/sound/midisources/midisource_xmi.cpp rename to libraries/zmusic/midisources/midisource_xmi.cpp index faedb944f0..bbb254f881 100644 --- a/src/sound/midisources/midisource_xmi.cpp +++ b/libraries/zmusic/midisources/midisource_xmi.cpp @@ -35,7 +35,7 @@ // HEADER FILES ------------------------------------------------------------ #include "midisource.h" -#include "m_swap.h" +#include "zmusic/m_swap.h" // MACROS ------------------------------------------------------------------ diff --git a/libraries/zmusic/zmusic/m_swap.h b/libraries/zmusic/zmusic/m_swap.h new file mode 100644 index 0000000000..de9b7780a9 --- /dev/null +++ b/libraries/zmusic/zmusic/m_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__ diff --git a/src/sound/mididevices/midiconfig.h b/libraries/zmusic/zmusic/midiconfig.h similarity index 95% rename from src/sound/mididevices/midiconfig.h rename to libraries/zmusic/zmusic/midiconfig.h index 2398da0a92..2f61c7bafa 100644 --- a/src/sound/mididevices/midiconfig.h +++ b/libraries/zmusic/zmusic/midiconfig.h @@ -37,14 +37,12 @@ struct FluidConfig float fluid_chorus_depth = 8; }; -#include "oplsynth/genmidi.h" - struct OPLMidiConfig { int numchips = 2; int core = 0; bool fullpan = true; - struct GenMidiInstrument OPLinstruments[GENMIDI_NUM_TOTAL]; + uint8_t OPLinstruments[36 * 175]; // it really is 'struct GenMidiInstrument OPLinstruments[GENMIDI_NUM_TOTAL]'; but since this is a public header it cannot pull in a dependency from oplsynth. }; struct OpnConfig diff --git a/src/sound/mididevices/mididefs.h b/libraries/zmusic/zmusic/mididefs.h similarity index 74% rename from src/sound/mididevices/mididefs.h rename to libraries/zmusic/zmusic/mididefs.h index f55ce794e4..3b56e67a8c 100644 --- a/src/sound/mididevices/mididefs.h +++ b/libraries/zmusic/zmusic/mididefs.h @@ -29,3 +29,18 @@ enum : uint8_t MEVENT_LONGMSG = 128, }; +enum EMidiDevice +{ + MDEV_DEFAULT = -1, + MDEV_MMAPI = 0, + MDEV_OPL = 1, + MDEV_SNDSYS = 2, + MDEV_TIMIDITY = 3, + MDEV_FLUIDSYNTH = 4, + MDEV_GUS = 5, + MDEV_WILDMIDI = 6, + MDEV_ADL = 7, + MDEV_OPN = 8, + + MDEV_COUNT +}; diff --git a/src/sound/mididevices/mus2midi.h b/libraries/zmusic/zmusic/mus2midi.h similarity index 100% rename from src/sound/mididevices/mus2midi.h rename to libraries/zmusic/zmusic/mus2midi.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 428ee7d3e2..9563e58a02 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -23,7 +23,6 @@ if( ZD_CMAKE_COMPILER_IS_GNUCXX_COMPATIBLE ) endif() endif() -option( DYN_FLUIDSYNTH "Dynamically load fluidsynth" ON ) option( DYN_OPENAL "Dynamically load OpenAL" ON ) option( DYN_SNDFILE "Dynamically load libsndfile" ON ) option( DYN_MPG123 "Dynamically load libmpg123" ON ) @@ -468,7 +467,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}" "${TIMIDITYPP_INCLUDE_DIR}" "${TIMIDITY_INCLUDE_DIR}" "${WILDMIDI_INCLUDE_DIR}" "${OPLSYNTH_INCLUDE_DIR}" ) +include_directories( "${ZLIB_INCLUDE_DIR}" "${BZIP2_INCLUDE_DIR}" "${LZMA_INCLUDE_DIR}" "${JPEG_INCLUDE_DIR}" "${GME_INCLUDE_DIR}" "${ZMUSIC_INCLUDE_DIR}" ) if( ${HAVE_VM_JIT} ) add_definitions( -DHAVE_VM_JIT ) @@ -493,7 +492,6 @@ endif() # Start defining source files for ZDoom set( PLAT_WIN32_SOURCES - sound/mididevices/music_win_mididevice.cpp win32/hardware.cpp win32/helperthread.cpp win32/i_cd.cpp @@ -1185,22 +1183,7 @@ set (PCH_SOURCES sound/music/i_music.cpp sound/music/i_soundfont.cpp sound/backend/i_sound.cpp - sound/mididevices/midi_cvars.cpp - sound/mididevices/music_base_mididevice.cpp - sound/mididevices/music_adlmidi_mididevice.cpp - sound/mididevices/music_opl_mididevice.cpp - sound/mididevices/music_opnmidi_mididevice.cpp - sound/mididevices/music_timiditypp_mididevice.cpp - sound/mididevices/music_fluidsynth_mididevice.cpp - sound/mididevices/music_softsynth_mididevice.cpp - sound/mididevices/music_timidity_mididevice.cpp - sound/mididevices/music_wildmidi_mididevice.cpp - sound/mididevices/music_wavewriter_mididevice.cpp - sound/midisources/midisource.cpp - sound/midisources/midisource_mus.cpp - sound/midisources/midisource_smf.cpp - sound/midisources/midisource_hmi.cpp - sound/midisources/midisource_xmi.cpp + sound/music/midi_cvars.cpp sound/musicformats/music_cd.cpp sound/musicformats/music_dumb.cpp sound/musicformats/music_gme.cpp @@ -1231,7 +1214,6 @@ set (PCH_SOURCES utility/atterm.cpp utility/cmdlib.cpp utility/configfile.cpp - utility/i_module.cpp utility/i_time.cpp utility/m_alloc.cpp utility/m_argv.cpp @@ -1305,7 +1287,7 @@ if( UNIX ) endif() endif() -target_link_libraries( zdoom ${ZDOOM_LIBS} gdtoa dumb lzma adl opn timidity timidityplus wildmidi oplsynth ) +target_link_libraries( zdoom ${ZDOOM_LIBS} gdtoa dumb lzma adl opn timidity timidityplus wildmidi oplsynth zmusic ) include_directories( . g_statusbar @@ -1431,8 +1413,6 @@ install(TARGETS zdoom source_group("Audio Files" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/sound/.+") source_group("Audio Files\\Backend" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/sound/backend/.+") -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/.+") source_group("Audio Files\\Music formats" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/sound/musicformats/.+") source_group("Audio Files\\Third-party" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/sound/thirdparty/.+") source_group("Game Data" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/gamedata/.+") diff --git a/src/sound/backend/oalsound.cpp b/src/sound/backend/oalsound.cpp index 543be26371..b9893c33d6 100644 --- a/src/sound/backend/oalsound.cpp +++ b/src/sound/backend/oalsound.cpp @@ -42,7 +42,6 @@ #include "v_text.h" #include "i_module.h" #include "i_music.h" -#include "i_musicinterns.h" #include "cmdlib.h" #include "menu/menu.h" diff --git a/src/sound/music/i_music.cpp b/src/sound/music/i_music.cpp index a343331235..e57ceebbca 100644 --- a/src/sound/music/i_music.cpp +++ b/src/sound/music/i_music.cpp @@ -45,9 +45,9 @@ #include "c_dispatch.h" #include "templates.h" #include "stats.h" -#include "timidity/timidity.h" #include "vm.h" #include "s_music.h" +#include "..//libraries/zmusic/midisources/midisource.h" diff --git a/src/sound/music/i_music.h b/src/sound/music/i_music.h index 00898adbac..6376c5cd70 100644 --- a/src/sound/music/i_music.h +++ b/src/sound/music/i_music.h @@ -35,6 +35,7 @@ #define __I_MUSIC_H__ #include "doomdef.h" +#include "zmusic/mididefs.h" #include "i_soundinternal.h" class FileReader; @@ -75,7 +76,7 @@ public: virtual bool SetPosition (unsigned int ms); virtual bool SetSubsong (int subsong); virtual void Update(); - virtual int GetDeviceType() const { return -1; } // MDEV_DEFAULT stands in for anything that cannot change playback parameters which needs a restart. + virtual int GetDeviceType() const { return MDEV_DEFAULT; } // MDEV_DEFAULT stands in for anything that cannot change playback parameters which needs a restart. virtual FString GetStats(); virtual MusInfo *GetOPLDumper(const char *filename); virtual MusInfo *GetWaveDumper(const char *filename, int rate); diff --git a/src/sound/music/i_musicinterns.h b/src/sound/music/i_musicinterns.h index 369261843e..2dc41a5388 100644 --- a/src/sound/music/i_musicinterns.h +++ b/src/sound/music/i_musicinterns.h @@ -1,21 +1,22 @@ #include #include -#include "oplsynth/opl_mus_player.h" #include "c_cvars.h" -#include "mididevices/mus2midi.h" #include "i_sound.h" #include "i_music.h" #include "s_sound.h" #include "files.h" -#include "wildmidi/wildmidi_lib.h" -#include "midisources/midisource.h" -#include "mididevices/mididevice.h" +#include "zmusic/midiconfig.h" +#include "zmusic/mididefs.h" + +#include "zmusic/..//mididevices/mididevice.h" // this is still needed... void I_InitMusicWin32 (); extern float relative_volume; class MIDISource; +class MIDIDevice; +class OPLmusicFile; extern ADLConfig adlConfig; @@ -55,12 +56,7 @@ public: int ServiceEvent(); void SetMIDISource(MIDISource *_source); - int GetDeviceType() const override - { - return nullptr == MIDI - ? MusInfo::GetDeviceType() - : MIDI->GetDeviceType(); - } + int GetDeviceType() const override; bool DumpWave(const char *filename, int subsong, int samplerate); static bool FillStream(SoundStream* stream, void* buff, int len, void* userdata); diff --git a/src/sound/music/i_soundfont.cpp b/src/sound/music/i_soundfont.cpp index 40e3b003d2..d6b4ac0653 100644 --- a/src/sound/music/i_soundfont.cpp +++ b/src/sound/music/i_soundfont.cpp @@ -40,7 +40,7 @@ #include "i_system.h" #include "gameconfigfile.h" #include "resourcefiles/resourcefile.h" -#include "timiditypp/common.h" +#include "../libraries/timidityplus/timiditypp/common.h" //========================================================================== // diff --git a/src/sound/music/i_soundfont.h b/src/sound/music/i_soundfont.h index 40d9a0b8d6..a214801d1f 100644 --- a/src/sound/music/i_soundfont.h +++ b/src/sound/music/i_soundfont.h @@ -3,9 +3,9 @@ #include "doomtype.h" #include "w_wad.h" #include "files.h" -#include "timiditypp/timidity_file.h" -#include "timidity/timidity_file.h" -#include "wildmidi/wildmidi_file.h" +#include "../libraries/timidityplus/timiditypp/timidity_file.h" +#include "../libraries/timidity/timidity/timidity_file.h" +#include "../libraries/wildmidi/wildmidi/wildmidi_file.h" enum { diff --git a/src/sound/mididevices/midi_cvars.cpp b/src/sound/music/midi_cvars.cpp similarity index 97% rename from src/sound/mididevices/midi_cvars.cpp rename to src/sound/music/midi_cvars.cpp index 15a3bdcc60..8b67aaa376 100644 --- a/src/sound/mididevices/midi_cvars.cpp +++ b/src/sound/music/midi_cvars.cpp @@ -35,18 +35,15 @@ */ #include "i_musicinterns.h" #include "i_soundfont.h" -#include "adlmidi.h" #include "cmdlib.h" #include "doomerrors.h" -#include "timidity/timidity.h" -#include "timidity/playmidi.h" -#include "timidity/instrum.h" -#include "timiditypp/controls.h" -#include "timiditypp/timidity.h" -#include "timiditypp/instrum.h" #include "v_text.h" #include "c_console.h" +#include "../libraries/timidity/timidity/timidity.h" +#include "../libraries/timidityplus/timiditypp/timidity.h" +#include "../libraries/oplsynth/oplsynth/oplio.h" + #ifdef _WIN32 // do this without including windows.h for this one single prototype extern "C" unsigned __stdcall GetSystemDirectoryA(char* lpBuffer, unsigned uSize); @@ -138,7 +135,7 @@ void ADL_SetupConfig(ADLConfig *config, const char *Args) } -CUSTOM_CVAR(Int, adl_volume_model, ADLMIDI_VolumeModel_DMX, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +CUSTOM_CVAR(Int, adl_volume_model, 3/*ADLMIDI_VolumeModel_DMX*/, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) { adlConfig.adl_volume_model = self; CheckRestart(MDEV_ADL); @@ -503,7 +500,7 @@ void OPL_SetupConfig(OPLMidiConfig *config, const char *args) uint8_t filehdr[8]; data.Read(filehdr, 8); if (memcmp(filehdr, "#OPL_II#", 8)) throw std::runtime_error("Corrupt GENMIDI lump"); - data.Read(oplMidiConfig.OPLinstruments, sizeof(GenMidiInstrument) * GENMIDI_NUM_TOTAL); + data.Read(oplMidiConfig.OPLinstruments, 175 * 36); config->core = opl_core; if (args != NULL && *args >= '0' && *args < '4') config->core = *args - '0'; @@ -877,14 +874,14 @@ CUSTOM_CVAR(String, wildmidi_config, "", CVAR_ARCHIVE | CVAR_GLOBALCONFIG) CUSTOM_CVAR(Bool, wildmidi_reverb, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) { if (currSong != NULL) - currSong->ChangeSettingInt("wildmidi.reverb", self ? WildMidi::WM_MO_REVERB : 0); + currSong->ChangeSettingInt("wildmidi.reverb", *self); wildMidiConfig.reverb = self; } CUSTOM_CVAR(Bool, wildmidi_enhanced_resampling, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) { if (currSong != NULL) - currSong->ChangeSettingInt("wildmidi.resampling", self ? WildMidi::WM_MO_ENHANCED_RESAMPLING : 0); + currSong->ChangeSettingInt("wildmidi.resampling", *self); wildMidiConfig.enhanced_resampling = self; } diff --git a/src/sound/musicformats/music_midistream.cpp b/src/sound/musicformats/music_midistream.cpp index f2494b9b25..7a8f5b1e4e 100644 --- a/src/sound/musicformats/music_midistream.cpp +++ b/src/sound/musicformats/music_midistream.cpp @@ -40,6 +40,9 @@ #include "doomerrors.h" #include "v_text.h" +#include "mididevices/mididevice.h" +#include "midisources/midisource.h" + // MACROS ------------------------------------------------------------------ #define MAX_TIME (1000000/10) // Send out 1/10 of a sec of events at a time. @@ -885,6 +888,12 @@ void MIDIStreamer::SetMIDISource(MIDISource *_source) source->setTempoCallback([=](int tempo) { return !!MIDI->SetTempo(tempo); } ); } +int MIDIStreamer::GetDeviceType() const +{ + return nullptr == MIDI + ? MusInfo::GetDeviceType() + : MIDI->GetDeviceType(); +} //========================================================================== // diff --git a/src/sound/musicformats/music_opl.cpp b/src/sound/musicformats/music_opl.cpp index 065fc1c8c9..8cf2edcebc 100644 --- a/src/sound/musicformats/music_opl.cpp +++ b/src/sound/musicformats/music_opl.cpp @@ -32,7 +32,8 @@ */ #include "i_musicinterns.h" -#include "oplsynth/opl.h" +#include "../libraries/oplsynth/oplsynth/opl.h" +#include "../libraries/oplsynth/oplsynth/opl_mus_player.h" static bool OPL_Active; diff --git a/src/sound/s_music.cpp b/src/sound/s_music.cpp index 1a1f46b9f1..b5309b9169 100644 --- a/src/sound/s_music.cpp +++ b/src/sound/s_music.cpp @@ -587,7 +587,7 @@ void S_StopMusic (bool force) mus_playing.name = ""; } } - catch (const std::runtime_error& err) + catch (const std::runtime_error& ) { //Printf("Unable to stop %s: %s\n", mus_playing.name.GetChars(), err.what()); if (mus_playing.handle != nullptr) diff --git a/src/win32/i_main.cpp b/src/win32/i_main.cpp index 482ff170fe..f79722668c 100644 --- a/src/win32/i_main.cpp +++ b/src/win32/i_main.cpp @@ -79,8 +79,6 @@ #include "stats.h" #include "st_start.h" -#include "optwin32.h" - // MACROS ------------------------------------------------------------------ // The main window's title. @@ -142,14 +140,6 @@ FModule Kernel32Module{"Kernel32"}; FModule Shell32Module{"Shell32"}; FModule User32Module{"User32"}; -namespace OptWin32 { -#define DYN_WIN32_SYM(x) decltype(x) x{#x} - -DYN_WIN32_SYM(SHGetKnownFolderPath); - -#undef DYN_WIN32_SYM -} // namespace OptWin32 - // PRIVATE DATA DEFINITIONS ------------------------------------------------ static const WCHAR WinClassName[] = WGAMENAME "MainWindow"; diff --git a/src/win32/i_specialpaths.cpp b/src/win32/i_specialpaths.cpp index d7e0103608..6d0ea884dc 100644 --- a/src/win32/i_specialpaths.cpp +++ b/src/win32/i_specialpaths.cpp @@ -42,8 +42,6 @@ #include "m_misc.h" #include "version.h" // for GAMENAME -#include "optwin32.h" - // Vanilla MinGW does not have folder ids #if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) static const GUID FOLDERID_LocalAppData = { 0xf1b32785, 0x6fba, 0x4fcf, 0x9d, 0x55, 0x7b, 0x8e, 0x7f, 0x15, 0x70, 0x91 }; diff --git a/src/win32/i_system.cpp b/src/win32/i_system.cpp index 8250ee3d42..a004ddd43b 100644 --- a/src/win32/i_system.cpp +++ b/src/win32/i_system.cpp @@ -86,8 +86,6 @@ #include "textures/bitmap.h" #include "atterm.h" -#include "optwin32.h" - // MACROS ------------------------------------------------------------------ #ifdef _MSC_VER diff --git a/src/win32/optwin32.h b/src/win32/optwin32.h deleted file mode 100644 index 2a54e8e5d7..0000000000 --- a/src/win32/optwin32.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -// Forward declarations for optional Win32 API procedures -// implemented in i_main.cpp - -#define WIN32_LEAN_AND_MEAN -#include -#include - -#include "i_module.h" - -extern FModule Shell32Module; - -namespace OptWin32 { - -extern TOptProc SHGetKnownFolderPath; - -} // namespace OptWin32