An audio mixer that supports various file formats for Simple Directmedia Layer.

Overview
SDL_mixer 2.0

The latest version of this library is available from:
http://www.libsdl.org/projects/SDL_mixer/

Due to popular demand, here is a simple multi-channel audio mixer.
It supports 8 channels of 16 bit stereo audio, plus a single channel
of music.

See the header file SDL_mixer.h and the examples playwave.c and playmus.c
for documentation on this mixer library.

The mixer can currently load Microsoft WAVE files and Creative Labs VOC
files as audio samples, it can load FLAC files with libFLAC, it can load
Ogg Vorbis files with Ogg Vorbis or Tremor libraries, it can load MP3 files
using mpg123 or libmad, and it can load MIDI files with Timidity,
FluidSynth, and natively on Windows, Mac OSX, and Linux, and finally it can
load the following file formats via ModPlug or MikMod: .MOD .S3M .IT .XM.

Tremor decoding is disabled by default; you can enable it by passing
	--enable-music-ogg-tremor
to configure, or by defining MUSIC_OGG and OGG_USE_TREMOR.

libmad decoding is disabled by default; you can enable it by passing
	--enable-music-mp3-mad
to configure, or by defining MUSIC_MP3_MAD
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
WARNING: The license for libmad is GPL, which means that in order to
         use it your application must also be GPL!
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The process of mixing MIDI files to wave output is very CPU intensive,
so if playing regular WAVE files sound great, but playing MIDI files
sound choppy, try using 8-bit audio, mono audio, or lower frequencies.

To play MIDI files using FluidSynth, you'll need to set the SDL_SOUNDFONTS
environment variable to a Sound Font 2 (.sf2) file containing the musical
instruments you want to use for MIDI playback.
(On some Linux distributions you can install the fluid-soundfont-gm package)

To play MIDI files using Timidity, you'll need to get a complete set of
GUS patches from:
http://www.libsdl.org/projects/mixer/timidity/timidity.tar.gz
and unpack them in /usr/local/lib under UNIX, and C:\ under Win32.

iOS:
In order to use this library on iOS, you should include the SDL.xcodeproj
and Xcode-iOS/SDL_mixer.xcodeproj in your application, add the SDL/include
and SDL_mixer directories to your "Header Search Paths" setting, then add the
libSDL2.a and libSDL2_mixer.a to your "Link Binary with Libraries" setting.

This library is under the zlib license, see the file "COPYING.txt" for details.

