Git Product home page Git Product logo

sdl_sound's Introduction

SDL_sound

SDL_sound; an abstract soundfile decoder.

What is this?

SDL_sound is a library that handles the decoding of several popular sound file formats, such as .WAV and .MP3. It is meant to make the programmer's sound playback tasks simpler. The programmer gives SDL_sound a filename, or feeds it data directly from one of many sources, and then reads the decoded waveform data back at her leisure. If resource constraints are a concern, SDL_sound can process sound data in programmer-specified blocks. Alternately, SDL_sound can decode a whole sound file and hand back a single pointer to the whole waveform. SDL_sound can also handle sample rate, audio format, and channel conversion on-the-fly and behind-the-scenes, if the programmer desires.

Please check the website for the most up-to-date information about SDL_sound:

https://icculus.org/SDL_sound/

SDL_sound REQUIRES Simple Directmedia Layer (SDL) 2.x to function, and cannot be built without it. You can get SDL from https://www.libsdl.org/

Current versions of SDL_sound do not use any external libraries for decoding various file formats. All needed decoder source code is included with the library. Unless explicitly disabled during initial build configuration, SDL_sound always supports the following file formats internally:

  • Wave (.WAV) files
  • MPEG-1 layers I-III (.MP3, .MP2, .MP1)
  • Ogg Vorbis (.OGG) files
  • Free Lossless Audio Codec (.FLAC) files
  • Audio Interchange format (.AIFF) files
  • Sun/NeXT Audio (.AU) files
  • Shorten (.SHN) files
  • Creative Labs Voice (.VOC) files
  • Various "module" formats (.MOD, .669, .AMF, .XM, .IT, .S3M, .STM, etc)
  • MIDI (.mid) files
  • Raw PCM data
  • (macOS/iOS only) anything that CoreAudio can decode.

Building/Installing:

Please read docs/INSTALL.txt.

Reporting bugs/commenting:

Please visit https://github.com/icculus/SDL_sound/issues for the bug tracker.

sdl_sound's People

Contributors

alicelr avatar amdmi3 avatar berolinux avatar ccawley2011 avatar ccvelandres avatar dasperal avatar ericoporto avatar fingolfin avatar icculus avatar madebr avatar mrcsnm avatar sezero avatar slouken avatar superzazu 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  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

sdl_sound's Issues

"release" tag

hi there, since the last release goes back several years, and the commit hashes changed since the switch from hg, would you mind doing an occasional tag so distros have something specific they can point to to get a tarball ? it doesn't really matter whether it's a proper release, for example it'd be perfectly fine if current master is tagged as e.g. "v1.0.4-beta1".

Let decoders claim a sound file

We need to let decoders signal that they own a given sound file.

