Giter Club home page Giter Club logo

zmusic's People

Contributors

alexey-lysiuk avatar blzut3 avatar cacodemon345 avatar coelckers avatar emawind84 avatar gitexl avatar kcat avatar madame-rachelle avatar rheit avatar roquedeicide avatar thesamesam avatar wohlstand avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zmusic's Issues

Build fail with GCC 4.9

[ 50%] Building CXX object thirdparty/adlmidi/CMakeFiles/adl.dir/chips/dosbox/dbopl.cpp.o
/home/gaben/ZMusic-1.1.3/thirdparty/adlmidi/chips/dosbox/dbopl.cpp: In member function ‘void DBOPL::Handler::GenerateArr(Bit16s*, Bitu*)’:
/home/gaben/ZMusic-1.1.3/thirdparty/adlmidi/chips/dosbox/dbopl.cpp:1716:65: error: ‘INT16_MAX’ was not declared in this scope
   out[i] = static_cast<Bit16s>(DBOPL_CLAMP(out32[i], INT16_MIN, INT16_MAX));
                                                                 ^
/home/gaben/ZMusic-1.1.3/thirdparty/adlmidi/chips/dosbox/dbopl.cpp:1689:24: note: in definition of macro ‘DB_MAX’
 #define DB_MAX(x, y) ((x) > (y) ? (x) : (y))
                        ^
/home/gaben/ZMusic-1.1.3/thirdparty/adlmidi/chips/dosbox/dbopl.cpp:1692:41: note: in expansion of macro ‘DB_MIN’
 #define DBOPL_CLAMP(V, MIN, MAX) DB_MAX(DB_MIN(V, (MAX)), (MIN))
                                         ^
/home/gaben/ZMusic-1.1.3/thirdparty/adlmidi/chips/dosbox/dbopl.cpp:1716:32: note: in expansion of macro ‘DBOPL_CLAMP’
   out[i] = static_cast<Bit16s>(DBOPL_CLAMP(out32[i], INT16_MIN, INT16_MAX));
                                ^
/home/gaben/ZMusic-1.1.3/thirdparty/adlmidi/chips/dosbox/dbopl.cpp:1716:54: error: ‘INT16_MIN’ was not declared in this scope
   out[i] = static_cast<Bit16s>(DBOPL_CLAMP(out32[i], INT16_MIN, INT16_MAX));
                                                      ^
/home/gaben/ZMusic-1.1.3/thirdparty/adlmidi/chips/dosbox/dbopl.cpp:1689:30: note: in definition of macro ‘DB_MAX’
 #define DB_MAX(x, y) ((x) > (y) ? (x) : (y))
                              ^
/home/gaben/ZMusic-1.1.3/thirdparty/adlmidi/chips/dosbox/dbopl.cpp:1716:32: note: in expansion of macro ‘DBOPL_CLAMP’
   out[i] = static_cast<Bit16s>(DBOPL_CLAMP(out32[i], INT16_MIN, INT16_MAX));
                                ^
/home/gaben/ZMusic-1.1.3/thirdparty/adlmidi/chips/dosbox/dbopl.cpp: In member function ‘void DBOPL::Handler::GenerateArrMix(Bit16s*, Bitu*)’:
/home/gaben/ZMusic-1.1.3/thirdparty/adlmidi/chips/dosbox/dbopl.cpp:1741:66: error: ‘INT16_MAX’ was not declared in this scope
   out[i] += static_cast<Bit16s>(DBOPL_CLAMP(out32[i], INT16_MIN, INT16_MAX));
                                                                  ^
/home/gaben/ZMusic-1.1.3/thirdparty/adlmidi/chips/dosbox/dbopl.cpp:1689:24: note: in definition of macro ‘DB_MAX’
 #define DB_MAX(x, y) ((x) > (y) ? (x) : (y))
                        ^
/home/gaben/ZMusic-1.1.3/thirdparty/adlmidi/chips/dosbox/dbopl.cpp:1692:41: note: in expansion of macro ‘DB_MIN’
 #define DBOPL_CLAMP(V, MIN, MAX) DB_MAX(DB_MIN(V, (MAX)), (MIN))
                                         ^
/home/gaben/ZMusic-1.1.3/thirdparty/adlmidi/chips/dosbox/dbopl.cpp:1741:33: note: in expansion of macro ‘DBOPL_CLAMP’
   out[i] += static_cast<Bit16s>(DBOPL_CLAMP(out32[i], INT16_MIN, INT16_MAX));
                                 ^
/home/gaben/ZMusic-1.1.3/thirdparty/adlmidi/chips/dosbox/dbopl.cpp:1741:55: error: ‘INT16_MIN’ was not declared in this scope
   out[i] += static_cast<Bit16s>(DBOPL_CLAMP(out32[i], INT16_MIN, INT16_MAX));
                                                       ^
/home/gaben/ZMusic-1.1.3/thirdparty/adlmidi/chips/dosbox/dbopl.cpp:1689:30: note: in definition of macro ‘DB_MAX’
 #define DB_MAX(x, y) ((x) > (y) ? (x) : (y))
                              ^
/home/gaben/ZMusic-1.1.3/thirdparty/adlmidi/chips/dosbox/dbopl.cpp:1741:33: note: in expansion of macro ‘DBOPL_CLAMP’
   out[i] += static_cast<Bit16s>(DBOPL_CLAMP(out32[i], INT16_MIN, INT16_MAX));
                                 ^
make[2]: *** [thirdparty/adlmidi/CMakeFiles/adl.dir/chips/dosbox/dbopl.cpp.o] Error 1
make[1]: *** [thirdparty/adlmidi/CMakeFiles/adl.dir/all] Error 2
make: *** [all] Error 2

Non ASLYUM based AMF file is mistaken for libmpg123 audio.

When loading Crusader: No Remorse/Regret AMF files, it's properly picked up by DUMB but when I try to load H2O (which has the same .AMF extension but it's NOT ASYLUM but instead "DSMI v14" according to libopenmpt) I get loud repeated static and the following floods the terminal:

Note: Illegal Audio-MPEG-Header 0x6f6f7070 at offset 10559.
Note: Trying to resync...
Note: Skipped 228 bytes in input.

