The OpenMPT/libopenmpt project released the latest stable libopenmpt version:

libopenmpt 0.4.0 (2018-12-23)

  • [New] libopenmpt now includes emulation of the OPL chip and thus plays OPL instruments in S3M, C67 and MPTM files. OPL chip emulation volume can be changed with the new ctl render.opl.volume_factor.
  • [New] libopenmpt now supports CDFM / Composer 670 module files.
  • [New] Autotools configure and plain Makefile now honor the variable CXXSTDLIB_PCLIBSPRIVATE which serves the sole purpose of listing the standard library (or libraries) required for static linking. The contents of this variable will be put in libopenmpt.pc Libs.private and used for nothing else. See \ref libopenmpt_c_staticlinking .
  • [New] foo_openmpt: foo_openmpt now also works on Windows XP.
  • [New] libopenmpt Emscripten builds now ship with MP3 support by default, based on minimp3 by Lion (github.com/lieff).
  • [New] libopenmpt: New ctl play.at_end can be used to change what happens when the song end is reached:
    • “fadeout”: Fades the module out for a short while. Subsequent reads after the fadeout will return 0 rendered frames. This is the default and identical to the behaviour in previous libopenmpt versions.
    • “continue”: Returns 0 rendered frames when the song end is reached. Subsequent reads will continue playing from the song start or loop start. This can be used for custom loop logic, such as loop auto-detection and longer fadeouts.
    • “stop”: Returns 0 rendered frames when the song end is reached. Subsequent reads will return 0 rendered frames.
  • [New] Add new metadata fields "originaltype" and "originaltype_long" which allow more clearly reflecting what is going on with converted formats like MO3 and GDM.
  • [New] Makefile CONFIG=emscripten now can generate WebAssembly via the additional option EMSCRIPTEN_TARGET=wasm.
  • [New] Compiling for DOS is now experimentally supported via DJGPP GCC 7.2 or later.

  • [Change] minimp3: Instead of the LGPL-2.1-licensed minimp3 by KeyJ, libopenmpt now uses the CC0-1.0-licensed minimp3 by Lion (github.com/lieff) as a fallback if libmpg123 is unavailable. The USE_MINIMP3 Makefile option is gone and minimp3 will be used automatically in the Makefile build system if libmpg123 is not available.
  • [Change] openmpt123: openmpt123 now rejects --output-type in --ui and --batch modes and also rejects --output in --render mode. These combinations of options really made no sense and were rather confusing.
  • [Change] Android NDK build system now uses libc++ (c++_shared) instead of GNU libstdc++ (gnustl_shared), as recommended by Android NDK r16b.
  • [Change] xmp-openmpt: openmpt-mpg123.dll is no longer optional and must be placed into the same directory as xmp-openmpt.dll.
  • [Change] in_openmpt: openmpt-mpg123.dll is no longer optional and must be placed either into the directory of the player itself or into the same directory as in_openmpt.dll. This is dependent on how the player loads its plugins. For WinAMP 5, openmpt-mpg123.dll needs to be in the directory which contains winamp.exe. in_openmpt.dll needs to be in the Plugins directory.
  • [Change] foo_openmpt: foo_openmpt is now packaged as a fb2k-component package for easier installation.
  • [Change] When building libopenmpt with MinGW-w64, it is now recommended to use the posix thread model (as opposed to the win32 threading model), because the former does support std::mutex while the latter does not. When building with win32 threading model with the Autotools build system, it is recommended to provide the mingw-std-threads package. Building libopenmpt with MinGW-w64 without any std::thread/std::mutex support is deprecated and support for such configurations will be removed in libopenmpt 0.5.
  • [Change] Makefile CONFIG=emscripten now has 4 EMSCRIPTEN_TARGET= settings: wasm generates WebAssembly, asmjs128m generates asm.js with a fixed size 128MB heap, asmjs generates asm.js with a fixed default size heap (as of Emscripten 1.38.11, this amounts to 16MB), js generates JavaScript with dynamic heap growth and with compatibility for older VMs.
  • [Change] libmodplug: Update public headers to libmodplug 0.8.8.5. This adds support for kind-of automatic MODPLUG_EXPORT decoration on Windows.

  • [Regression] Support for Clang 3.4, 3.5 has been removed.
  • [Regression] Building with Android NDK older than NDK r16b is not supported any more.
  • [Regression] Support for Emscripten versions older than 1.38.5 has been removed.
  • [Regression] Support for libmpg123 older than 1.14.0 has been removed.
  • [Regression] Using MediaFoundation to decode MP3 samples is no longer supported. Use libmpg123 or minimp3 instead.
  • [Regression] libmodplug: Support for emulating libmodplug 0.8.7 API/ABI has been removed.

  • [Bug] xmp-openmpt: Sample rate and number of output channels were not applied correctly when using per-file settings.
  • [Bug] Internal mixer state was not initialized properly when initially rendering in 44100kHz stereo format.
  • [Bug] openmpt123: Prevent libsdl2 and libsdl from being enabled at the same time because they conflict with each other.
  • [Bug] libmodplug: Setting SNDMIX_NORESAMPLING in the C++ API always resulted in linear interpolation instead of nearest neighbour

  • IT: In Compatible Gxx mode, allow sample changes next to a tone portamento effect if a previous sample has already stopped playing.
  • IT: Fix broken volume envelopes with negative values as found in breakdwn.it by Elysis.
  • MOD: Slides and delayed notes are executed on every repetition of a row with row delay (fixes “ode to protracker”).
  • XM: If the sustain point of the panning envelope is reached before key-off, it is never released.
  • XM: Do not default recall volume / panning for delayed instrument-less notes
  • XM :E60 loop bug was not considered in song length calucation.
  • S3M: Notes without instrument number use previous note’s sample offset.
  • Tighten M15 and MOD file rejection heuristics.
  • J2B: Ignore frequency limits from file header. Fixes Medivo.j2b, broken since libopenmpt-0.2.6401-beta17.
  • STM: More accurate tempo calculation.
  • STM: Better support for early format revisions (no such files have been found in the wild, though).
  • STM: Last character of sample name was missing.
  • SFX: Work around bad conversions of the “Operation Stealth” soundtrack by turning pattern breaks into note stops.
  • IMF: Filter cutoff was upside down and the cutoff range was too small.
  • ParamEq plugin center frequency was not limited correctly.
  • Keep track of active SFx macro during seeking.
  • The “note cut” duplicate note action did not volume-ramp the previously playing sample.
  • A song starting with non-existing patterns could not be played.
  • DSM: Support restart position and 16-bit samples.
  • DTM: Import global volume.
  • MOD: Support notes in octave 2, like in FastTracker 2 (fixes DOPE.MOD).
  • Do not apply Amiga playback heuristics to MOD files that have clearly been written with a PC tracker.
  • MPTM: More logical release node behaviour.
  • Subsong search is now less thorough. It could previously find many subsongs that are technically correct (unplayed rows at the beginning of patterns that have been jumped over due to pattern breaks), but so far no real-world module that would require such a thorough subsong detection was found. The old mechanism caused way more false positives than intended with real-world modules, though.
  • Restrict the unpacked size of compressed DMF, IT, MDL and MO3 samples to avoid huge allocations with malformed small files.

The changelog for older versions can be found at https://lib.openmpt.org/doc/changelog.html .

Source code download links:

Documentation and binary downloads can be found at the libopenmpt website at https://lib.openmpt.org/libopenmpt/.


The following libopenmpt versions are currently supported with security fixes by the OpenMPT/libopenmpt project:

  • 0.4.0
    • Current stable version.
    • Receives security updates.
    • Receives minor playback fixes.
  • 0.3.13
    • Old stable version.
    • Receives security updates.
    • Receives trivial bug fixes.
  • 0.2.10933-beta36
    • Old stable version.
    • Receives security updates.
    • Receives trivial bug fixes.
  • 0.2.7561-beta20.5-p11
    • Older stable version which is supported on Unix-like systems only.
    • Receives only security fixes.
  • 0.2.7386-beta20.3-p14
    • Older stable version which is supported on Unix-like systems only.
    • Receives only security fixes.
  • 0.5 (SVN trunk)
    • development
    • security updates
    • playback fixes
    • new features
    • new file formats

Please update to the newest versions.