Issues
  • Rebase and update stb_vorbis.h to SDL_sound's version :

    Rebase and update stb_vorbis.h to SDL_sound's version :

    • Keeps the original stb_vorbis as intact as possible so that future updates from mainstream would be painless.
    • Reduces STB_VORBIS_MAX_CHANNELS from 16 to 6 (objections?)
    • Adds several missing libm function overrides,
    • SDL_mixer now requires SDL >= 2.0.9 because of SDL_exp()
    • Fixes slow loads and leaks in start_decoder: https://github.com/nothings/stb/pull/1174
    • Fixes submap array out-of-bounds indexing bug: https://github.com/nothings/stb/pull/1312
    • Replace signed overflow clamps with unsigned overflow: https://github.com/nothings/stb/issues/1168
    • Replaces alloca() usage with setup_malloc() (from libxmp.)
    • Fixes '-Wmaybe-uninitialized' warnings in get_seek_page_info: https://github.com/nothings/stb/pull/1172
    • A minor UBSan fix and suppression: https://github.com/nothings/stb/issues/1168
    • Fixes signature of dummy realloc() for STB_VORBIS_NO_CRT: https://github.com/nothings/stb/pull/1198
    • Renames BUFFER_SIZE macro to STB_BUFFER_SIZE: https://github.com/nothings/stb/pull/1078
    • Pulls in sample-accurate offset patch of Vitaly Novichkov: (stb_vorbis_get_playback_sample_offset, because it's used in OGG_Tell and OGG_GetSome): https://github.com/nothings/stb/issues/1294 https://github.com/nothings/stb/pull/1295
    • Fixes a few warnings here and there in some environments.
    • Replaces two dummy '(void) 0' with 'do {} while(0)'
    opened by sezero 22
  • Use after free bug in Mixer's `OPUS_Delete()` on macOS

    Use after free bug in Mixer's `OPUS_Delete()` on macOS

    There's some background on this issue in the rust-sdl2 project. It seems that on the Mac while Wave files work happily if mixer is unload before the music file is but Opus causes a SEGFAULT.

    Digging deeper, it turns out that there isn't a proper guard in OPUS_Delete to make sure that the Opus library is still loaded.

    The fix seems to be to make sure "opus.loaded" is greater than zero before calling opus.op_free().

    Does this seem reasonable? Also, I noticed that you can leak the Opus libraries if calling OPUS_Load() more than once.

    If this does make sense, I'm happy to write a merge request here. It seems like @Wohlstand would be a good mentor for this if they're willing to help me out.

    invalid 
    opened by RandomInsano 21
  • MOD, native MIDI, and Opus support removed from macOS binaries?

    MOD, native MIDI, and Opus support removed from macOS binaries?

    Hi all,

    This is essentially the same as my issue for SDL_image (https://github.com/libsdl-org/SDL_image/issues/288). Basically, native MIDI as well as decoders for Modplug and Opus have been removed from the official macOS binaries, while they are all still enabled/included (albeit in an "optional" folder) for the Windows binaries.

    I understand making various dependency libraries optional, but is there a way to have pre-built optional dependencies included for the macOS release, the same way they are for Windows? A folder of pre-built frameworks that can be dragged inside the mixer framework or into the same folder as the framework?

    Thanks in advance!

    Austin

    opened by a-hurst 20
  • Fixes of the master_volume behaviour

    Fixes of the master_volume behaviour

    • Make the master_volume variable being atomic
    • Fixed the master_volume behavior at the music (there a middle buffer should be allocated to safely apply the volume effect)

    Bonus: whitespace clean-up at the mixer.c.

    opened by Wohlstand 19
  • Release plans

    Release plans

    As far as I can tell, the last release was 2018 and there have been > 300 commits since then. Any chance for a new release? Or perhaps there are blockers for that?

    opened by fingolfin 15
  • Added support of quoted strings in Timidity config

    Added support of quoted strings in Timidity config

    Resolves #334

    An argument of property in Timidity config can be surrounded with " or ' characters to prevent splitting into several arguments if it contains spaces or other delimiter characters.

    If an argument itself contains " characters it should be surrounded with ' characters and vice versa.

    opened by Dasperal 15
  • Add 'Libs.private' field to pkg-config file

    Add 'Libs.private' field to pkg-config file

    In order to support static linking, SDL_mixer.pc should include a 'Libs.private' field listing all the libraries that SDL_mixer requires.

    This patch adds such a field and also modifies configure.ac so that EXTRA_LDFLAGS (which is now also used as the value of 'Libs.private') no longer includes SDL_LIBS. This is done so as to prevent libraries required by SDL from being listed twice when 'pkg-config --libs --static SDL_mixer' is run (they're already shown because of the 'Requires: sdl' line in SDL_mixer.pc). Makefile.in is also adjusted accordingly.

    Upstream status: submitted https://bugzilla.libsdl.org/show_bug.cgi?id=3278

    Signed-off-by: Rodrigo Rebello [email protected] [Retrieved from: https://git.buildroot.net/buildroot/tree/package/sdl_mixer/0001-Add-Libs.private-field-to-pkg-config-file.patch] Signed-off-by: Fabrice Fontaine [email protected]

    opened by ffontaine 15
  • VCRUNTIME140.dll dependency in SDL2_mixer.dll

    VCRUNTIME140.dll dependency in SDL2_mixer.dll

    due to the compiler option /MD and the use of memcpy and memset, including SDL2_mixer.dll will create a dependency on the visual studio run time DLLs, which isn't desirable. Either use SDL_memset / SDL_memcpy or /MT instead of /MD.

    opened by AntTheAlchemist 14
  • wrong mp3 duration with libmad backend

    wrong mp3 duration with libmad backend

    One mp3 I have reports 56.607347s duration instead of about 31.320816s with libmad backend: I can attach the mp3 in question here.

    Originally posted in https://github.com/libsdl-org/SDL_mixer/issues/300#issuecomment-1140079544

    opened by sezero 14
  • Implemented the master volume feature.

    Implemented the master volume feature.

    In some cases we need to set the overall volume level. For now we have only two ways:

    • modify chunk's volume
    • modify channel's volume

    Both are bad in case when we need to modify all played now sounds and all sounds that will be played in the future. To solve this problem I suggest new function Mix_MasterVolume(int) which works with single static variable int master_volume. This variable is used in mix_channels/music_mixer to calculate current volume level.

    opened by rmg-nik 14
  • Remove all initializers from static loader arrays

    Remove all initializers from static loader arrays

    Addition to https://github.com/libsdl-org/SDL_mixer/commit/143b0bbfd50654af667c87143c1a2d69ef80f151

    EDIT: As was discussed below, I changed the entire goal of this PR:

    C standard gives guarantee they will be NULLed by default: https://port70.net/~nsz/c/c89/c89-draft.html#3.5.7

    If an object that has static storage duration is not initialized explicitly, it is initialized implicitly as if every member that has arithmetic type were assigned 0 and every member that has pointer type were assigned a null pointer constant. If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate.

    opened by Wohlstand 14
  • Unable to open an audio device on macOS

    Unable to open an audio device on macOS

    I'm running SDL 2.0.22 and SDL_mixer 2.60 on macOS 12.5.

    I'm attempting to open an audio device as follows, after calling SDL_Init (audio and video), and Mix_Init:

    Mix_OpenAudio(
        MIX_DEFAULT_FREQUENCY,
        MIX_DEFAULT_FORMAT,
        MIX_DEFAULT_CHANNELS,
        2048
    )
    

    The error I get is as follows:

    MEMixerChannel.cpp:1636  client <[email protected]; [0]; play> got error 2003332927 while sending format information
    

    I'm also having the same issue calling Mix_CloseAudio()

    opened by svanimpe 8
  • Improve coexistence of internal and external decoders

    Improve coexistence of internal and external decoders

    This is potentially useful to allow building with libvorbis, libFLAC and libmpg123 for the reasons described in https://github.com/libsdl-org/SDL_mixer/issues/427#issuecomment-1186630491, while still having the internal libraries as fallbacks if dynamic loading fails.

    TODO:

    • Additional CMake changes to allow enabling both libvorbis and stb_vorbis
    • Should libvorbis, libFLAC and libmpg123 be enabled by default?
    opened by ccawley2011 2
  • [Proposal] Support Logarithmic Scale Volume Control

    [Proposal] Support Logarithmic Scale Volume Control

    Thank you for this great library. I've integrated it into my project over the last few days and it's working very well. However, I have a suggestion for improvement in regard to the volume controls. SDL currently implements audio volume control as a simple linear attenuation of the input signal. The problem with this is that it's not an accurate model of how hearing works.

    Due to the characteristics of the human ear, there is a logarithmic relationship between the amplitude of an audio signal and its perceived loudness, which is why loudness is typically measured in decibels. The linear scale results in an extremely uneven distribution of loudness. This can be demonstrated with a simple SDL_mixer test program: play a chunk sound effect at MIX_MAX_VOLUME (128), then change the channel volume to half (64) and recompile and play again. You will notice that there is only a very slight reduction in the loudness, despite the volume being halved. Indeed, halving the amplitude of an audio signal reduces its loudness by only 6 dB. The difference is even more apparent when comparing the top 25% and bottom 25% of the scale. The difference between 128 and 96 is only 2.5 dB, but the difference between 35 and 1 is more than 30 dB.

    My Implementation

    I would like for the users of my application to be able to specify channel volume on a limited scale that is linear with respect to loudness instead of signal amplitude. I designed a wrapper function for Mix_Volume() to convert the requested application-level log volume to the internal SDL linear attenuation factor volume.

    There are a couple factors that go into designing a log scale volume control. The first is the dynamic range in dB, which is the volume difference between the loudest signal and the quietest. Since we have 128 volume steps in SDL, the most we can attenuate the signal is 1/128, which is about -42 dB. I rounded this to -40 dB.

    Next is the number of volume steps. Ideally, I would like to have a volume scale of 0-100. Unfortunately, with a limited resolution of only 128 steps in SDL, a 0-100 scale cannot produce a unique SDL volume for each step due to rounding, so I decided to settle for a simpler 0-10 scale. In this scale, a value of 10 corresponds to 0 dB (full, unattenuated signal), while 0 corresponds to -40 dB. However, I decided to set 0 to a volume of 0, since most users will interpret 0 as meaning complete silence. Each step in the scale corresponds to a 4 dB adjustment, plus or minus a bit due to rounding. I created a spreadsheet with the calculations which is screenshotted below:

    screen29

    Here is how I chose to implement this volume control in C++. Since the log and power functions can be computationally expensive, I pre-calculate the SDL volume values at compile time for each step in the scale using a constexpr lambda function, and store the results in a static array. Then, determining the SDL volume at runtime is simply accessing the array at the requested volume step.

    I chose to use constexpr lambda strictly for convenience purposes, so I could alter the macro values and recompile without having to manually type the array values from the spreadsheet each time. But this function could be easily adapted to C by doing that instead of the lambda.

    #define MAX_VOLUME 10
    #define RANGE_DB -40
    
    int Sound::set_volume(int channel, int volume)
    {
        if (volume > MAX_VOLUME || volume < 0)
            return 1;
    
        constexpr auto generate_array = []() {
            double a = pow(10.f, (double) RANGE_DB / 20.f);
            double b = log10(1.f / a) / (double) MAX_VOLUME;
            std::array<int, MAX_VOLUME + 1> arr;
            arr[0] = 0;
            arr[MAX_VOLUME] = MIX_MAX_VOLUME;
            for (int n = 1; n < MAX_VOLUME; n++) {
                arr[n] = (int) std::round(a * pow(10.f, (double) n * b) * (double) MIX_MAX_VOLUME);
            }
            return arr;
        };
        static constexpr std::array<int, MAX_VOLUME + 1> volume_array = generate_array();
        
        Mix_Volume(channel, volume_array[volume]);
        return 0;
    }
    

    I don't support the volume querying here because I don't personally need it, but it would be trivial to implement.

    Proposal

    My proposal is to add a logarithmic volume control function with a title such as Mix_VolumeLog() or Mix_VolumeDB(), which would be implemented similar to the above. The fundamentals of psychoacoustics are not well understood by many people, so I believe it would provide a very useful abstraction for implementing application-level volume control. Since it uses SDL's current volume controls underneath, it would not break any existing functionality nor the ABI.

    opened by complexlogic 2
  • Advice for downstream distributions re decoder libs

    Advice for downstream distributions re decoder libs

    We got a request that our downstream package should be built with the new dr_ stb_ internal decoders instead of the external libraries such as libvorbis/libflac/mpg123.

    What's the recommended way to build sdl_mixer for downstream distributions?

    thanks!

    opened by lazka 2
  • CMake support for libxmp?

    CMake support for libxmp?

    The current CI fails because libxmp is missing vendored library CMake support: https://github.com/libsdl-org/SDL_mixer/runs/7365768492?check_suite_focus=true

    Maybe we don't need it? It's provided for Visual Studio in VisualC/external

    What's the best way to fix this?

    opened by slouken 13
  • Added Mix_PauseAudio() call to suspend/resume entire audio output

    Added Mix_PauseAudio() call to suspend/resume entire audio output

    This call allows cheaper pausing/resuming of the whole audio processing without pausing every playing channel or music stream.

    For example, this call can be used to pause the entire audio playback when the game is not focused.

    Note: the "pause_async_music" call is required for music which is playing asynchronously from the main audio output processor, for example, OS Native MIDI. However, the stuff doesn't affect CMD Music which will still play (however, never tested this as I never used CMD music for my needs).

    opened by Wohlstand 3
Releases(release-2.6.1)
  • release-2.6.1(Jul 12, 2022)

    This is a minor bug-fix release, fixing a packaging issue on Linux.

    Here are the highlights for the 2.6.0 release:

    • API documentation is now available on the wiki: https://wiki.libsdl.org/SDL_mixer
    • Added support for building with CMake
    • Added support for playing Ogg files using stb_vorbis, which is now the default Vorbis backend. To use libvorbis instead, configure using --disable-music-ogg-stb --enable-music-ogg-vorbis
    • Added support for playing FLAC files using dr_flac, which is now the default FLAC music backend. To use libflac instead, configure using --disable-music-flac-drflac --enable-music-flac-libflac
    • Added support for playing MP3 files using dr_mp3, which is now the default MP3 music backend. To use libmpg123 instead, configure using --disable-music-mp3-drmp3 --enable-music-mp3-mpg123
    • Added libxmp support for mod music playback. Modplug is still the default backend for MOD music. To use libxmp instead, configure using --disable-music-mod-modplug --enable-music-mod-xmp
    • Removed support for libmad as a MP3 music backend.
    • Removed support for libmikmod as a MOD music backend.
    • Added Mix_MasterVolume() for additional volume control over all channels
    • Update Mix_Init() return value to match documentation, including MIXER_INIT_* flags for already-initialized modules
    • Added Mix_HasMusicDecoder()
    • Memory leak fixes and F32 format support to fluidsynth player
    • Fixed distorted MIDI playback with FluidSynth if sample rate is out of library's limits
    • Added Mix_ModMusicJumpToOrder() for mod music formats
    • Enabled module internal loops in modplug player
    • Respect original mp3 file offset
    • Support setting soundfont via SDL_SOUNDFONTS in OSX native midi
    • Fixed mp3 file detection
    • Fixes to ogg playback on big-endian devices
    • Added functions to get metadata information: Mix_GetMusicTitle() Mix_GetMusicTitleTag() Mix_GetMusicArtistTag() Mix_GetMusicAlbumTag() Mix_GetMusicCopyrightTag()
    • Add functions to get loop point information: Mix_GetMusicLoopStartTime() Mix_GetMusicLoopEndTime() Mix_GetMusicLoopLengthTime()
    • Added Mix_GetMusicVolume() and Mix_GetMusicPosition()
    • Added Mix_MusicDuration() to return music duration in seconds
    • Fixed music_mpg123 seek bug when sample rate of the file and the stream don't match
    • Timidity improvements, added Mix_SetTimidityCfg()
    • Improved mp3 tag detection/skipping
    • Extended support for WAV files
    • Allow rmid files be opened by native midi
    • Fixed possible crash in win32 native midi
    • Prevent clipping due to volume settings in modplug music
    • Added looping support for Opus files
    • Added looping support for FLAC files
    • Improved OGG looping support
    • Fixed loading Opus audio as audio chunks
    Source code(tar.gz)
    Source code(zip)
    SDL2_mixer-2.6.1-win32-x64.zip(526.13 KB)
    SDL2_mixer-2.6.1-win32-x86.zip(501.57 KB)
    SDL2_mixer-2.6.1.dmg(308.30 KB)
    SDL2_mixer-2.6.1.tar.gz(9.46 MB)
    SDL2_mixer-2.6.1.tar.gz.sig(95 bytes)
    SDL2_mixer-2.6.1.zip(12.74 MB)
    SDL2_mixer-2.6.1.zip.sig(95 bytes)
    SDL2_mixer-devel-2.6.1-mingw.tar.gz(2.70 MB)
    SDL2_mixer-devel-2.6.1-mingw.zip(2.71 MB)
    SDL2_mixer-devel-2.6.1-VC.zip(1.04 MB)
  • release-2.6.0(Jul 8, 2022)

    In addition to new CMake support by @madebr and many bug fixes, here are the highlights since the last release:

    • API documentation is now available on the wiki: https://wiki.libsdl.org/SDL_mixer
    • Added support for building with CMake
    • Added support for playing Ogg files using stb_vorbis, which is now the default Vorbis backend. To use libvorbis instead, configure using --disable-music-ogg-stb --enable-music-ogg-vorbis
    • Added support for playing FLAC files using dr_flac, which is now the default FLAC music backend. To use libflac instead, configure using --disable-music-flac-drflac --enable-music-flac-libflac
    • Added support for playing MP3 files using dr_mp3, which is now the default MP3 music backend. To use libmpg123 instead, configure using --disable-music-mp3-drmp3 --enable-music-mp3-mpg123
    • Added libxmp support for mod music playback. Modplug is still the default backend for MOD music. To use libxmp instead, configure using --disable-music-mod-modplug --enable-music-mod-xmp
    • Removed support for libmad as a MP3 music backend.
    • Removed support for libmikmod as a MOD music backend.
    • Added Mix_MasterVolume() for additional volume control over all channels
    • Update Mix_Init() return value to match documentation, including MIXER_INIT_* flags for already-initialized modules
    • Added Mix_HasMusicDecoder()
    • Memory leak fixes and F32 format support to fluidsynth player
    • Fixed distorted MIDI playback with FluidSynth if sample rate is out of library's limits
    • Added Mix_ModMusicJumpToOrder() for mod music formats
    • Enabled module internal loops in modplug player
    • Respect original mp3 file offset
    • Support setting soundfont via SDL_SOUNDFONTS in OSX native midi
    • Fixed mp3 file detection
    • Fixes to ogg playback on big-endian devices
    • Added functions to get metadata information: Mix_GetMusicTitle() Mix_GetMusicTitleTag() Mix_GetMusicArtistTag() Mix_GetMusicAlbumTag() Mix_GetMusicCopyrightTag()
    • Add functions to get loop point information: Mix_GetMusicLoopStartTime() Mix_GetMusicLoopEndTime() Mix_GetMusicLoopLengthTime()
    • Added Mix_GetMusicVolume() and Mix_GetMusicPosition()
    • Added Mix_MusicDuration() to return music duration in seconds
    • Fixed music_mpg123 seek bug when sample rate of the file and the stream don't match
    • Timidity improvements, added Mix_SetTimidityCfg()
    • Improved mp3 tag detection/skipping
    • Extended support for WAV files
    • Allow rmid files be opened by native midi
    • Fixed possible crash in win32 native midi
    • Prevent clipping due to volume settings in modplug music
    • Added looping support for Opus files
    • Added looping support for FLAC files
    • Improved OGG looping support
    • Fixed loading Opus audio as audio chunks
    Source code(tar.gz)
    Source code(zip)
    SDL2_mixer-2.6.0-win32-x64.zip(526.13 KB)
    SDL2_mixer-2.6.0-win32-x86.zip(501.57 KB)
    SDL2_mixer-2.6.0.dmg(308.28 KB)
    SDL2_mixer-2.6.0.tar.gz(9.46 MB)
    SDL2_mixer-2.6.0.tar.gz.sig(95 bytes)
    SDL2_mixer-2.6.0.zip(12.74 MB)
    SDL2_mixer-2.6.0.zip.sig(95 bytes)
    SDL2_mixer-devel-2.6.0-mingw.tar.gz(2.70 MB)
    SDL2_mixer-devel-2.6.0-mingw.zip(2.71 MB)
    SDL2_mixer-devel-2.6.0-VC.zip(1.04 MB)
  • prerelease-2.5.2(Jun 17, 2022)

    This is a release candidate for 2.6.0.

    In addition to new CMake support by @madebr and many bug fixes, here are the highlights since the last release:

    • Added support for playing Ogg files using stb_vorbis, which is now the default Vorbis backend. To use libvorbis instead, configure using --disable-music-ogg-stb --enable-music-ogg-vorbis
    • Added support for playing FLAC files using dr_flac, which is now the default FLAC music backend. To use libflac instead, configure using --disable-music-flac-drflac --enable-music-flac-libflac
    • Added support for playing MP3 files using dr_mp3, which is now the default MP3 music backend. To use libmpg123 instead, configure using --disable-music-mp3-drmp3 --enable-music-mp3-mpg123
    • Added libxmp support for mod music playback. Modplug is still the default backend for MOD music. To use libxmp instead, configure using --disable-music-mod-modplug --enable-music-mod-xmp
    • Removed support for libmad as a MP3 music backend.
    • Removed support for libmikmod as a MOD music backend.
    • Added Mix_MasterVolume() for additional volume control over all channels
    • Update Mix_Init() return value to match documentation, including MIXER_INIT_* flags for already-initialized modules
    • Added Mix_HasMusicDecoder()
    • Memory leak fixes and F32 format support to fluidsynth player
    • Fixed distorted MIDI playback with FluidSynth if sample rate is out of library's limits
    • Added Mix_ModMusicJumpToOrder() for mod music formats
    • Enabled module internal loops in modplug player
    • Respect original mp3 file offset
    • Support setting soundfont via SDL_SOUNDFONTS in OSX native midi
    • Fixed mp3 file detection
    • Fixes to ogg playback on big-endian devices
    • Added functions to get metadata information: Mix_GetMusicTitle() Mix_GetMusicTitleTag() Mix_GetMusicArtistTag() Mix_GetMusicAlbumTag() Mix_GetMusicCopyrightTag()
    • Add functions to get loop point information: Mix_GetMusicLoopStartTime() Mix_GetMusicLoopEndTime() Mix_GetMusicLoopLengthTime()
    • Added Mix_GetMusicVolume() and Mix_GetMusicPosition()
    • Added Mix_MusicDuration() to return music duration in seconds
    • Fixed music_mpg123 seek bug when sample rate of the file and the stream don't match
    • Timidity improvements, added Mix_SetTimidityCfg()
    • Improved mp3 tag detection/skipping
    • Extended support for WAV files
    • Allow rmid files be opened by native midi
    • Fixed possible crash in win32 native midi
    • Prevent clipping due to volume settings in modplug music
    • Added looping support for Opus files
    • Added looping support for FLAC files
    • Improved OGG looping support
    • Fixed loading Opus audio as audio chunks
    Source code(tar.gz)
    Source code(zip)
    SDL2_mixer-2.5.2-win32-x64.zip(522.23 KB)
    SDL2_mixer-2.5.2-win32-x86.zip(497.98 KB)
    SDL2_mixer-2.5.2.dmg(289.20 KB)
    SDL2_mixer-2.5.2.tar.gz(9.45 MB)
    SDL2_mixer-2.5.2.zip(12.73 MB)
    SDL2_mixer-devel-2.5.2-mingw.tar.gz(2.40 MB)
    SDL2_mixer-devel-2.5.2-mingw.zip(2.41 MB)
    SDL2_mixer-devel-2.5.2-VC.zip(1.02 MB)
  • candidate-2.5.1(May 25, 2022)

  • release-2.0.4(Jan 11, 2022)

    Changes in this release:

    • Removed smpeg support for mp3 music, now that it's replaced by libmpg123
    • Fixed mp3 mad decoder to skip tags, which otherwise would lead to crashes
    • Added support for Opus music playback using opusfile library
    Source code(tar.gz)
    Source code(zip)
Owner
Simple Directmedia Layer
Simple Directmedia Layer (SDL) is a framework for creating cross-platform games and applications.
Simple Directmedia Layer
simple audio mixer for native and web

?? auph ?? Trivial audio mixer API for native and web targets. Online Demo ⚠️ Work in progress! API is constantly changing. The native playback at the

Elias Ku 13 Jul 1, 2022
A simple CLI to extract & save artwork of a 🎵 music/audio file.

artwork-extractor A simple CLI to extract & save artwork of a ?? music/audio file. Usage Dependencies MediaInfoLib On Debian based distros, one may in

Hitesh Kumar Saini 5 Aug 4, 2021
PortAudio is a portable audio I/O library designed for cross-platform support of audio

PortAudio is a cross-platform, open-source C language library for real-time audio input and output.

PortAudio 668 Aug 2, 2022
Single file audio playback and capture library written in C.

A single file library for audio playback and capture. Example - Documentation - Supported Platforms - Backends - Major Features - Building - Unofficia

David Reid 2.4k Aug 10, 2022
Audio File Library

Audio File Library

michael pruett 133 Aug 8, 2022
Single file C library for decoding MPEG1 Video and MP2 Audio

PL_MPEG - MPEG1 Video decoder, MP2 Audio decoder, MPEG-PS demuxer Single-file MIT licensed library for C/C++ See pl_mpeg.h for the documentation. Why?

Dominic Szablewski 566 Jul 27, 2022
🎵 Music notation engraving library for MEI with MusicXML and Humdrum support and various toolkits (JavaScript, Python)

Verovio is a fast, portable and lightweight library for engraving Music Encoding Initiative (MEI) digital scores into SVG images. Verovio also contain

RISM Switzerland 493 Aug 12, 2022
cute_dsp is a C API for various DSP effects suitable for video games

cute_dsp is a C API for various DSP effects suitable for video games and meant to interface directly with the cute_sound library created by Randy Gaul

Matt Rosen 13 May 29, 2021
A simple C++ library for reading and writing audio files.

AudioFile A simple header-only C++ library for reading and writing audio files. Current supported formats: WAV AIFF Author AudioFile is written and ma

Adam Stark 615 Aug 2, 2022
SimplE Lossless Audio

SELA SimplE Lossless Audio A lossless audio codec which aims to be as simple as possible while still having good enough compression ratios. Code Quali

Ratul Saha 206 May 11, 2022
A simple and easy-to-use audio library based on miniaudio

raudio A simple and easy-to-use audio library based on miniaudio raudio forks from raylib.audio module to become an standalone library. Actually, it w

Ray 53 Aug 6, 2022
ASS: Audio Stupidly Simple

A single header library for audio decoding and playback

Danny Angelo Carminati Grein 31 Feb 20, 2021
A C library for reading and writing sound files containing sampled audio data.

libsndfile libsndfile is a C library for reading and writing files containing sampled audio data. Authors The libsndfile project was originally develo

null 1k Aug 4, 2022
C library for cross-platform real-time audio input and output

libsoundio C library providing cross-platform audio input and output. The API is suitable for real-time software such as digital audio workstations as

Andrew Kelley 1.6k Aug 7, 2022
C++ Audio and Music DSP Library

_____ _____ ___ __ _ _____ __ __ __ ____ ____ / \\_ \\ \/ / |/ \| | | | \_ \/ \ | Y Y \/ /_ \> <| | Y Y \ | |_|

Mick Grierson 1.3k Aug 3, 2022
Easy and efficient audio synthesis in C++

Tonic Fast and easy audio synthesis in C++. Prefer coding to patching? Love clean syntax? Care about performance? That's how we feel too, and why we m

null 466 Aug 9, 2022
Explore fractals in an audio-visual sandbox

Fractal Sound Explorer Explore fractals in an audio-visual sandbox Download executable on my itch.io page: https://codeparade.itch.io/fractal-sound-ex

null 945 Aug 5, 2022
Audio out with an FTDI UART cable

Audio out with an FTDI UART cable This encodes audio as either PDM (using a first order sigma-delta stage), 32-bits PWM or 64-bits PWM and sends it as

Konrad Beckmann 42 Jun 23, 2022
Sexy, audio-responsive effects on LED strips.

Striptease Sexy, audio-responsive effects on LED strips. For Teensy 4 with Audio Adapter Board, by PJRC. Quick demo Shooting video of LEDs is very tri

Luca Paolini 35 Jun 19, 2022