Warning: Big change from first (MPEG version, layer, rate). Frankenstein stream?
Note: Illegal Audio-MPEG-Header 0xf2eee5e4 at offset 11727.
Note: Trying to resync...
Note: Skipped 1024 bytes in input.
[src/libmpg123/parse.c:wetwork():1365] error: Giving up resync after 1024 bytes - your stream is not nice... (maybe increasing resync limit could help).
Note: Illegal Audio-MPEG-Header 0x5454575b at offset 12754.
Note: Trying to resync...
Note: Skipped 1024 bytes in input.
[src/libmpg123/parse.c:wetwork():1365] error: Giving up resync after 1024 bytes - your stream is not nice... (maybe increasing resync limit could help).
[src/libmpg123/layer1.c:check_balloc():30] error: Illegal bit allocation value.
[src/libmpg123/layer1.c:INT123_do_layer1():228] error: Aborting layer I decoding after step one.
[src/libmpg123/layer1.c:check_balloc():30] error: Illegal bit allocation value.
[src/libmpg123/layer1.c:INT123_do_layer1():228] error: Aborting layer I decoding after step one.
Note: Illegal Audio-MPEG-Header 0x8002124d at offset 7295.
Note: Trying to resync...
Note: Skipped 219 bytes in input.

Warning: Big change from first (MPEG version, layer, rate). Frankenstein stream?
[src/libmpg123/layer1.c:check_balloc():30] error: Illegal bit allocation value.
[src/libmpg123/layer1.c:INT123_do_layer1():228] error: Aborting layer I decoding after step one.
Note: Illegal Audio-MPEG-Header 0x80889bb5 at offset 9532.
Note: Trying to resync...
Note: Skipped 1024 bytes in input.
[src/libmpg123/parse.c:wetwork():1365] error: Giving up resync after 1024 bytes - your stream is not nice... (maybe increasing resync limit could help).
Note: Illegal Audio-MPEG-Header 0x6f6f7070 at offset 10559.
Note: Trying to resync...
Note: Skipped 228 bytes in input.

The songs can be obtained here:
http://www.vgmpf.com/Wiki/images/b/bf/H2O_%28DOS%29.zip

This used to work just fine a couple years ago but I don't remember the commit where this worked... The files also work fine in Zandronum as long as foo_dumb is used and not FMOD for the module replayer.

can't build zmusic

for some reason i need pre-compiled zmusic to build zmusic?
log:

-- Could NOT find VPX (missing: VPX_LIBRARIES VPX_INCLUDE_DIR) 
-- Using system zlib, includes found at /usr/include
-- Using internal asmjit
-- Using system jpeg library, includes found at /usr/include
-- Using system bzip2 library, includes found at /usr/include
-- Architecture is x86_64
CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find ZMusic (missing: ZMUSIC_LIBRARIES)
Call Stack (most recent call first):
  /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
  cmake/FindZMusic.cmake:21 (find_package_handle_standard_args)
  source/CMakeLists.txt:388 (find_package)


-- Configuring incomplete, errors occurred!

New release

I think, it's worth making a new version in order to put recent fixes into upcoming GZDoom and Raze releases.

Using WildMidi always fails due to API confusion in WildMIDIDevice::LoadInstruments()

Trying to use WildMidi as the music option in GZDoom always results in an error message that says that GZDoom was unable to create the WildMidi device (and then it falls back to FluidSynth, which does work).

Note: In order to use WildMidi, you need to have a copy of the GUS patch files, and you need to give GZDoom the location of a wildmidi.cfg file that's set up to use them in gzdoom.ini. However I have done this and made sure I did it correctly, and it still doesn't work. The patch files I used are from here:

https://www.doomworld.com/idgames/music/dgguspat

I found that this is due to a bug in WildMIDIDevice::LoadInstruments() in music_wildmidi_mididevice.cpp.

The code says this:

            bool success = wildMidiConfig.instruments->LoadConfig(wildMidiConfig.readerName.c_str());
            wildMidiConfig.reader = nullptr;

            if (!success)
            {
                    wildMidiConfig.instruments.reset();
                    wildMidiConfig.loadedConfig = "";
                    throw std::runtime_error("Unable to initialize instruments for WildMidi device");
            }

The implication is that Instruments::LoadConfig() returns a bool, where TRUE indicates success and FALSE indicates failure.

However, if we actually look at the Instruments::LoadConfig() function in thirdparty/wildmidi/wildmidi_lib.cpp, it's not defined to return a bool: it returns an int, where 0 means success and -1 means failure.

When Instruments::LoadConfig() correctly loads the GUS patch info, it returns 0, which is interpreted as FALSE, indicating a failure, so WildMIDIDevice::LoadInstruments() always throws an exception, even though there wasn't actually any reason to do that.

I think the correct code should be:

            int success = wildMidiConfig.instruments->LoadConfig(wildMidiConfig.readerName.c_str());
            wildMidiConfig.reader = nullptr;

            if (success != 0)
            {
                    wildMidiConfig.instruments.reset();
                    wildMidiConfig.loadedConfig = "";
                    throw std::runtime_error("Unable to initialize instruments for WildMidi device");
            }

If I make this change and recompile the ZMusic library, I can select WildMidi as the music device in GZDoom and it works correctly now(again, with the GUS patch files and wildmidi.cfg file present).

For reference, my environment is:

CPU arch: x86-64
OS: FreeBSD 12.3-RELEASE
Compiler: Clang/LLVM 10.0.1

It seems to me though that this bug should occur on every platform. In fact I can't see how it could have ever possibly worked.

Oh, and before you ask: no, I'm not submitting a patch. It should be trivial to fix this directly.

Issues starting MIDI playback, ALSA w/ hardware MIDI synths

Hi Devs!

I've been encountering playback issues on multiple engines that use this library (namely GZDoom and Raze); every once in a while, when a problematic MIDI track loads, it'll start flooding the console with a decrementing sequencer undderrun and an error number (error -22);

ex:

Alsa sequencer underrun: -1067117 ticks!
Alsa sequencer did not accept event: error -22!
Alsa sequencer underrun: -1067194 ticks!
Alsa sequencer did not accept event: error -22!
Alsa sequencer underrun: -1067271 ticks!
Alsa sequencer did not accept event: error -22!

Switching to any given Software MIDI library plays the tracks without issue.