For example, the .WAV decoder might hit this legitimate failure case (if given a 24-bit audio file, which we don't yet support)...

BAIL_MACRO("WAV: Unsupported sample size.", 0);

But then SDL_sound will try other decoders, which appropriately fail because the file isn't .mp3/.voc/whatever, eventually setting the error message to "Sound format unsupported."

So what we need is a way for decoders to say "this is definitely a .WAV (or whatever) file, but I can't open it (i/o issue, corrupted, some unsupported thing)," so that SDL_sound can report a more meaningful error and also know to stop trying other decoders.

minimum required SDL2 version and SDL_exp()

Without vorbis support, all builds and links fine, down to SDL2-2.0.4.
Vorbis however, requires SDL_exp() which was added in SDL2-2.0.9. Now:

  • exp() won't ever be a few lines of fallback code to add.

  • We can add 2.0.9 to find_package(SDL2) in CMakeLists.txt, however for
    that to work cmake needs to find sdl2-config-version.cmake, and it
    is only installed by SDL >= 2.0.12.

What to do about it? Simply require 2.0.12 or newer, which might be a
bit too much?

ugrade to newer versions of dr_flac and dr_mp3

dr_flac and dr_mp3 have received multitudes of updates since I last
touched them in Sep. 2018. I haven't upgraded to the newer versions
because I felt lazy about dealing with the api changes.

timidity: make testmidi to actually compile

This bug report was migrated from our old Bugzilla tracker.

These attachments are available in the static archive:

Reported in version: unspecified
Reported for operating system, platform: All, All

Comments on the original bug report:

On 2011-06-16 04:53:30 +0000, Ozkan Sezer wrote:

Attached patch does the following:

  • Add missing instrum_dls among the objects,
  • Add a simple __Sound_SetError() wrapper to testmidi.c so that linkage succeeds
  • Fix -ansi -pedantic warnings (extra semicolons at the end of a function, C++ style comments..)
  • Fix two signedness mismatch in comparison (int vs. size_t) warning
  • Fix a 'may be used uninitialized' warning in load_instrument_dls()
  • Fix signedess mismatch warnings in pointer assignments in Parse_INFO_INS()

dls2.h still emits pedantic warnings like:
dls2.h:112: warning: ISO C does not allow extra ';' outside of a function
... but that might not be avoidable due to the empty-defining of DEFINE_GUID

These, I extracted from my copy of libtimidity that I use in uhexen2 (see at http://uhexen2.svn.sourceforge.net/viewvc/uhexen2/trunk/libs/timidity/). The code may still be revised further for constification and C++ compiler compatibility.

Regards.

On 2011-06-16 04:54:35 +0000, Ozkan Sezer wrote:

Created attachment 631
timidity cleanups

On 2018-08-02 08:46:34 +0000, Ozkan Sezer wrote:

This is obsolete now, I think.

stack corruption in read_config_file()

This bug report was migrated from our old Bugzilla tracker.

Reported in version: unspecified
Reported for operating system, platform: Linux, x86

Comments on the original bug report:

On 2015-02-08 17:04:33 +0000, Ozkan Sezer wrote:

There is a stack corruption in read_config_file() where the
words index for the w[] array becomes equal to MAXWORDS. The
following simple patch fixes it.

diff -r 719dade41745 decoders/timidity/timidity.c
--- a/decoders/timidity/timidity.c	Wed Aug 15 23:52:18 2012 -0400
+++ b/decoders/timidity/timidity.c	Sun Feb 08 19:00:41 2015 +0200
@@ -113,8 +113,10 @@ static int read_config_file(char *name)
     if (*w[0] == '#')
         continue;
 
-    while (w[words] && *w[words] != '#' && (words < MAXWORDS))
-      w[++words]=strtok(0," \t\240");
+    while (w[words] && *w[words] != '#') {
+      if (++words == MAXWORDS) break;
+      w[words]=strtok(NULL, " \t\240");
+    }
 
         /*
          * TiMidity++ adds a number of extensions to the config file format.

On 2018-08-02 08:47:01 +0000, Ozkan Sezer wrote:

This is obsolete now

Error building with macOS Monterey and CMake 3.24

I tried to build on macOS Monterey 12.6 using the following:

SDL2_SOUND_VERSION=8d96d4cc0e1df35835a222ee51a7c32f273ec63e
cd /tmp
curl -fLsS "https://github.com/icculus/SDL_sound/archive/$SDL2_SOUND_VERSION.tar.gz" --output SDL_sound.tar.gz
tar -xvzf SDL_sound.tar.gz
mv SDL_sound-$SDL2_SOUND_VERSION SDL_sound
cd /tmp/SDL_sound
mkdir /tmp/SDL_sound/build
cd /tmp/SDL_sound/build
cmake -DSDL2_DIR=/usr/local/lib/cmake/SDL2  -DSDLSOUND_DECODER_MIDI=1 ..  && make
make install

but I got an error at link time that looked like I was missing -framework AudioToolbox, but I use it in other projects, not sure what I am doing wrong here... I have cmake version 3.24.2

-- The C compiler identification is AppleClang 13.1.6.13160021
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /Library/Developer/CommandLineTools/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) 
-- Doxygen not found. You won't be able to build documentation.
-- SDL_sound will build with the following options:
--   WAV support: enabled
--   AIFF support: enabled
--   AU support: enabled
--   VOC support: enabled
--   FLAC support: enabled
--   VORBIS support: enabled
--   RAW support: enabled
--   SHN support: enabled
--   MODPLUG support: enabled
--   MP3 support: enabled
--   TiMidity support: enabled
--   COREAUDIO support: enabled
--   Build static library: enabled
--   Build shared library: enabled
--   Build stdio test program: enabled
-- Configuring done
CMake Warning (dev):
  Policy CMP0068 is not set: RPATH settings on macOS do not affect
  install_name.  Run "cmake --help-policy CMP0068" for policy details.  Use
  the cmake_policy command to set the policy and suppress this warning.

  For compatibility with older versions of CMake, the install_name fields for
  the following targets are still affected by RPATH settings:

   SDL2_sound

This warning is for project developers.  Use -Wno-dev to suppress it.

-- Generating done
-- Build files have been written to: /tmp/SDL_sound/build
[  0%] Building C object CMakeFiles/SDL2_sound.dir/src/SDL_sound.c.o
[  1%] Building C object CMakeFiles/SDL2_sound-static.dir/src/SDL_sound.c.o
[  3%] Building C object CMakeFiles/SDL2_sound-static.dir/src/SDL_sound_aiff.c.o
[  3%] Building C object CMakeFiles/SDL2_sound.dir/src/SDL_sound_aiff.c.o
[  4%] Building C object CMakeFiles/SDL2_sound.dir/src/SDL_sound_au.c.o
[  5%] Building C object CMakeFiles/SDL2_sound.dir/src/SDL_sound_coreaudio.c.o
[  7%] Building C object CMakeFiles/SDL2_sound.dir/src/SDL_sound_flac.c.o
[  7%] Building C object CMakeFiles/SDL2_sound-static.dir/src/SDL_sound_au.c.o
[  8%] Building C object CMakeFiles/SDL2_sound-static.dir/src/SDL_sound_coreaudio.c.o
[  9%] Building C object CMakeFiles/SDL2_sound-static.dir/src/SDL_sound_flac.c.o
/tmp/SDL_sound/src/SDL_sound_coreaudio.c:487:9: warning: variable 'total_frames_read' set but not used [-Wunused-but-set-variable]
        UInt32 total_frames_read = 0;
               ^
1 warning generated.
[ 10%] Building C object CMakeFiles/SDL2_sound-static.dir/src/SDL_sound_midi.c.o
/tmp/SDL_sound/src/SDL_sound_coreaudio.c:487:9: warning: variable 'total_frames_read' set but not used [-Wunused-but-set-variable]
        UInt32 total_frames_read = 0;
               ^
[ 11%] Building C object CMakeFiles/SDL2_sound.dir/src/SDL_sound_midi.c.o
1 warning generated.
[ 12%] Building C object CMakeFiles/SDL2_sound-static.dir/src/SDL_sound_modplug.c.o
[ 13%] Building C object CMakeFiles/SDL2_sound.dir/src/SDL_sound_modplug.c.o
[ 14%] Building C object CMakeFiles/SDL2_sound.dir/src/SDL_sound_mp3.c.o
[ 14%] Building C object CMakeFiles/SDL2_sound-static.dir/src/SDL_sound_mp3.c.o
[ 15%] Building C object CMakeFiles/SDL2_sound.dir/src/SDL_sound_raw.c.o
[ 16%] Building C object CMakeFiles/SDL2_sound-static.dir/src/SDL_sound_raw.c.o
[ 17%] Building C object CMakeFiles/SDL2_sound-static.dir/src/SDL_sound_shn.c.o
[ 18%] Building C object CMakeFiles/SDL2_sound.dir/src/SDL_sound_shn.c.o
[ 19%] Building C object CMakeFiles/SDL2_sound-static.dir/src/SDL_sound_voc.c.o
[ 20%] Building C object CMakeFiles/SDL2_sound-static.dir/src/SDL_sound_vorbis.c.o
[ 20%] Building C object CMakeFiles/SDL2_sound.dir/src/SDL_sound_voc.c.o
[ 21%] Building C object CMakeFiles/SDL2_sound-static.dir/src/SDL_sound_wav.c.o
[ 22%] Building C object CMakeFiles/SDL2_sound.dir/src/SDL_sound_vorbis.c.o
[ 23%] Building C object CMakeFiles/SDL2_sound.dir/src/SDL_sound_wav.c.o
[ 24%] Building C object CMakeFiles/SDL2_sound-static.dir/src/timidity/common.c.o
[ 25%] Building C object CMakeFiles/SDL2_sound.dir/src/timidity/common.c.o
[ 26%] Building C object CMakeFiles/SDL2_sound-static.dir/src/timidity/instrum.c.o
[ 27%] Building C object CMakeFiles/SDL2_sound-static.dir/src/timidity/mix.c.o
[ 28%] Building C object CMakeFiles/SDL2_sound-static.dir/src/timidity/output.c.o
[ 29%] Building C object CMakeFiles/SDL2_sound.dir/src/timidity/instrum.c.o
[ 30%] Building C object CMakeFiles/SDL2_sound.dir/src/timidity/mix.c.o
[ 31%] Building C object CMakeFiles/SDL2_sound.dir/src/timidity/output.c.o
[ 31%] Building C object CMakeFiles/SDL2_sound-static.dir/src/timidity/playmidi.c.o
[ 32%] Building C object CMakeFiles/SDL2_sound-static.dir/src/timidity/readmidi.c.o
[ 33%] Building C object CMakeFiles/SDL2_sound-static.dir/src/timidity/resample.c.o
[ 34%] Building C object CMakeFiles/SDL2_sound.dir/src/timidity/playmidi.c.o
[ 35%] Building C object CMakeFiles/SDL2_sound-static.dir/src/timidity/tables.c.o
[ 36%] Building C object CMakeFiles/SDL2_sound-static.dir/src/timidity/timidity.c.o
[ 37%] Building C object CMakeFiles/SDL2_sound.dir/src/timidity/readmidi.c.o
[ 38%] Building C object CMakeFiles/SDL2_sound.dir/src/timidity/resample.c.o
[ 38%] Building C object CMakeFiles/SDL2_sound.dir/src/timidity/tables.c.o
[ 39%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/fastmix.c.o
[ 40%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_669.c.o
[ 41%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_amf.c.o
[ 42%] Building C object CMakeFiles/SDL2_sound.dir/src/timidity/timidity.c.o
[ 43%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/fastmix.c.o
[ 44%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_669.c.o
[ 45%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_ams.c.o
[ 46%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_dbm.c.o
[ 46%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_dmf.c.o
[ 47%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_amf.c.o
[ 48%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_ams.c.o
[ 49%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_dsm.c.o
[ 50%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_dbm.c.o
[ 51%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_dmf.c.o
[ 52%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_far.c.o
[ 53%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_it.c.o
[ 54%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_dsm.c.o
[ 55%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_far.c.o
[ 56%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_mdl.c.o
[ 56%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_it.c.o
[ 57%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_med.c.o
[ 58%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_mdl.c.o
[ 59%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_mod.c.o
[ 60%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_mt2.c.o
[ 61%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_mtm.c.o
[ 62%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_med.c.o
[ 63%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_okt.c.o
[ 64%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_mod.c.o
[ 64%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_gdm.c.o
[ 65%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_mt2.c.o
[ 66%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_mtm.c.o
[ 67%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_okt.c.o
[ 68%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_psm.c.o
[ 69%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_ptm.c.o
[ 70%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_gdm.c.o
[ 71%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_s3m.c.o
[ 72%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_stm.c.o
[ 73%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_psm.c.o
[ 74%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_ult.c.o
[ 75%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_ptm.c.o
[ 75%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_s3m.c.o
[ 76%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_umx.c.o
[ 77%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/load_xm.c.o
[ 78%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/mmcmp.c.o
[ 79%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/modplug.c.o
[ 80%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_stm.c.o
[ 80%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/snd_dsp.c.o
[ 81%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_ult.c.o
[ 82%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/snd_flt.c.o
[ 83%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/snd_fx.c.o
[ 84%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/sndfile.c.o
[ 85%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_umx.c.o
[ 86%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/load_xm.c.o
/tmp/SDL_sound/src/libmodplug/snd_fx.c:1837:9: warning: variable 'dwMidiCode' set but not used [-Wunused-but-set-variable]
                DWORD dwMidiCode = 0, dwByteCode = 0;
                      ^
1 warning generated.
[ 87%] Building C object CMakeFiles/SDL2_sound-static.dir/src/libmodplug/sndmix.c.o
[ 88%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/mmcmp.c.o
[ 89%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/modplug.c.o
[ 90%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/snd_dsp.c.o
[ 92%] Linking C static library libSDL2_sound.a
[ 92%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/snd_flt.c.o
[ 93%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/snd_fx.c.o
[ 93%] Built target SDL2_sound-static
[ 93%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/sndfile.c.o
[ 94%] Building C object CMakeFiles/SDL2_sound.dir/src/libmodplug/sndmix.c.o
/tmp/SDL_sound/src/libmodplug/snd_fx.c:1837:9: warning: variable 'dwMidiCode' set but not used [-Wunused-but-set-variable]
                DWORD dwMidiCode = 0, dwByteCode = 0;
                      ^
1 warning generated.
[ 95%] Linking C shared library libSDL2_sound.dylib
Undefined symbols for architecture x86_64:
  "_AudioFileClose", referenced from:
      _CoreAudio_open in SDL_sound_coreaudio.c.o
      _CoreAudio_close in SDL_sound_coreaudio.c.o
  "_AudioFileGetProperty", referenced from:
      _CoreAudio_open in SDL_sound_coreaudio.c.o
  "_AudioFileOpenWithCallbacks", referenced from:
      _CoreAudio_open in SDL_sound_coreaudio.c.o
  "_ExtAudioFileDispose", referenced from:
      _CoreAudio_open in SDL_sound_coreaudio.c.o
      _CoreAudio_close in SDL_sound_coreaudio.c.o
  "_ExtAudioFileRead", referenced from:
      _CoreAudio_read in SDL_sound_coreaudio.c.o
  "_ExtAudioFileSeek", referenced from:
      _CoreAudio_rewind in SDL_sound_coreaudio.c.o
      _CoreAudio_seek in SDL_sound_coreaudio.c.o
  "_ExtAudioFileSetProperty", referenced from:
      _CoreAudio_open in SDL_sound_coreaudio.c.o
  "_ExtAudioFileWrapAudioFileID", referenced from:
      _CoreAudio_open in SDL_sound_coreaudio.c.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [libSDL2_sound.2.0.1.dylib] Error 1
make[1]: *** [CMakeFiles/SDL2_sound.dir/all] Error 2
make: *** [all] Error 2

Would it be possible for a new SDL sound release? I noticed in brew they are relying on releases, and a new release would make it easier to build apps that use SDL_sound from source by just running brew install sdl2_sound for dependencies.

RWseek / RWtell usage needs audit

SDL2 RWseek / RWteel returns Sint64, but SDL_sound assigns the returned
values to int or Uint32, therefore needs revising:

What file sizes are to be supported, < 2gb, < 4gb, or 64 bits? @icculus
says: "practically, most things it wants to play are going to be < 2gb,
but there's no reason we should enforce that."

timidity, honor the return code from recursive read_config_file() call

This bug report was migrated from our old Bugzilla tracker.

These attachments are available in the static archive:

Reported in version: unspecified
Reported for operating system, platform: All, All

Comments on the original bug report:

On 2011-06-15 11:17:54 +0000, Ozkan Sezer wrote:

Created attachment 629
honor the return code from recursive read_config_file() call

read_config_file() doesn't honor the return code from recursive read_config_file() call for the "source" directive. attached tiny patch fixes that. (this, I ran into in a timidity-0.2i bugfix patch found at http://www.onicos.com/staff/iz/timidity/)

On 2011-06-15 13:14:30 +0000, Ryan C. Gordon wrote:

This is now hg changeset 37e512931333 for the development branch and hg changeset f31f9ceddec9 for the stable-1.0 branch.

Thanks!

--ryan.

Sound_GetDuration() backport to stable-1.0

This bug report was migrated from our old Bugzilla tracker.

These attachments are available in the static archive:

Reported in version: unspecified
Reported for operating system, platform: All, All

Comments on the original bug report:

On 2012-04-22 16:47:38 +0000, Nikos Chantziaras wrote:

Created attachment 848
Backport of Sound_DecodeAll() from development branch

I was previously using SDL_sound for audio decoding in my apps and simply used Sound_DecodeAll() for the job. That meant I could calculate the duration easily. This was a horrible memory waster though (playing a few layered tracks simultaneously would eat up anywhere between 100 and 300MB RAM.)

So I switched to Sound_Decode(). However, being able to tell the duration of the sample is critical. Since SDL_sound might need some time for a proper release, I ported Sound_DecodeAll() from the development branch to the stable-1.0 branch. It's a backport of these:

http://hg.icculus.org/icculus/SDL_sound/rev/c66080364dff
http://hg.icculus.org/icculus/SDL_sound/rev/3e705c9180e5

Note that binary compatibility with SDL_sound 1.0 is preserved.

support linking external libmodplug

Please add an option to link against external libmodplug. Most Linux distributions include a libmodplug package that can be detected using pkg-config:

find_package(PkgConfig)
pkg_check_modules(MODPLUG libmodplug)

Bundled libmodlug copy could be used if external one is not found.

mp3 misses a bit of sound at the end

playsound_simple_mp3.zip

I am attaching playsound_simple.exe built with the current SDL_sound and SDL2, and a really short test.mp3 file.

When playing this mp3 file on VLC there's a small bit more of sound you can listen, and when using playsound_simple.exe like

$> playsound_simple.exe test.mp3
Now playing [test.mp3]...

I can hear there's a small bit at the end that doesn't play.

build: stb_vorbis.h requires -lm

There is no -lm on the link command for libSDL2_sound.so.2, so the build fails on some systems where -Wl,--as-needed is also used, as the linker no longer scans -lSDL2 > libSDL2.so > libasound.so.2 > libm.so.6.

[   42s] [ 91%] Linking C shared library libSDL2_sound.so
[   42s] /usr/bin/cmake -E cmake_link_script CMakeFiles/SDL2_sound.dir/link.txt --verbose=1
[   42s] /usr/bin/cc -fPIC -fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fun
wind-tables -fasynchronous-unwind-tables -fstack-clash-protection -DNDEBUG -O2 -g -DNDEBUG  -Wl,--as-needed -Wl,--no-undefined 
-Wl,-z,now -shared -Wl,-soname,libSDL2_sound.so.2 -o libSDL2_sound.so.2.0.1 CMakeFiles/SDL2_sound.dir/src/SDL_sound.c.o CMakeFi
les/SDL2_sound.dir/src/SDL_sound_aiff.c.o CMakeFiles/SDL2_sound.dir/src/SDL_sound_au.c.o CMakeFiles/SDL2_sound.dir/src/SDL_soun
d_coreaudio.c.o CMakeFiles/SDL2_sound.dir/src/SDL_sound_flac.c.o CMakeFiles/SDL2_sound.dir/src/SDL_sound_midi.c.o CMakeFiles/SD
L2_sound.dir/src/SDL_sound_modplug.c.o CMakeFiles/SDL2_sound.dir/src/SDL_sound_mp3.c.o CMakeFiles/SDL2_sound.dir/src/SDL_sound_
raw.c.o CMakeFiles/SDL2_sound.dir/src/SDL_sound_shn.c.o CMakeFiles/SDL2_sound.dir/src/SDL_sound_voc.c.o CMakeFiles/SDL2_sound.d
ir/src/SDL_sound_vorbis.c.o CMakeFiles/SDL2_sound.dir/src/SDL_sound_wav.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/fastmix.c.
o CMakeFiles/SDL2_sound.dir/src/libmodplug/load_669.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/load_amf.c.o CMakeFiles/SDL2_s
ound.dir/src/libmodplug/load_ams.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/load_dbm.c.o CMakeFiles/SDL2_sound.dir/src/libmod
plug/load_dmf.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/load_dsm.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/load_far.c.o C
MakeFiles/SDL2_sound.dir/src/libmodplug/load_it.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/load_mdl.c.o CMakeFiles/SDL2_sound
.dir/src/libmodplug/load_med.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/load_mod.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug
/load_mt2.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/load_mtm.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/load_okt.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/load_gdm.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/load_psm.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/load_ptm.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/load_s3m.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/load_stm.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/load_ult.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/load_umx.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/load_xm.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/mmcmp.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/modplug.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/snd_dsp.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/snd_flt.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/snd_fx.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/sndfile.c.o CMakeFiles/SDL2_sound.dir/src/libmodplug/sndmix.c.o  -L/usr/lib64  -lSDL2 
[   42s] /usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: CMakeFiles/SDL2_sound.dir/src/SDL_sound_vorbis.c.o: in function `lookup1_values':
[   42s] /home/abuild/rpmbuild/BUILD/SDL_sound-2.0.1/src/stb_vorbis.h:1283: undefined reference to `exp'
(openSUSE Leap 15.3)

Question about building with MSVC

Hi! I was looking at SDL_sound from the perspective from people used with Visual Studio, and noticed that the SDL2-devel-2.0.X-VC.zip packages in SDL don't ship a sdl2-config.cmake file, so someone that wants to build SDL_sound on Windows may have a hard time figuring how to satisfy the SDL2 dependency - they will also need to build SDL2 from source.

Which is a more desired path, include sdl2-config.cmake in SDL2 or add a vcxproj and solution files in this project?

SDL_sound unable to decode Ogg Vorbis file

This bug report was migrated from our old Bugzilla tracker.

These attachments are available in the static archive:

Reported in version: unspecified
Reported for operating system, platform: Linux, x86_64

Comments on the original bug report:

On 2012-04-21 14:01:30 +0000, Nikos Chantziaras wrote:

Created attachment 847
Ogg Vorbis file that cannot be decoded

SDL_sound (current hg stable-1.0) cannot decode the attached file in whole. A part of it is decoded, but at the wrong samplerate. The SOUND_SAMPLEFLAG_ERROR is set in the sample, but Sound_GetError() doesn't return anything.

SDL_mixer has no problems decoding the file with Mix_LoadWAV_RW, so it's not a problem with the file. SDL_mixer is unsuitable though, because it doesn't support partial decoding; it decodes the whole file in one go.

libvorbis 1.3.2
libogg 1.3.0

This is a test program that demonstrates the bug:

#include <stdio.h>
#include <SDL_sound.h>

int main(void)
{
    if (SDL_Init(SDL_INIT_AUDIO) != 0) {
        printf("SDL_Init() failed: %s\n", SDL_GetError());
        return 1;
    }

    if (Sound_Init() == 0) {
        printf("Sound_Init() failed: %s\n", Sound_GetError());
        return 1;
    }

    SDL_RWops* rw = SDL_RWFromFile("test.ogg", "rb");
    if (rw == 0) {
        printf("ERROR: %s\n", SDL_GetError());
        return 1;
    }

    Sound_AudioInfo wantedFormat;
    wantedFormat.channels = 2;
    wantedFormat.rate = 44100;
    wantedFormat.format = AUDIO_S16LSB;

    Sound_Sample* sample = Sound_NewSample(rw, "OGG", &wantedFormat, 4096);
    if (sample == 0) {
        printf("ERROR: %s\n", Sound_GetError());
        return 1;
    }
    Sound_DecodeAll(sample);
    if (sample->flags & SOUND_SAMPLEFLAG_ERROR) {
        printf("ERROR: %s\n", Sound_GetError());
    }

    Sound_Quit();
    SDL_Quit();
    return 0;
}

Upsampling noise/crackling

I've recently written a small application using SDL 2.0.20 and SDL_sound 2.0.1 hoping that this combination would handle resampling reasonably well. However I can't get it to work properly.

I'm opening a device with the following settings:

  • AUDIO_S16LSB
  • 1 channel
  • 44100 Hz

Playing 44.1kHz samples with those settings works like a charm, however everything which needs upsampling (e.g. 11 or 22kHz) sounds horrible. There is a lot of noise and even occasional crackling. It almost sounds like there are samples missing (e.g. due to an off-by-one error or something).

It's definitively not a performance issue, I've even switched to decoding the whole sample upfront just to rule that out.

feature request: 24-bit wav files

This is a feature request! Previous 1.0 SDL_sound used a slightly different wav decoder, which appears to not support 24-bit either - it's something that is perfectly fine to workaround too, so a wontfix response is also fine.

I noticed though that SDL2 appears to have support for it (through SDL_LoadWAV_RW), I am not sure if SDL_sound can use it or not. I noticed SDL_mixer also implements a different WAV decoder (which also supports 24-bit wav).

an example file follows: snd24b.wav.zip

sox output for this file

.\sox.exe --info -V6 snd24b.wav
.\sox.exe INFO formats: detected file format type `wav'
.\sox.exe DBUG wav: Searching for 66 6d 74 20
.\sox.exe DBUG wav: WAV Chunk fmt
.\sox.exe DBUG wav: Searching for 64 61 74 61
.\sox.exe DBUG wav: WAV Chunk data
.\sox.exe DBUG wav: Reading Wave file: Microsoft PCM format, 1 channel, 48000 samp/sec
.\sox.exe DBUG wav:         144000 byte/sec, 3 block align, 24 bits/samp, 34956 data bytes
.\sox.exe DBUG wav:         11652 Samps/chans
.\sox.exe DBUG wav: Searching for 4c 49 53 54
.\sox.exe DBUG wav: WAV Chunk LIST
.\sox.exe DBUG wav: Type INFO
.\sox.exe DBUG wav: Chunk ICRD
.\sox.exe DBUG wav: Attempting to seek beyond unsupported chunk `CRD' of length 1413894985 bytes

Input File     : 'snd24b.wav'
Channels       : 1
Sample Rate    : 48000
Precision      : 24-bit
Duration       : 00:00:00.24 = 11652 samples ~ 18.2063 CDDA sectors
File Size      : 42.0k
Bit Rate       : 1.38M
Sample Encoding: 24-bit Signed Integer PCM

Currently playsound_simple.exe snd24b.wav yields:

Couldn't load 'snd24b.wav': Sound format unsupported.

Sound_NewSample*'s `desired` field should be a const pointer.

Right now it looks like this:

SNDDECLSPEC Sound_Sample * SDLCALL Sound_NewSample(SDL_RWops *rw,
                                                   const char *ext,
                                                   Sound_AudioInfo *desired,
                                                   Uint32 bufferSize);

...but that desired argument isn't modified (the desired and obtained values are both available in the returned Sound_Sample, not set in the desired struct), so this should be const.

I have to double-check this is actually true, but this is likely a mistake from the year 2000. :)

Add support for UWP Compilation target

If you understand how to do that, I would appreciate if you could add that support, I'm developing a Xbox game using SDL_Sound.

I'll try my best at compiling it for UWP too, if I succeed before you, I may PR, but I know that should be a kid's play for you

C++ compiler required but not exercised

SDL_sound 2.0.1's cmake scripts tests for a C++ compiler,

 CMake Error at CMakeLists.txt:7 (project):
   No CMAKE_CXX_COMPILER could be found.

but during build, this is never used as far as I can tell, as all source files are .c.

using add_subdirectory for SDL2 and SDL_sound is broken

broken after: 42c4f20

the problem:

cmake_push_check_state()
set(CMAKE_REQUIRED_LIBRARIES ${SDL2_LIBRARIES})
check_function_exists(SDL_exp HAVE_SDL_EXP)
cmake_pop_check_state()

once we are in check state we require SDL2_LIBRARIES, but they haven't been built yet - if both SDL2 and SDL_sound have been added using add_subdirectory, CMake will configure everything and then build everything.

If you are in a system with SDL2 libraries installed, this can be overlooked, as the check will happen with your system SDL2 and then following your project will build with the SDL2 you used add_subdirectory.

I think add_subdirectory through CMake is a valid config (and it's used by a lot of SDL projects for adding their own dependencies, like SDL_image), and it's really useful for working in platforms that don't have package managers for C libraries like Android and consoles, and also for shipping games with SDL2 configured in a more sane way.

The error I get:

-- Looking for SDL_exp
CMake Error at build_13.2_debug/CMakeFiles/CMakeTmp/CMakeLists.txt:16 (add_executable):
  Target "cmTC_3bc0e" links to target "SDL2::SDL2" but the target was not
  found.  Perhaps a find_package() call is missing for an IMPORTED target, or
  an ALIAS target is missing?

Alternative approaches:

  • leverage pkgconfig to check old sdl2 version, and only act on knowing it's needed
  • figure a check for the symbol in "SDL_stdinc.h", these could happen at config time. (maybe check_prototype_definition ?)
  • use a cmake option that skips this check (quick workaround, also very flexible!)
if(NOT SDLSOUND_HAVE_SDL_EXP)
cmake_push_check_state()
set(CMAKE_REQUIRED_LIBRARIES ${SDL2_LIBRARIES})
check_function_exists(SDL_exp SDLSOUND_HAVE_SDL_EXP)
cmake_pop_check_state()
endif()

Reading timidity soundfont from SDL_rwops

Hey, I understand we can pass a soundfont path through an environment variable or SDL_setenv, but is it possible to pass a stream so I could find a soundfont inside a game package - using SDL_rwops or some way to pass the location in memory. Is something like this possible?

WAV decoder fails for certain .wav files

File in question was attached, and link to the service is provided: https://freesound.org/people/se2001/sounds/521779

The error returned by Sound_NewSampleFromFile is Sound format unsupported.

  Sound_Sample* sound = Sound_NewSampleFromFile(
    "siren.wav",
    NULL,
    4096
  );
  
  if (!sound) {
    printf("err: %s", Sound_GetError());
    return -2;
  }

The attached siren.zip contains the .WAV that fails to load properly. I've checked a few more .WAVs from that service and it appears there's something in common that prevents these files from being loaded. Perhaps the fact that they're tagged? I'll do some more digging on my own when I have some more time on my hands and let you know if I find something more substantial.

CMake warning: Policy CMP0048 is not set

hi, this is really minor, is more a question really. Currently a warning is being generated in CMake versions 3 and above.

Most CMake projects I see use the version like this

project(SDL_sound 
    VERSION 2.0.1
    LANGUAGES C)

But SDL_sound uses like this

project(SDL_sound C)
set(SDLSOUND_VERSION 2.0.1)

But this means the PROJECT_VERSION and related variables would be empty. Is there any reason for this particular approach?

If OGG bitrate is 32, Sound_Decode returns only half the buffer_size

Sound_AudioInfo desired = {AUDIO_S16, 2, 44100};
sample = Sound_NewSampleFromFile(filename, &desired, 2352);โ€˜

//now sample.buffer_size is 2352, SDL_AUDIO_BITSIZE(sample->actual.format) is 32 due to it's a 32bit OGG
int bytes = Sound_Decode(sample);//bytes is only 1176

Sound_SetBufferSize(sample, lastCount*(SDL_AUDIO_BITSIZE(sample->actual.format)/16));
    bytes = Sound_Decode(sample);//bytes is 2352

latest version

MSVC error: 'SDL_memmove': redefinition; different linkage

Hi,

So I am having a weird error building with CMake MSVC 2015 and SDL 2.0.16 - the error doesn't happen with SDL 2.0.12.

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vcruntime_string.h(47): error C2375: 'SDL_memmove': redefinition; different linkage

The error is at link time and appears to be due to a warn I get on SDL_sound_mp3.c:

SDL_sound_mp3.c
     7>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vcruntime_string.h(47): error C2375: 'SDL_memmove': redefinition; different linkage [C:\Lib\SDL_sound\build\SDL2_sound-static.vcxproj]
         c:\lib\sdl2\include\SDL_stdinc.h(506): note: see declaration of 'SDL_memmove'
     7>C:\Lib\SDL_sound\src\SDL_sound_mp3.c(143): warning C4244: 'return': conversion from 'const drmp3_uint64' to 'Uint32', possible loss of data [C:\Lib\SDL_sound\build\SDL2_sound-static.vcxproj]

Looking this file, I see the line below

#define memmove SDL_memmove

It doesn't seem that neither memmove or SDL_memmove is used in SDL_sound_mp3. Is it necessary here?

timidity.c, read_config_file(), array subscript is below array bounds

This bug report was migrated from our old Bugzilla tracker.

Reported in version: unspecified
Reported for operating system, platform: Linux, x86

Comments on the original bug report:

On 2011-06-13 12:01:10 +0000, Ozkan Sezer wrote:

With SDL_sound configured with CFLAGS="-Wall -O2", this scary warning shows up:

timidity.c: In function 'read_config_file':
timidity.c:111: warning: array subscript is below array bounds

Looking at the code, words is set to -1 when "#extensions" is hit and then w[words] is processed like nothing unusual has happened.

(I am still waiting for details from a user about a segfault in read_config_file() but I suspect this particular part of timidity.c may be the culprit.)

On 2011-06-15 10:40:34 +0000, Ryan C. Gordon wrote:

I think this is fixed now: hg changeset 62f763761507 for the stable-1.0 branch, hg changeset 52518db6aa46 for the development branch.

--ryan.

potential buffer overrun in timidity RWgets

This bug report was migrated from our old Bugzilla tracker.

These attachments are available in the static archive:

Reported in version: unspecified
Reported for operating system, platform: All, All

Comments on the original bug report:

On 2017-03-20 06:51:19 +0000, Ozkan Sezer wrote:

Created attachment 2705
RWgets() buffer overrun patch

timidity.c:RWgets() can result in a buffer overrun, because the num_read check
is off-by-one. The attached patch fixes it, and also simplifies the procedure
a bit.

On 2017-05-24 16:02:07 +0000, Ryan C. Gordon wrote:

This is now https://hg.icculus.org/icculus/SDL_sound/rev/f0d57c9b72d8 on the dev branch and https://hg.icculus.org/icculus/SDL_sound/rev/0c4026dd3274 on the stable-1.0 branch, thanks!

--ryan.

`make install` missing

SDL_sound 2.0.1 has no make install action defined after cmake has run through the build, which is a step down from 1.0.3.

SDL_sound midi code is depending on timidity config, and broken

This bug report was migrated from our old Bugzilla tracker.

These attachments are available in the static archive:

Reported in version: unspecified
Reported for operating system, platform: Linux, x86_64

Comments on the original bug report:

On 2021-01-13 20:22:56 +0000, wrote:

i was trying to use a midi-playing application with SDL(2)_sound. at first the stdout is spammed with message about timidity.cfg not found, and after that is fixed via the proposed environment variable, i get messages like this:

DEBUG: Couldn't open /usr/share/timidity/instruments/.pat
DEBUG: Couldn't open /usr/share/timidity/instruments/.pat
DEBUG: Couldn't open /usr/share/timidity/instruments/.pat
DEBUG: Couldn't open /usr/share/timidity/instruments/.pat

the /usr/share/timidity path is also hardcoded into the SDL2_sound library.

my timidity config contains only one line:

soundfont /share/sounds/sf2/OPL-3_FM_128M.sf2

and apparently the parser code doesn't expect to find a soundfont.

i also tried with GUS patches (this config works with e.g. wildmidi):

source /etc/propatches/propatches.cfg
dir /share/midi/propatches

but it seems the "dir" directive isn't known either.

interestingly SDL2_sound still produces midi sound, but the tones sound all wrong, like every note is delayed by 10x.

On 2021-01-13 21:00:56 +0000, wrote:

the code in pat_init_patnames() looks wrong in many regards.
for starters, the first line is read with _mm_fgets, and a loop entered that checks for feof(). if mm_fgets behaviour is identical to fgets, if the config contains only one line feof() would already be true after the first line has been picked.

a typical read loop looks like
while(fgets(buf, bufsize, f)) {
// buf contains the line
}
// feof has been reached.

since _mm_fgets has a prototype with void, this kind of check can't be used.
it really should return char* to indicate success as the fgets() in libc does.

the next issue is that leading whitespace isn't skipped here:
if( SDL_isdigit(line[0]) || (IsBlank(line[0]) && SDL_isdigit(line[1])) ) {
only if this conditions isn't true the whitespace is skipped but then it's already to late to enter this condition.
my propatches.cfg looks like this:

bank 0
000 ACPIANO.PAT
001 BRITEPNO.PAT
...
drumset 0
027 HIGHQ.PAT
028 SLAP.PAT
029 SCRATCH1.PAT

so none of those enter the isnumeric condition above.

the next issue is that the "bank" directive isn't recognized, and "dir" neither.

On 2021-01-13 21:04:05 +0000, Ozkan Sezer wrote:

I am guessing that you built SDL2_sound from the 'default' branch?
If that is the case, that version of SDL_sound relies on libmodplug
to decode midi files which indeed is broken.

icculus wants a zlib-compatible licensed midi decoder, so he gave
up on the old timidity code in favor of public-domain libmodplug,
and that's the result.

If you have patches though, do send them.

On 2021-01-13 21:38:54 +0000, wrote:

Created attachment 4663
fixes all mentioned issues and more.

above patch fixes the issues, apart from _mm_fgets vs _mm_feof.

On 2021-01-13 21:43:17 +0000, wrote:

yes sezero, this is against latest default branch.

btw i used SDL_loginfo to display a DEBUG warning for "soundfont" directive, but that might not be the right choice (there was no other example logging func in that file).

On 2021-01-14 22:18:04 +0000, Ozkan Sezer wrote:

Your patch is in (in a slightly modified form):
https://hg.icculus.org/icculus/SDL_sound/rev/f8de63ad5832

Closing as fixed.

timidity read_config_file() doesn't close file when there is an error

This bug report was migrated from our old Bugzilla tracker.

These attachments are available in the static archive:

Reported in version: unspecified
Reported for operating system, platform: All, All

Comments on the original bug report:

On 2011-06-15 11:14:02 +0000, Ozkan Sezer wrote:

Created attachment 628
close config file on error

timidity read_config_file() doesn't close file when there is an error. Attached tiny patch fixes that.

On 2011-06-15 13:13:46 +0000, Ryan C. Gordon wrote:

This is now hg changeset 65059e40a150 for the development branch and hg changeset f3fd207c0eea for the stable-1.0 branch.

Thanks!

--ryan.

SDL_sound.h install error

This bug report was migrated from our old Bugzilla tracker.

These attachments are available in the static archive:

Reported in version: unspecified
Reported for operating system, platform: macOS 10.14, x86

Comments on the original bug report:

On 2019-10-18 10:09:11 +0000, Dominik Reichardt wrote:

Created attachment 3987
patch

I've let Cmake generate unix makefiles and "make install" fails because the path to SDL_sound.h is missing a "src/".

Additionally it would be better if it were to install the header file to /inlcude/SDL2, IMO.

simple patch is included.

On 2020-12-05 18:11:00 +0000, Ozkan Sezer wrote:

The patch has been included in SDL_sound hg repo as
https://hg.icculus.org/icculus/SDL_sound/rev/ac28f5f78a88

Closing as fixed.

On 2020-12-05 20:07:54 +0000, Dominik Reichardt wrote:

Thank you!

MIDI playback on Windows is weird

Test file:
prepare_your_swords.mid.zip

I used playsound_simple itself to play the above MIDI on Windows. It doesn't sound right. I used the TIMIDITY sound fount from Nix:
TIMIDITY.zip

Is this working for others? I tested on VLC using the fluidsynth sound font from here, and it sounded fine on it. On playsound_simple it sounds like something in the timing is wrong.

Add Opus support

SDL_sound currently supports Vorbis files -- but Xiph (maintainers of Vorbis) have deprecated Vorbis in favor of Opus back in 2013. It would be nice to have Opus support in SDL_sound as well.

Segfault when passing NULL as extension to Sound_NewSample

This bug report was migrated from our old Bugzilla tracker.

Reported in version: unspecified
Reported for operating system, platform: macOS 10.13, x86

Comments on the original bug report:

On 2019-02-09 11:09:13 +0000, SuperZazu wrote:

Hello!

I just noticed a segfault when passing NULL to Sound_NewSample. Note that it does not happen when passing "".

To reproduce the bug quickly, you can modify "playsound_simple.c" like this:

diff -r 4c3740db6ea6 playsound/playsound_simple.c
--- a/playsound/playsound_simple.c      Sat Feb 09 11:38:38 2019 +0100
+++ b/playsound/playsound_simple.c      Sat Feb 09 12:07:31 2019 +0100
@@ -99,7 +99,9 @@
     PlaysoundAudioCallbackData data;
 
     SDL_zero(data);
-    data.sample = Sound_NewSampleFromFile(fname, NULL, 65536);
+    // segfault does happen when ext == NULL; and does not happen when ext == ""
+    const char* ext = NULL;
+    data.sample = Sound_NewSample(SDL_RWFromFile(fname, "rb"), ext, NULL, 65536);
     if (data.sample == NULL)
     {
         fprintf(stderr, "Couldn't load '%s': %s.\n", fname, Sound_GetError());

Here is a patch that fixes the problem:

diff -r 9262f9205898 -r 4c3740db6ea6 src/SDL_sound.c
--- a/src/SDL_sound.c   Fri Jul 20 14:59:10 2018 -0400
+++ b/src/SDL_sound.c   Sat Feb 09 11:38:38 2019 +0100
@@ -506,6 +506,9 @@
         } /* for */
     } /* if */
 
+    if (ext == NULL)
+        ext = "";
+
     /* no direct extension match? Try everything we've got... */
     for (decoder = &decoders[0]; decoder->funcs != NULL; decoder++)
     {

As a side note, is there any simpler way to propose patches directly to the mercurial repository?

Thank you for your time

On 2019-10-19 00:22:37 +0000, Ozkan Sezer wrote:

I fixed it differently here:
sezero@3e7c880

On 2019-10-19 20:47:39 +0000, SuperZazu wrote:

Indeed, I noticed that your repo included a fix for this after creating my post, thanks for your work!

On 2020-12-05 18:13:26 +0000, Ozkan Sezer wrote:

The issue is fixed in mainstream as of
https://hg.icculus.org/icculus/SDL_sound/rev/5f2d5eeb97e6

Closing.

timidity, set master_drumset and master_tonebank to NULL upon exit

This bug report was migrated from our old Bugzilla tracker.

These attachments are available in the static archive:

Reported in version: unspecified
Reported for operating system, platform: All, All

Comments on the original bug report:

On 2011-06-15 11:38:39 +0000, Ozkan Sezer wrote:

Created attachment 630
set master_drumset and master_tonebank to NULL after free()ing

Timidity_Exit() doesn't set master_drumset and master_tonebank to NULL which may lead to segfaults upon reinitialization. Attached tiny patch should handle that.

On 2011-06-15 13:15:18 +0000, Ryan C. Gordon wrote:

This is now hg changeset e564b7029c29 for the development branch, and hg changeset 941847b13998 for the stable-1.0 branch.

Thanks!

--ryan.

Fix timidity license.

As for existing timidity: When I resurrected it, I copied most stuff from SDL_mixer,
therefore its original dual LGPL/Artistic notice got lost. Should I put that back? (so
that distros may choose LGPL if they want..)

Originally posted by @sezero in #61 (comment)

This should mention both licenses where appropriate, and SDL_sound's LICENSE.txt should be updated to mention both options in the text about Timidity (right now it only mentions the Artistic License).

Webpage outdated

The README still recommends going to the webpage but

  • the webpage says in red at the top that 1.0.3 is out (from 2008!) and
  • that it switched to mercurial, but it's at github and using git
  • the download directory doesn't contain the latest distfile

Document MIDI usage on Windows

This bug report was migrated from our old Bugzilla tracker.

Reported in version: unspecified
Reported for operating system, platform: Windows 10, x86_64

Comments on the original bug report:

On 2021-01-17 12:41:16 +0000, eri0o wrote:

On Linux one can install timidity to get the soundfont/pat files for the instruments. If possible, please document (can be a comment on the source code) how the same can be accomplished on Windows. Without it, the instruments doesn't sound correct.

On 2021-01-17 15:14:44 +0000, eri0o wrote:

OK, finally figured out

the source code mentions the following:

#define TIMIDITYCFG "C:\TIMIDITY\TIMIDITY.CFG"
#define PATHFORPAT "C:\TIMIDITY\INSTRUMENTS"

one needs to download a patchset for the instruments and place the file in the instruments directory that has to be created. And then adjust the contents of the timidity.cfg file to match.

One can download the following patch as a base
https://youfailit.net/pub/idgames/sounds/eawpats.zip

(The above patch does have some copyrighted things apparently, could not find a working patchset to download available that didn't had copyright problems...)

On 2021-01-17 16:36:08 +0000, Ozkan Sezer wrote:

(In reply to eri0o from comment # 1)

One can download the following patch as a base
https://youfailit.net/pub/idgames/sounds/eawpats.zip

(The above patch does have some copyrighted things apparently, could not
find a working patchset to download available that didn't had copyright
problems...)

There is also this: http://libsdl.org/projects/SDL_mixer/timidity/timidity.tar.gz
among numerous other patchsets.

On 2021-01-17 16:38:21 +0000, Ozkan Sezer wrote:

(In reply to eri0o from comment # 1)

One can download the following patch as a base
https://youfailit.net/pub/idgames/sounds/eawpats.zip

(The above patch does have some copyrighted things apparently, could not
find a working patchset to download available that didn't had copyright
problems...)

There is also this: http://libsdl.org/projects/SDL_mixer/timidity/timidity.tar.gz
among numerous other patchsets.
EDIT: You can search the web for 'freepats' too if you want
an 'absolutely free' patchset.

On 2021-01-17 16:40:05 +0000, Ozkan Sezer wrote:

(In reply to eri0o from comment # 1)

OK, finally figured out

the source code mentions the following:

#define TIMIDITYCFG "C:\TIMIDITY\TIMIDITY.CFG"
#define PATHFORPAT "C:\TIMIDITY\INSTRUMENTS"

Those lines in the source should be enough documentation.
(Besides, there are multitudes of information on the web
for timidity configuration.)

Closing.

On 2021-01-17 22:05:20 +0000, wrote:

it would be helpful if there was an API to override the baked-in paths.

e.g.

SDL_sound_set_midi_config_from_file("/etc/timidity.cfg")

or

SDL_sound_set_midi_config_from_string("source /etc/freepats.cfg\ndir /share/freepats/instruments\n")

On 2021-01-17 22:13:12 +0000, Ozkan Sezer wrote:

(In reply to rose.garcia-eggl2fk from comment # 5)

it would be helpful if there was an API to override the baked-in paths.

Well, as far as I know, the SDL_sound-2.0 hasn't solidified yet.
Maybe Ryan would consider such an addition.

Cmake 3.24 Build issue with SDL

Hello,

Trying to build SDL_sound with Cmake produces the following output:

Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.19043.
CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:30 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:42 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:42 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:42 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:42 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:42 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:42 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:42 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:42 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:42 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:42 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:50 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2main".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:50 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2main".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:50 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2main".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:50 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2main".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:50 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2main".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:50 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2main".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:50 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2main".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:50 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2main".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:50 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2main".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:50 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2main".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:58 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:58 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:66 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2main".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:66 (get_target_property):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "SDL2::SDL2main".
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

FATAL_ERROR,SDL2::SDL2 and/or SDL2::SDL2main don't seem to contain any kind of IMPORTED_IMPLIB* or IMPORTED_LOCATION*
CMake Error at C:/Users/Fagota/Downloads/SDL2-2.0.22/SDL2Config.cmake:111 (get_filename_component):
  get_filename_component called with incorrect number of arguments
Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)


Configuring incomplete, errors occurred!
See also "C:/Users/Fagota/Downloads/SDL_sound-main/output/CMakeFiles/CMakeOutput.log".

My cmake settings are:
image
I would appreciate any help.

Use SDL_AudioStream and SDL_SIMDAlloc...

This bumps up the SDL2 requirement to 2.0.9 for audio streams, and 2.0.10 for SIMDAlloc, but we really should be using both.

SDL_AudioCVT is dreadful for several reasons, but most seriously it can't cleanly resample audio in chunks; it needs the whole data set to do it without generating audio artifacts.

And our internal buffers should be using SDL_SIMDAlloc to guarantee we can operate on them with SIMD instructions without having to worry about alignment or overflow.

Always print Timidity as supported decoder if built

When Timidity is included with the build, it should always print

Supported sound decoders:
- MIDI decoder, using a subset of TiMidity : MIDI,MID,

Currently if either the timidity.cfg is not found or it has something wrong in it or in the pointed soundfont, then this line doesn't show up. But this line is the best diagnostic we have that SDL2_Sound was indeed built with Timidity support.


Not needed, but this would be perfect (I want a pony):

  • in release config, when loading timidity.cfg it should log information about all steps in an internal buffer, and once an attempt is made to read a Midi file for the first time, if timidity was not correctly initialized, it should print to the log the previous accumulated internal log buffer lines and then this buffer should be emptied. (without #69, we don't own the logic to finding things and it's hard to debug what's going on when it's on someone's else machine)

multiple SDL_sound fixes

This bug report was migrated from our old Bugzilla tracker.

Reported in version: unspecified
Reported for operating system, platform: Linux, x86

Comments on the original bug report:

On 2018-10-23 09:34:38 +0000, Ozkan Sezer wrote:

Adding this here so it doesn't get lost.

  1. SDL_sound default branch is broken. I accumulated multiple fixes
    to it at: https://bitbucket.org/sezero/SDL_sound/branch/sezero-1
    github mirror: https://github.com/sezero/SDL_sound/tree/sezero-1

  2. I also applied updates to the stable-1.0 branch, in such a case
    Ryan would want to make a 1.0.4 release. Here:
    https://github.com/sezero/SDL_sound/tree/stable-1.0-sezero

Feel free to use & abuse.

On 2020-12-05 18:09:01 +0000, Ozkan Sezer wrote:

Commits from the fork have been merged into mainstream. Closing as fixed.

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.