Skip to content
Official read-only git mirror of the OpenMPT and libopenmpt subversion repository at This repository may occasionally get rebased without further notice when subversion revision properties (commit message) get fixed in recent history after the fact. Be sure to rebase often in case you clone or fork it.
C C++ Lua HTML Makefile Assembly Other
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.


Type Name Latest commit message Commit time
Failed to load latest commit information.
build [Ref] installer/multiarch: Build portable zip archives for all archit… May 28, 2020
common [Mod] OpenMPT: Version is now May 25, 2020
contrib [Var] build: Add contrib/toolchain-djgpp which builds a djgpp cross-c… May 16, 2020
doc [Ref] Rename MPT_LOCK_GUARD to mpt::lock_guard. May 23, 2020
examples [Fix] examples: Work-around bug in VS2019 MSVC 16.5.5 static analyzer. May 14, 2020
include [Var] mpg123: Update to v1.26.0. May 25, 2020
installer [Ref] installer/multiarch: Remove platform from app name. May 29, 2020
libopenmpt [Doc] libopenmpt: Update changelog. May 24, 2020
misc [Ref] mptString: Convert mpt::Charset to enum class. Nov 2, 2019
mptrack [Reg] sounddev: Remove DirectSound. May 25, 2020
openmpt123 [Fix] openmpt123: Handle throwing std::random_device constructor. May 16, 2020
packageTemplate [Doc] Update package template. May 24, 2020
soundbase [Ref] Sample Converters: Remove unused work-around for bad MSVC x87 c… Jan 17, 2020
sounddev [Reg] sounddev: Remove DirectSound. May 25, 2020
sounddsp [Fix] Do not use static const data inside functions in order to avoid… Dec 24, 2019
soundlib [Fix] DLS: Tuning of drum programs broke in r12782. May 27, 2020
test [Ref] libopenmpt: Silence all MSVC /analyze warnings in 32bit libopen… Apr 20, 2020
unarchiver [Ref] mptString: Convert mpt::Charset to enum class. Nov 2, 2019
.appveyor.yml [Var] build: Add separate script to build installer packages without … Nov 6, 2019
.clang-format [Var] Add .clang-format globally (OpenMPT style) and locally in libop… Jul 3, 2019
.gitignore [Var] Update gitignore. Apr 14, 2020
.travis.yml [Fix] build: Travis: Do not try to install xz on macOS because it is … Apr 14, 2020
LICENSE [Var] Happy 2020. Jan 1, 2020
Makefile [Reg] libmodplug: Remove libmodplug emulation layer from libopenmpt p… Apr 14, 2020 [Ref] sounddev: ASIO: Use ASIO::Modern SDK replacement. Dec 19, 2019


OpenMPT and libopenmpt

This repository contains OpenMPT, a free Windows/Wine-based tracker and libopenmpt, a library to render tracker music (MOD, XM, S3M, IT MPTM and dozens of other legacy formats) to a PCM audio stream. libopenmpt is directly based on OpenMPT, offering the same playback quality and format support, and development of the two happens in parallel.


The OpenMPT/libopenmpt project is distributed under the BSD-3-Clause License. See LICENSE for the full license text.

Files below the include/ (external projects) and contrib/ (related assets not directly considered integral part of the project) folders may be subject to other licenses. See the respective subfolders for license information. These folders are not distributed in all source packages, and in particular they are not distributed in the Autotools packages.

How to compile


  • Supported Visual Studio versions:

    • Visual Studio 2017 and 2019 Community/Professional/Enterprise

      To compile the project, open build/vsVERSIONwin7/OpenMPT.sln (VERSION being 2017 or 2019) and hit the compile button. Other target systems can be found in the vs2017* and vs2019* sibling folders.

  • OpenMPT requires the compile host system to be 64bit x86-64.

  • The Windows 8.1 SDK is required to build OpenMPT with Visual Studio 2017 (this is included with Visual Studio, however may need to be selected explicitly during setup).

  • Microsoft Foundation Classes (MFC) are required to build OpenMPT.

libopenmpt and openmpt123