I'm currently fully synced with origin/master (commit 50ad730, 1.1.13); GZDoom and Raze are also relatively as fresh. Host system is Fedora 40 x86_64.

I've got a SoundCanvas SC-8850 that works as intended with just about anything I throw at it. This also happens with a cheap USB-MIDI adapter hooked up to a MT-80s.

Thus far it seems like all music tracks in DOOM PWADs (DOOM, DOOM2) do not trigger this issue. MAP01 on sunlust.wad reliably fails.

Thanks for your time!

Add `find_library` for GME library.

Hi! I'm looking into packaging ZMusic for Void Linux, now that GZDoom depends on it. There is support for linking a system GME, but I couldn't find how to force it. I ended up patching out the internal gme stuff, and passing -DGME_INCLUDE_DIR=/usr/include -DGME_LIBRARIES=gme when running cmake. Is there a better way?

I noticed zlib had find_library( zlilb ), but gme didn't.

Thanks!

Default install prefix is /usr instead of /usr/local

Under macOS it's illegal, and I believe the Linux distros use the basic /usr path for their package managers, and you should rather send source-built programs to /usr/local. Under macOS I'm getting this error when running sudo make install as directed in the readme:

CMake Error at source/cmake_install.cmake:41 (file):
  file INSTALL cannot copy file
  "/Users/ioan/dezvoltare/cross/ZMusic/build/source/libzmusic.1.1.8.dylib" to
  "/usr/lib/libzmusic.1.1.8.dylib": Operation not permitted.
Call Stack (most recent call first):
  cmake_install.cmake:47 (include)

Please support CMAKE_INSTALL_LIBDIR for multilib systems

The patch is easy enough:

diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index 5b55cd9..5ac72f4 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -178,7 +178,7 @@ set_target_properties(zmusic zmusiclite PROPERTIES
        SOVERSION ${ZMUSIC_VERSION_MAJOR}
 )
 
-install(TARGETS zmusic zmusiclite LIBRARY DESTINATION lib)
+install(TARGETS zmusic zmusiclite LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}")
 install(DIRECTORY ../include/ DESTINATION include FILES_MATCHING PATTERN "*.h*")
 
 source_group("MIDI Devices" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/mididevices/.+")

Build fails with Android libc

This is the error I get when I build ZMusic with Android NDK.

[ 76%] Building CXX object source/CMakeFiles/zmusic.dir/mididevices/music_wavewriter_mididevice.cpp.o
/home/caco345/ZMusic/source/mididevices/music_wavewriter_mididevice.cpp:155:39: error: in call to 'fwrite', size * count is too large for the given buffer
                                        if (4 == fwrite(&size, 1, 5, File))
                                                                         ^
/home/caco345/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/fortify/stdio.h:116:9: note: from 'diagnose_if' attribute on 'fwrite':
        __clang_error_if(__bos_unevaluated_lt(__bos0(buf), size * count),
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/caco345/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/cdefs.h:134:52: note: expanded from macro '__clang_error_if'
#define __clang_error_if(cond, msg) __attribute__((diagnose_if(cond, msg, "error")))
                                                   ^           ~~~~
1 error generated.

Build unconditionally fails when compiling non-native

I don't know if this is an issue with the included libraries in ZMusic, or if there's something wrong with ZMusic itself, but if you build for an alternate architecture (i.e. x86_64 on Mac OS while using an M1 Mac, or to ARM64 on Windows while using an x64) - it will always compile at least one of the link objects to the native architecture which it is not supposed to and should not do. This causes the linking of the final binary to always fail.

No music when compiled against FluidSynth 2.2.0

Discovered when I tried to update the sound library for the Flatpak version

GZDoom g4.5.0-m - 2020-10-31 10:07:33 +0100 - SDL version
Compiled on May 22 2021

M_LoadDefaults: Load system defaults.
Gtk-Message: 14:30:39.104: Failed to load module "canberra-gtk-module"
Gtk-Message: 14:30:39.104: Failed to load module "pk-gtk-module"
Gtk-Message: 14:30:39.104: Failed to load module "canberra-gtk-module"
Gtk-Message: 14:30:39.104: Failed to load module "pk-gtk-module"
W_Init: Init WADfiles.
 adding /app/share/games/doom/gzdoom.pk3, 630 lumps
 adding /app/share/games/doom/game_support.pk3, 2512 lumps
 adding /home/kevin/.config/gzdoom/IWAD/HERETIC.WAD, 2633 lumps
 adding /app/share/games/doom/game_widescreen_gfx.pk3, 39 lumps
 adding /app/share/games/doom/lights.pk3, 7 lumps
 adding /app/share/games/doom/brightmaps.pk3, 499 lumps
I_Init: Setting up machine state.
CPU Vendor ID: AuthenticAMD
  Name: AMD Ryzen 7 2700 Eight-Core Processor 
  Family 23 (23), Model 8, Stepping 2
  Features: SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 HyperThreading
V_Init: allocate screen.
S_Init: Setting up sound.
I_InitSound: Initializing OpenAL
  Opened device Sirus Headset Analog Surround 4.0
  EFX enabled
ST_Init: Init startup screen.
Checking cmd-line parameters...
S_InitData: Load sound definitions.
G_ParseMapInfo: Load map definitions.
Texman.Init: Init texture manager.
ParseTeamInfo: Load team definitions.
LoadActors: Load actor definitions.
script parsing took 136.63 ms
R_Init: Init Heretic refresh subsystem.
DecalLibrary: Load decals.
M_Init: Init menus.
P_Init: Init Playloop state.
ParseSBarInfo: Loading custom status bar definition.
D_CheckNetGame: Checking network game status.
player 1 of 1 (1 nodes)
Using video driver x11
Vulkan device: NVIDIA GeForce GTX 970
Vulkan device type: discrete gpu
Vulkan version: 1.2.168 (api) 465.108.0 (driver)
Max. texture size: 16384
Max. uniform buffer range: 65536
Min. uniform buffer offset alignment: 256
Resolution: 2560 x 1440
Could not load libfluidsynth.so.1 or libfluidsynth.so.2

Unable to start MUS_TITL: vector::_M_range_check: __n (which is 0) >= this->size() (which is 0)

----------------------------------------

E1M1 - The Docks

Could not load libfluidsynth.so.1 or libfluidsynth.so.2

Unable to start MUS_TITL: vector::_M_range_check: __n (which is 0) >= this->size() (which is 0)
Could not load libfluidsynth.so.1 or libfluidsynth.so.2

Unable to start MUS_E1M1: vector::_M_range_check: __n (which is 0) >= this->size() (which is 0)

This is likely a simple issue, since the acutal cause seems to be an outdated .so reference. 2.2.0 only gives you the following headers and .so files:

[0/1] Install the project...
-- Install configuration: "RelWithDebInfo"
-- Installing: /app/lib/pkgconfig/fluidsynth.pc
-- Installing: /app/bin/fluidsynth
-- Set runtime path of "/app/bin/fluidsynth" to ""
-- Installing: /app/lib/libfluidsynth.so.3.0.0
-- Installing: /app/lib/libfluidsynth.so.3
-- Installing: /app/lib/libfluidsynth.so
-- Installing: /app/include/fluidsynth/audio.h
-- Installing: /app/include/fluidsynth/event.h
-- Installing: /app/include/fluidsynth/gen.h
-- Installing: /app/include/fluidsynth/ladspa.h
-- Installing: /app/include/fluidsynth/log.h
-- Installing: /app/include/fluidsynth/midi.h
-- Installing: /app/include/fluidsynth/misc.h
-- Installing: /app/include/fluidsynth/mod.h
-- Installing: /app/include/fluidsynth/seq.h
-- Installing: /app/include/fluidsynth/seqbind.h
-- Installing: /app/include/fluidsynth/settings.h
-- Installing: /app/include/fluidsynth/sfont.h
-- Installing: /app/include/fluidsynth/shell.h
-- Installing: /app/include/fluidsynth/synth.h
-- Installing: /app/include/fluidsynth/types.h
-- Installing: /app/include/fluidsynth/voice.h
-- Installing: /app/include/fluidsynth/version.h
-- Installing: /app/include/fluidsynth.h
-- Installing: /app/share/man/man1/fluidsynth.1

zmusic not compiling/building - error: ‘uint8_t’ does not name a type

Hey, so while I come across this building the zmusic from the Arch Linux AUR it looks like the issue is coming from zmusic rather than the package build. Here is the error log when compiling:

n file included from /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/instrum.cpp:30: /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:129:15: error: ‘uint8_t’ does not name a type 129 | const uint8_t *mData; | ^~~~~~~ /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:30:1: note: ‘uint8_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’? 29 | #include <string> +++ |+#include <cstdint> 30 | /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:133:28: error: ‘uint8_t’ does not name a type 133 | MemoryReader(const uint8_t *data, long length) | ^~~~~~~ /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:133:28: note: ‘uint8_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’? /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h: In constructor ‘MusicIO::MemoryReader::MemoryReader(const int*, long int)’: /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:134:12: error: class ‘MusicIO::MemoryReader’ does not have any field named ‘mData’ 134 | : mData(data), mLength(length), mPos(0) | ^~~~~ /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h: In member function ‘virtual char* MusicIO::MemoryReader::gets(char*, int)’: /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:146:29: error: ‘mData’ was not declared in this scope 146 | if (mData[mPos] == 0) | ^~~~~ /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:151:29: error: ‘mData’ was not declared in this scope 151 | if (mData[mPos] != '\r') | ^~~~~ /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h: In member function ‘virtual long int MusicIO::MemoryReader::read(void*, int32_t)’: /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:172:30: error: ‘mData’ was not declared in this scope 172 | memcpy(buff, mData + mPos, len); | ^~~~~ /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h: At global scope: /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:209:21: error: ‘uint8_t’ was not declared in this scope 209 | std::vector<uint8_t> mVector; | ^~~~~~~ /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:209:21: note: ‘uint8_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’? /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:209:28: error: template argument 1 is invalid 209 | std::vector<uint8_t> mVector; | ^ /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:209:28 : error: template argument 2 is invalid /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:219:28: error: ‘uint8_t’ does not name a type 219 | VectorReader(const uint8_t* data, size_t size) | ^~~~~~~ /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:219:28: note: ‘uint8_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’? /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h: In constructor ‘MusicIO::VectorReader::VectorReader(getFunc)’: /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:215:17: error: ‘mData’ was not declared in this scope 215 | mData = mVector.data(); | ^~~~~ /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:215:33: error: request for member ‘data’ in ‘((MusicIO::VectorReader*)this)->MusicIO::VectorReader::mVector’, which is of non-class type ‘int’ 215 | mData = mVector.data(); | ^~~~ /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:216:41: error: request for member ‘size’ in ‘((MusicIO::VectorReader*)this)->MusicIO::VectorReader::mVector’, which is of non-class type ‘int’ 216 | mLength = (long)mVector.size(); | ^~~~ /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h: In constructor ‘MusicIO::VectorReader::VectorReader(const int*, size_t)’: /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:221:25: error: request for member ‘resize’ in ‘((MusicIO::VectorReader*)this)->MusicIO::VectorReader::mVector’, which is of non-class type ‘int’ 221 | mVector.resize(size); | ^~~~~~ /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:222:32: error: request for member ‘data’ in ‘((MusicIO::VectorReader*)this)->MusicIO::VectorReader::mVector’, which is of non-class type ‘int’ 222 | memcpy(mVector.data(), data, size); | ^~~~ /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h: In member function ‘virtual MusicIO::FileInterface* MusicIO::SF2Reader::open_file(const char*)’: /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:376:50: error: ‘uint8_t’ was not declared in this scope 376 | return new MemoryReader((uint8_t*)mMainConfigForSF2.c_str(), (long)mMainConfigForSF2.length()); | ^~~~~~~ /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:376:50: note: ‘uint8_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’? /home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/thirdparty/timidityplus/timiditypp/../../../source/zmusic/fileio.h:376:58: error: expected primary-expression before ‘)’ token 376 | return new MemoryReader((uint8_t*)mMainConfigForSF2.c_str(), (long)mMainConfigForSF2.length()); | ^ make[2]: *** [thirdparty/timidityplus/CMakeFiles/timidityplus.dir/build.make:174: thirdparty/timidityplus/CMakeFiles/timidityplus.dir/instrum.cpp.o] Error 1 make[1]: *** [CMakeFiles/Makefile2:422: thirdparty/timidityplus/CMakeFiles/timidityplus.dir/all] Error 2 make: *** [Makefile:156: all] Error 2 make: Leaving directory '/home/username/.cache/paru/clone/zmusic/src/ZMusic-1.1.11/build' ==> ERROR: A failure occurred in build(). Aborting... error: failed to build 'zmusic-1.1.11-1': error: packages failed to build: zmusic-1.1.11-1

Add support for OPUS codec

Hello!

Recently, my buddy has noticed that GZDoom lacks OPUS support. Now I think, why not provide the supports for it also?

What materials I have:

Missing releases

Hi!

It seems the latest releases went missing (release tab), could you please recreate them ? At least the last one, and then keep on updating it from there.

Thank you!
Jhonny Oliveira
https://xtradeb.net

CMake + static library + static dependencies

I was experimenting with ZDoom/gzdoom#1401, and encountered the problem with ZMusic static library that uses explicit linking to dependencies, i.e. with dynamic loading turned off.

Here is the set of commands I did on Ubuntu 20.04 using current HEAD at 95e6bfc.

git clone https://github.com/coelckers/ZMusic.git
cd ZMusic
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$(pwd)/../build_install -DBUILD_SHARED_LIBS=OFF -DDYN_SNDFILE=OFF -DDYN_MPG123=OFF -DDYN_FLUIDSYNTH=OFF ..
make install
cd ../..
git clone -b cmake-overhaul https://github.com/Blzut3/gzdoom.git
cd gzdoom
mkdir build
cd build
cmake -DCMAKE_PREFIX_PATH=$(pwd)/../../ZMusic/build_install ..

Configuration of GZDoom failed with the following output.

-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Using system bzip2 library, includes found at /usr/include
-- Using system zlib, includes found at /usr/include
-- Using system jpeg library, includes found at /usr/include
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Check if compiler accepts -pthread
-- Check if compiler accepts -pthread - yes
-- Found Threads: TRUE  
-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.11") 
CMake Error at /usr/share/cmake-3.16/Modules/CMakeFindDependencyMacro.cmake:47 (find_package):
  By not providing "FindSndFile.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "SndFile", but
  CMake did not find one.

  Could not find a package configuration file provided by "SndFile" with any
  of the following names:

    SndFileConfig.cmake
    sndfile-config.cmake

  Add the installation prefix of "SndFile" to CMAKE_PREFIX_PATH or set
  "SndFile_DIR" to a directory containing one of the above files.  If
  "SndFile" provides a separate development package or SDK, be sure it has
  been installed.
Call Stack (most recent call first):
  /home/user/ZMusic/build_install/lib/cmake/ZMusic/ZMusicConfig.cmake:35 (find_dependency)
  libraries/CMakeLists.txt:63 (find_package)


-- Configuring incomplete, errors occurred!
See also "/home/user/gzdoom/build/CMakeFiles/CMakeOutput.log".
See also "/home/user/gzdoom/build/CMakeFiles/CMakeError.log".

How should a modern way of locating dependencies (by importing CMake targets) work in this case?
The current release of libsndfile can be built via CMake in order to produce a module that can be imported.
This is not the case for FluidSynth that does not create a module during CMake build.

The mentioned issue became even more severe when I wanted to create a single self-contained GZDoom binary with all dependencies built as static libraries.
For example, importing module of libsndfile tries to pull all its prerequisites (ogg, vorbis, flac, opus) via CMake ignoring other ways of discovery like pkg-config.
At least, the given libraries supports creation of modules in their CMake build systems. However, dependencies of FluidSynth are not.

I'm not quite familiar with modern CMake, so I put it here in order to get an advise or maybe a solution of some sort.

Add versioning to soname

zmusic's soname is currently "libzmusic.so" without a version. It's standard to include version numbers in sonames, so "libzmusic.so.1.1.0" would be better.

Build fails with LTO

I tried to build with the following *FLAGS to optimize the build: -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing

Note the -Werror=* flags are used to help detect cases where the compiler tries to optimize by assuming UB cannot exist in the source code -- if it does exist, ordinarily the code would be miscompiled, and this says to make the miscompilation a fatal error.

I got this error:

FAILED: source/libzmusic.so.1.1.12 
: && /usr/bin/x86_64-pc-linux-gnu-g++ -fPIC -march=native -fstack-protector-all -O2 -pipe -fdiagnostics-color=always -frecord-gcc-switches -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -fstack-clash-protection -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing  -Wformat -Werror=format-security  -Wl,-O1 -Wl,--as-needed -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing -Wl,--defsym=__gentoo_check_ldflags__=0 -shared -Wl,-soname,libzmusic.so.1 -o source/libzmusic.so.1.1.12 thirdparty/dumb/CMakeFiles/dumb.dir/src/core/unload.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/core/rendsig.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/core/rendduh.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/core/register.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/core/readduh.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/core/rawsig.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/core/makeduh.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/core/loadduh.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/core/dumbfile.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/core/duhtag.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/core/duhlen.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/core/atexit.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/helpers/stdfile.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/helpers/silence.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/helpers/sampbuf.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/helpers/riff.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/helpers/resample.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/helpers/memfile.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/helpers/clickrem.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/helpers/barray.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/xmeffect.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readxm2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readxm.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readstm2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readstm.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/reads3m2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/reads3m.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readriff.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readptm.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readpsm.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readoldpsm.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readokt2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readokt.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readmtm.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readmod2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readmod.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readdsmf.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readasy.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readamf2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readamf.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readam.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/read6692.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/read669.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/ptmeffect.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadxm2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadxm.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadstm2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadstm.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loads3m2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loads3m.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadriff2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadriff.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadptm2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadptm.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadpsm2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadpsm.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadoldpsm2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadoldpsm.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadokt2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadokt.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadmtm2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadmtm.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadmod2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadmod.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadasy2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadasy.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadamf2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadamf.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/load6692.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/load669.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/itunload.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/itrender.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/itread2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/itread.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/itorder.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/itmisc.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/itload2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/itload.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readany.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadany2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/loadany.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/it/readany2.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/helpers/resampler.c.o thirdparty/dumb/CMakeFiles/dumb.dir/src/helpers/lpc.c.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Blip_Buffer.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Classic_Emu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Data_Reader.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Dual_Resampler.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Effects_Buffer.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Fir_Resampler.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/gme.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Gme_File.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/M3u_Playlist.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Multi_Buffer.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Music_Emu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Ay_Apu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Ym2612_Nuked.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Sms_Apu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Ay_Cpu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Ay_Emu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Gb_Apu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Gb_Cpu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Gb_Oscs.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Gbs_Emu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Gym_Emu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Hes_Apu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Hes_Cpu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Hes_Emu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Kss_Cpu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Kss_Emu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Kss_Scc_Apu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Nes_Apu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Nes_Cpu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Nes_Fme7_Apu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Nes_Namco_Apu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Nes_Oscs.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Nes_Vrc6_Apu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Nsf_Emu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Nsfe_Emu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Sap_Apu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Sap_Cpu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Sap_Emu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Snes_Spc.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Spc_Cpu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Spc_Dsp.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Spc_Emu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Spc_Filter.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Vgm_Emu.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Vgm_Emu_Impl.cpp.o thirdparty/game-music-emu/gme/CMakeFiles/gme.dir/Ym2413_Emu.cpp.o thirdparty/adlmidi/CMakeFiles/adl.dir/adlmidi_midiplay.cpp.o thirdparty/adlmidi/CMakeFiles/adl.dir/adlmidi_opl3.cpp.o thirdparty/adlmidi/CMakeFiles/adl.dir/adlmidi_private.cpp.o thirdparty/adlmidi/CMakeFiles/adl.dir/adlmidi.cpp.o thirdparty/adlmidi/CMakeFiles/adl.dir/adlmidi_load.cpp.o thirdparty/adlmidi/CMakeFiles/adl.dir/inst_db.cpp.o thirdparty/adlmidi/CMakeFiles/adl.dir/chips/opal_opl3.cpp.o thirdparty/adlmidi/CMakeFiles/adl.dir/chips/dosbox/dbopl.cpp.o thirdparty/adlmidi/CMakeFiles/adl.dir/chips/nuked_opl3_v174.cpp.o thirdparty/adlmidi/CMakeFiles/adl.dir/chips/java_opl3.cpp.o thirdparty/adlmidi/CMakeFiles/adl.dir/chips/dosbox_opl3.cpp.o thirdparty/adlmidi/CMakeFiles/adl.dir/chips/nuked_opl3.cpp.o thirdparty/adlmidi/CMakeFiles/adl.dir/chips/nuked/nukedopl3_174.c.o thirdparty/adlmidi/CMakeFiles/adl.dir/chips/nuked/nukedopl3.c.o thirdparty/adlmidi/CMakeFiles/adl.dir/wopl/wopl_file.c.o thirdparty/oplsynth/CMakeFiles/oplsynth.dir/fmopl.cpp.o thirdparty/oplsynth/CMakeFiles/oplsynth.dir/musicblock.cpp.o thirdparty/oplsynth/CMakeFiles/oplsynth.dir/nukedopl3.cpp.o thirdparty/oplsynth/CMakeFiles/oplsynth.dir/opl_mus_player.cpp.o thirdparty/oplsynth/CMakeFiles/oplsynth.dir/OPL3.cpp.o thirdparty/oplsynth/CMakeFiles/oplsynth.dir/oplio.cpp.o thirdparty/oplsynth/CMakeFiles/oplsynth.dir/dosbox/opl.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/opnmidi_load.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/opnmidi_private.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/opnmidi.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/opnmidi_midiplay.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/opnmidi_opn2.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/np2/fmgen_fmgen.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/np2/fmgen_opna.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/np2/fmgen_fmtimer.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/np2/fmgen_file.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/np2/fmgen_psg.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/mame_opn2.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/gens_opn2.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/mame_opna.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/np2_opna.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/mamefm/ymdeltat.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/mamefm/resampler.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/mamefm/fm.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/nuked_opn2.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/gens/Ym2612.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/gx_opn2.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/pmdwin_opna.cpp.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/nuked/ym3438.c.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/gx/gx_ym2612.c.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/pmdwin/opna.c.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/pmdwin/psg.c.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/pmdwin/rhythmdata.c.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/mamefm/emu2149.c.o thirdparty/opnmidi/CMakeFiles/opn.dir/chips/mame/mame_ym2612fm.c.o thirdparty/opnmidi/CMakeFiles/opn.dir/wopn/wopn_file.c.o thirdparty/timidity/CMakeFiles/timidity.dir/common.cpp.o thirdparty/timidity/CMakeFiles/timidity.dir/instrum.cpp.o thirdparty/timidity/CMakeFiles/timidity.dir/instrum_dls.cpp.o thirdparty/timidity/CMakeFiles/timidity.dir/instrum_font.cpp.o thirdparty/timidity/CMakeFiles/timidity.dir/instrum_sf2.cpp.o thirdparty/timidity/CMakeFiles/timidity.dir/mix.cpp.o thirdparty/timidity/CMakeFiles/timidity.dir/playmidi.cpp.o thirdparty/timidity/CMakeFiles/timidity.dir/resample.cpp.o thirdparty/timidity/CMakeFiles/timidity.dir/timidity.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/fft4g.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/reverb.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/common.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/configfile.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/effect.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/filter.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/freq.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/instrum.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/mblock.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/mix.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/playmidi.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/quantity.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/readmidic.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/recache.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/resample.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/sbkconv.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/sffile.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/sfitem.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/smplfile.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/sndfont.cpp.o thirdparty/timidityplus/CMakeFiles/timidityplus.dir/tables.cpp.o thirdparty/wildmidi/CMakeFiles/wildmidi.dir/file_io.cpp.o thirdparty/wildmidi/CMakeFiles/wildmidi.dir/gus_pat.cpp.o thirdparty/wildmidi/CMakeFiles/wildmidi.dir/reverb.cpp.o thirdparty/wildmidi/CMakeFiles/wildmidi.dir/wildmidi_lib.cpp.o thirdparty/wildmidi/CMakeFiles/wildmidi.dir/wm_error.cpp.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/utils/fluid_conv.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/utils/fluid_hash.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/utils/fluid_list.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/utils/fluid_ringbuffer.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/utils/fluid_settings.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/utils/fluid_sys.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/sfloader/fluid_defsfont.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/sfloader/fluid_sfont.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/sfloader/fluid_sffile.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/sfloader/fluid_samplecache.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/rvoice/fluid_adsr_env.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/rvoice/fluid_chorus.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/rvoice/fluid_iir_filter.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/rvoice/fluid_lfo.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/rvoice/fluid_rvoice.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/rvoice/fluid_rvoice_dsp.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/rvoice/fluid_rvoice_event.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/rvoice/fluid_rvoice_mixer.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/rvoice/fluid_rev.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/synth/fluid_chan.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/synth/fluid_event.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/synth/fluid_gen.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/synth/fluid_mod.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/synth/fluid_synth.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/synth/fluid_synth_monopoly.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/synth/fluid_tuning.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/synth/fluid_voice.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/midi/fluid_midi.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/midi/fluid_midi_router.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/midi/fluid_seqbind.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/midi/fluid_seqbind_notes.cpp.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/midi/fluid_seq.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/midi/fluid_seq_queue.cpp.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/drivers/fluid_adriver.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/drivers/fluid_mdriver.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/bindings/fluid_filerenderer.c.o thirdparty/fluidsynth/src/CMakeFiles/fluidsynth.dir/bindings/fluid_ladspa.c.o source/CMakeFiles/zmusic.dir/loader/i_module.cpp.o source/CMakeFiles/zmusic.dir/mididevices/music_base_mididevice.cpp.o source/CMakeFiles/zmusic.dir/mididevices/music_adlmidi_mididevice.cpp.o source/CMakeFiles/zmusic.dir/mididevices/music_opl_mididevice.cpp.o source/CMakeFiles/zmusic.dir/mididevices/music_opnmidi_mididevice.cpp.o source/CMakeFiles/zmusic.dir/mididevices/music_timiditypp_mididevice.cpp.o source/CMakeFiles/zmusic.dir/mididevices/music_fluidsynth_mididevice.cpp.o source/CMakeFiles/zmusic.dir/mididevices/music_softsynth_mididevice.cpp.o source/CMakeFiles/zmusic.dir/mididevices/music_timidity_mididevice.cpp.o source/CMakeFiles/zmusic.dir/mididevices/music_wildmidi_mididevice.cpp.o source/CMakeFiles/zmusic.dir/mididevices/music_wavewriter_mididevice.cpp.o source/CMakeFiles/zmusic.dir/midisources/midisource.cpp.o source/CMakeFiles/zmusic.dir/midisources/midisource_mus.cpp.o source/CMakeFiles/zmusic.dir/midisources/midisource_smf.cpp.o source/CMakeFiles/zmusic.dir/midisources/midisource_hmi.cpp.o source/CMakeFiles/zmusic.dir/midisources/midisource_xmi.cpp.o source/CMakeFiles/zmusic.dir/midisources/midisource_mids.cpp.o source/CMakeFiles/zmusic.dir/streamsources/music_dumb.cpp.o source/CMakeFiles/zmusic.dir/streamsources/music_gme.cpp.o source/CMakeFiles/zmusic.dir/streamsources/music_libsndfile.cpp.o source/CMakeFiles/zmusic.dir/streamsources/music_opl.cpp.o source/CMakeFiles/zmusic.dir/streamsources/music_xa.cpp.o source/CMakeFiles/zmusic.dir/musicformats/music_stream.cpp.o source/CMakeFiles/zmusic.dir/musicformats/music_midi.cpp.o source/CMakeFiles/zmusic.dir/musicformats/music_cd.cpp.o source/CMakeFiles/zmusic.dir/decoder/sounddecoder.cpp.o source/CMakeFiles/zmusic.dir/decoder/sndfile_decoder.cpp.o source/CMakeFiles/zmusic.dir/decoder/mpg123_decoder.cpp.o source/CMakeFiles/zmusic.dir/zmusic/configuration.cpp.o source/CMakeFiles/zmusic.dir/zmusic/zmusic.cpp.o source/CMakeFiles/zmusic.dir/zmusic/critsec.cpp.o source/CMakeFiles/zmusic.dir/loader/test.c.o source/CMakeFiles/zmusic.dir/mididevices/music_alsa_mididevice.cpp.o source/CMakeFiles/zmusic.dir/mididevices/music_alsa_state.cpp.o  /usr/lib64/libsndfile.so  /usr/lib64/libasound.so  /usr/lib64/libz.so  -ldl  /usr/lib64/libglib-2.0.so && :
/var/tmp/portage/media-libs/zmusic-1.1.12/work/ZMusic-1.1.12/thirdparty/adlmidi/chips/nuked/nukedopl3_174.h:59:8: error: type ‘struct _opl3_slot’ violates the C++ One Definition Rule [-Werror=odr]
   59 | struct _opl3_slot {
      |        ^
/var/tmp/portage/media-libs/zmusic-1.1.12/work/ZMusic-1.1.12/thirdparty/adlmidi/chips/nuked/nukedopl3.h:62:8: note: a different type is defined in another translation unit
   62 | struct _opl3_slot {
      |        ^
/var/tmp/portage/media-libs/zmusic-1.1.12/work/ZMusic-1.1.12/thirdparty/adlmidi/chips/nuked/nukedopl3_174.h:85:12: note: the first difference of corresponding definitions is field ‘pg_phase’
   85 |     Bit32u pg_phase;
      |            ^
/var/tmp/portage/media-libs/zmusic-1.1.12/work/ZMusic-1.1.12/thirdparty/adlmidi/chips/nuked/nukedopl3.h:88:12: note: a field with different name is defined in another translation unit
   88 |     Bit32u pg_reset;
      |            ^
/var/tmp/portage/media-libs/zmusic-1.1.12/work/ZMusic-1.1.12/thirdparty/adlmidi/chips/nuked/nukedopl3_174.h:93:8: error: type ‘struct _opl3_channel’ violates the C++ One Definition Rule [-Werror=odr]
   93 | struct _opl3_channel {
      |        ^
/var/tmp/portage/media-libs/zmusic-1.1.12/work/ZMusic-1.1.12/thirdparty/adlmidi/chips/nuked/nukedopl3.h:100:8: note: a different type is defined in another translation unit
  100 | struct _opl3_channel {
      |        ^
/var/tmp/portage/media-libs/zmusic-1.1.12/work/ZMusic-1.1.12/thirdparty/adlmidi/chips/nuked/nukedopl3.h:114:11: note: the first difference of corresponding definitions is field ‘ch_num’
  114 |     Bit8u ch_num;
      |           ^
/var/tmp/portage/media-libs/zmusic-1.1.12/work/ZMusic-1.1.12/thirdparty/adlmidi/chips/nuked/nukedopl3.h:100:8: note: a type with different number of fields is defined in another translation unit
  100 | struct _opl3_channel {
      |        ^
/var/tmp/portage/media-libs/zmusic-1.1.12/work/ZMusic-1.1.12/thirdparty/adlmidi/chips/nuked/nukedopl3_174.h:115:8: error: type ‘struct _opl3_chip’ violates the C++ One Definition Rule [-Werror=odr]
  115 | struct _opl3_chip {
      |        ^
/var/tmp/portage/media-libs/zmusic-1.1.12/work/ZMusic-1.1.12/thirdparty/adlmidi/chips/nuked/nukedopl3.h:123:8: note: a different type is defined in another translation unit
  123 | struct _opl3_chip {
      |        ^
/var/tmp/portage/media-libs/zmusic-1.1.12/work/ZMusic-1.1.12/thirdparty/adlmidi/chips/nuked/nukedopl3_174.h:117:15: note: the first difference of corresponding definitions is field ‘chipslot’
  117 |     opl3_slot chipslot[36];
      |               ^
/var/tmp/portage/media-libs/zmusic-1.1.12/work/ZMusic-1.1.12/thirdparty/adlmidi/chips/nuked/nukedopl3.h:125:15: note: a field with different name is defined in another translation unit
  125 |     opl3_slot slot[36];
      |               ^
lto1: some warnings being treated as errors
lto-wrapper: fatal error: /usr/bin/x86_64-pc-linux-gnu-g++ returned 1 exit status
compilation terminated.
/usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../x86_64-pc-linux-gnu/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status

Downstream report: https://bugs.gentoo.org/860117
Full build log: build.log

`BUILD_SHARED_LIBS=OFF` does not work properly in Ubuntu 18.04

I am not sure what I am doing wrong, but the linker says that everything is a duplicate reference.

Consolidate compiler generated dependencies of target OSDependent
[  0%] Built target OSDependent
Consolidate compiler generated dependencies of target OGLCompiler
[  0%] Built target OGLCompiler
Consolidate compiler generated dependencies of target glslang
[  5%] Built target glslang
Consolidate compiler generated dependencies of target SPIRV
[  6%] Built target SPIRV
Consolidate compiler generated dependencies of target asmjit
[ 10%] Built target asmjit
Consolidate compiler generated dependencies of target jpeg
[ 14%] Built target jpeg
Consolidate compiler generated dependencies of target bz2
[ 15%] Built target bz2
Consolidate compiler generated dependencies of target lzma
[ 18%] Built target lzma
Consolidate compiler generated dependencies of target re2c
[ 26%] Built target re2c
Consolidate compiler generated dependencies of target lemon
[ 26%] Built target lemon
Consolidate compiler generated dependencies of target zipdir
[ 27%] Built target zipdir
Consolidate compiler generated dependencies of target arithchk
[ 28%] Built target arithchk
Consolidate compiler generated dependencies of target qnan
[ 29%] Built target qnan
Consolidate compiler generated dependencies of target gdtoa
[ 30%] Built target gdtoa
src/gitinfo.h is up to date at commit ha0.0-717-g7c80ffa8d.
[ 30%] Built target revision_check
Consolidate compiler generated dependencies of target zdoom
[ 30%] Linking CXX executable ../gzdoom
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libzmusic.a(i_module.cpp.o): In function `FModule::Unload()':
i_module.cpp:(.text+0x0): multiple definition of `FModule::Unload()'
CMakeFiles/zdoom.dir/common/utility/i_module.cpp.o:i_module.cpp:(.text+0xd0): first defined here
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libzmusic.a(i_module.cpp.o): In function `FModule::Open(char const*)':
i_module.cpp:(.text+0x30): multiple definition of `FModule::Open(char const*)'
CMakeFiles/zdoom.dir/common/utility/i_module.cpp.o:i_module.cpp:(.text+0x100): first defined here
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libzmusic.a(i_module.cpp.o): In function `FModule::GetSym(char const*)':
i_module.cpp:(.text+0x60): multiple definition of `FModule::GetSym(char const*)'
CMakeFiles/zdoom.dir/common/utility/i_module.cpp.o:i_module.cpp:(.text+0x130): first defined here
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libzmusic.a(i_module.cpp.o): In function `FModule::Load(std::initializer_list<char const*>)':
i_module.cpp:(.text+0x70): multiple definition of `FModule::Load(std::initializer_list<char const*>)'
CMakeFiles/zdoom.dir/common/utility/i_module.cpp.o:i_module.cpp:(.text+0x0): first defined here
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libzmusic.a(i_module.cpp.o): In function `FModule_SetProgDir(char const*)':
i_module.cpp:(.text+0x100): multiple definition of `FModule_SetProgDir(char const*)'
CMakeFiles/zdoom.dir/common/utility/i_module.cpp.o:i_module.cpp:(.text+0x140): first defined here
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libzmusic.a(music_alsa_state.cpp.o): undefined reference to symbol 'snd_seq_query_next_port@@ALSA_0.9'
//usr/lib/x86_64-linux-gnu/libasound.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
src/CMakeFiles/zdoom.dir/build.make:7781: recipe for target 'gzdoom' failed
make[2]: *** [gzdoom] Error 1
CMakeFiles/Makefile2:784: recipe for target 'src/CMakeFiles/zdoom.dir/all' failed
make[1]: *** [src/CMakeFiles/zdoom.dir/all] Error 2
Makefile:135: recipe for target 'all' failed
make: *** [all] Error 2
raa125@r-sweden:~/Projects/gzdoom/build$```

Unable to build the zmusic 1.1.6

Hi!

I'm getting this error when attempting to build in Ubuntu focal:
-- Found SndFile: /usr/lib/x86_64-linux-gnu/libsndfile.so
CMake Error at cmake/FindSndFile.cmake:37 (add_library):
add_library cannot create ALIAS target "SndFile::sndfile" because target
"sndfile" is imported but not globally visible.

You can find the full log attached.
Version 1.1.4 builds fine.

Cheers!
Jhonny
zmusic_1.1.6-build.log

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.