For detailed requirements, see libopenmpt/dox/

  • Autotools

    Grab a libopenmpt-VERSION-autotools.tar.gz tarball.

    make check
    sudo make install

    Cross-compilation is generally supported (although only tested for targetting MinGW-w64).

    Note that some MinGW-w64 distributions come with the win32 threading model enabled by default instead of the posix threading model. The win32 threading model lacks proper support for C++11 <thread> and <mutex> as well as thread-safe magic statics. It is recommended to use the posix threading model for libopenmpt for this reason. On Debian, the appropriate configure command is ./configure --host=x86_64-w64-mingw32 CC=x86_64-w64-mingw32-gcc-posix CXX=x86_64-w64-mingw32-g++-posix for 64bit, or ./configure --host=i686-w64-mingw32 CC=i686-w64-mingw32-gcc-posix CXX=i686-w64-mingw32-g++-posix for 32bit. Other MinGW-w64 distributions may differ.

  • Visual Studio:

    • You will find solutions for Visual Studio 2017 and 2019 in the corresponding build/vsVERSIONwin7/ folder. Projects that target Windows versions before Windows 7 are available in build/vsVERSIONwinxp/. Projects that target Windows 10 1709 Desktop (10.0.16299.0, including ARM and ARM64) or later versions are available in build/vsVERSIONwin10/. Minimal projects that target Windows 10 UWP are available in build/vsVERSIONuwp/. Most projects are supported with any of the mentioned Visual Studio verions, with the following exceptions:

      • in_openmpt: Requires Visual Studio with MFC.

      • xmp-openmpt: Requires Visual Studio with MFC.

    • libopenmpt requires the compile host system to be 64bit x86-64 when building with Visual Studio.

    • You will need the Winamp 5 SDK and the XMPlay SDK if you want to compile the plugins for these 2 players. They can be downloaded automatically on Windows 7 or later by just running the build/download_externals.cmd script.

      If you do not want to or cannot use this script, you may follow these manual steps instead:

      • Winamp 5 SDK:

        To build libopenmpt as a winamp input plugin, copy the contents of WA5.55_SDK.exe to include/winamp/.

        Please visit to download the SDK. You can disable in_openmpt in the solution configuration.

      • XMPlay SDK:

        To build libopenmpt with XMPlay input plugin support, copy the contents of into include/xmplay/.

        Please visit to download the SDK. You can disable xmp-openmpt in the solution configuration.

  • Makefile

    The makefile supports different build environments and targets via the CONFIG= parameter directly to the make invocation. Use make CONFIG=$newconfig clean when switching between different configs because the makefile cleans only intermediates and target that are active for the current config and no configuration state is kept around across invocations.

    • mingw-w64:

      The required compiler version is at least GCC 5.

      make CONFIG=mingw64-win32    # for win32
      make CONFIG=mingw64-win64    # for win64
    • gcc or clang (on Unix-like systems, including Mac OS X with MacPorts, and Haiku (32-bit Hybrid and 64-bit)):

      The minimum required compiler versions are:

      • gcc 7

      • clang 5

      The Makefile requires pkg-config for native builds. For sound output in openmpt123, PortAudio or SDL is required. openmpt123 can optionally use libflac and libsndfile to render PCM files to disk.

      When using gcc, run:

      make CONFIG=gcc

      When using clang, it is recommended to do:

      make CONFIG=clang

      Otherwise, simply run


      which will try to guess the compiler based on your operating system.

    • emscripten (on Unix-like systems):

      libopenmpt has been tested and verified to work with emscripten 1.38.5 or later. Earlier versions are not supported.


      # generates WebAssembly with dynamic heap growth
      make CONFIG=emscripten EMSCRIPTEN_TARGET=wasm


      # generates asm.js with a fixed size 128MB heap
      make CONFIG=emscripten EMSCRIPTEN_TARGET=asmjs128m


      # generates asm.js with a fixed default size heap (as of Emscripten
      # 1.38.11, this amounts to 16MB)
      make CONFIG=emscripten EMSCRIPTEN_TARGET=asmjs


      # generates JavaScript with dynamic heap growth and with
      # compatibility for older VMs
      make CONFIG=emscripten EMSCRIPTEN_TARGET=js

      Running the test suite on the command line is also supported by using node.js. Version 8.9.1 or greater has been tested. Earlier versions might or might not work. Depending on how your distribution calls the node.js binary, you might have to edit build/make/

    • DJGPP / DOS

      Cross-compilation from Linux systems is supported with DJGPP GCC 7.2 or later via

      make CONFIG=djgpp

      openmpt123 can use liballegro 4.2 for sound output on DJGPP/DOS. liballegro can either be installed system-wide in the DJGPP environment or downloaded into the libopenmpt source tree.

      make CONFIG=djgpp USE_ALLEGRO42=1    # use installed liballegro


      ./build/    # download liballegro binaries
    • American Fuzzy Lop:

      To compile libopenmpt with fuzzing instrumentation for afl-fuzz, run:

      make CONFIG=afl

      For more detailed instructions, read contrib/fuzzing/

    • other compilers:

      To compile libopenmpt with other C++14 compliant compilers, run:

      make CONFIG=generic

    The Makefile supports some customizations. You might want to read the top which should get you some possible make settings, like e.g. make DYNLINK=0 or similar. Cross compiling or different compiler would best be implemented via new config-*.mk files.

    The Makefile also supports building doxygen documentation by using

    make doc

    Binaries and documentation can be installed systen-wide with

    make PREFIX=/yourprefix install
    make PREFIX=/yourprefix install-doc

    Some systems (i.e. Linux) require running

    sudo ldconfig

    in order for the system linker to be able to pick up newly installed libraries.

    PREFIX defaults to /usr/local. A DESTDIR= parameter is also supported.

  • Android NDK

    See build/android_ndk/README.AndroidNDK.txt.

Contributing to OpenMPT/libopenmpt

See contributing.

You can’t perform that action at this time.