diff --git a/libs/libopenmpt/LICENSE.txt b/libs/libopenmpt/LICENSE.txt
index 8eed2d04918751fc980ea47c975e2f9091a53b6b..e0f012166dcc5c0ec131866434bc7497eb318a26 100644
--- a/libs/libopenmpt/LICENSE.txt
+++ b/libs/libopenmpt/LICENSE.txt
@@ -1,4 +1,4 @@
-Copyright (c) 2004-2018, OpenMPT contributors
+Copyright (c) 2004-2019, OpenMPT contributors
 Copyright (c) 1997-2003, Olivier Lapicque
 All rights reserved.
 
diff --git a/libs/libopenmpt/SRB2NOTE.md b/libs/libopenmpt/SRB2NOTE.md
index 1b57197e1c62ce95a7390bc6f309452f01cf0746..d664ddd7e49930e69cdf6c81d7981568fb2e3d78 100644
--- a/libs/libopenmpt/SRB2NOTE.md
+++ b/libs/libopenmpt/SRB2NOTE.md
@@ -1,6 +1,6 @@
 # libopenmpt mingw-w64 binary info
 
-Current built version as of 2019/01/03 is 0.4.0+r11103.pkg
+Current built version as of 2019/05/23 is 0.4.4+r11531.pkg
 
 * mingw binaries (.dll): `bin/[x86 or x86_64]/mingw`
 * mingw import libraries (.dll.a): `lib/[x86 or x86_64]/mingw`
diff --git a/libs/libopenmpt/bin/x86/libopenmpt.dll b/libs/libopenmpt/bin/x86/libopenmpt.dll
index 4b4f4c0486ccac5821aef945555ec5d08b1e78c0..0fc9e7656d5681b59df4a605b5f39ffe59fd55a9 100644
Binary files a/libs/libopenmpt/bin/x86/libopenmpt.dll and b/libs/libopenmpt/bin/x86/libopenmpt.dll differ
diff --git a/libs/libopenmpt/bin/x86/mingw/libopenmpt.dll b/libs/libopenmpt/bin/x86/mingw/libopenmpt.dll
index 91d59b4f2bad16cce74019f823252f2950f1bad4..5fa3642566039530a3ddf633d45617ef9d93f9bd 100644
Binary files a/libs/libopenmpt/bin/x86/mingw/libopenmpt.dll and b/libs/libopenmpt/bin/x86/mingw/libopenmpt.dll differ
diff --git a/libs/libopenmpt/bin/x86/openmpt-mpg123.dll b/libs/libopenmpt/bin/x86/openmpt-mpg123.dll
index 95bbb1374298947ac825644c039fecab8515ce4f..79148a40ef3cef8e0f745ff14d1ccc1ac4aab025 100644
Binary files a/libs/libopenmpt/bin/x86/openmpt-mpg123.dll and b/libs/libopenmpt/bin/x86/openmpt-mpg123.dll differ
diff --git a/libs/libopenmpt/bin/x86/openmpt-ogg.dll b/libs/libopenmpt/bin/x86/openmpt-ogg.dll
index f73f87d65539808e91a66375c313f7e27e98139c..6b5a42e8f1fd11353588880cd36c649993eebe9e 100644
Binary files a/libs/libopenmpt/bin/x86/openmpt-ogg.dll and b/libs/libopenmpt/bin/x86/openmpt-ogg.dll differ
diff --git a/libs/libopenmpt/bin/x86/openmpt-vorbis.dll b/libs/libopenmpt/bin/x86/openmpt-vorbis.dll
index 6ef9453ec683b7644ee86a913ba38d40ec06f392..486b30731c234696ad1feb3ca9740eebbd390668 100644
Binary files a/libs/libopenmpt/bin/x86/openmpt-vorbis.dll and b/libs/libopenmpt/bin/x86/openmpt-vorbis.dll differ
diff --git a/libs/libopenmpt/bin/x86/openmpt-zlib.dll b/libs/libopenmpt/bin/x86/openmpt-zlib.dll
index 1cb98af0a76829572a3f295839845881a81f7351..b6e028ab4f31b40c620983e73b76b747f9f3249e 100644
Binary files a/libs/libopenmpt/bin/x86/openmpt-zlib.dll and b/libs/libopenmpt/bin/x86/openmpt-zlib.dll differ
diff --git a/libs/libopenmpt/bin/x86_64/libopenmpt.dll b/libs/libopenmpt/bin/x86_64/libopenmpt.dll
index 5bbc41ace177a3bb61cdb8b9757ba614ffc15485..536492798e9167241fc526d010f6ed25e9d0686e 100644
Binary files a/libs/libopenmpt/bin/x86_64/libopenmpt.dll and b/libs/libopenmpt/bin/x86_64/libopenmpt.dll differ
diff --git a/libs/libopenmpt/bin/x86_64/mingw/libopenmpt.dll b/libs/libopenmpt/bin/x86_64/mingw/libopenmpt.dll
index 178b544889b65acc14861677b6067865cc949767..3f6bea95f72b0a8ee68a41128f8bb700918d568d 100644
Binary files a/libs/libopenmpt/bin/x86_64/mingw/libopenmpt.dll and b/libs/libopenmpt/bin/x86_64/mingw/libopenmpt.dll differ
diff --git a/libs/libopenmpt/bin/x86_64/openmpt-mpg123.dll b/libs/libopenmpt/bin/x86_64/openmpt-mpg123.dll
index 47dbb079f9745ea3b83f61abe7f2ad86d3597087..f96d446f25c61df1368c4219324e3a2bf6138723 100644
Binary files a/libs/libopenmpt/bin/x86_64/openmpt-mpg123.dll and b/libs/libopenmpt/bin/x86_64/openmpt-mpg123.dll differ
diff --git a/libs/libopenmpt/bin/x86_64/openmpt-ogg.dll b/libs/libopenmpt/bin/x86_64/openmpt-ogg.dll
index bbadf6bdf55e7b3de7b3c2eefe913257424fd53e..3fd9514147973966faf77c7c2e08fb61c3fa4878 100644
Binary files a/libs/libopenmpt/bin/x86_64/openmpt-ogg.dll and b/libs/libopenmpt/bin/x86_64/openmpt-ogg.dll differ
diff --git a/libs/libopenmpt/bin/x86_64/openmpt-vorbis.dll b/libs/libopenmpt/bin/x86_64/openmpt-vorbis.dll
index 4311f29ee4db405bb6612b390bb322589668e774..56047c82fbf4ff4eecc148718ed2b9fc1882a9da 100644
Binary files a/libs/libopenmpt/bin/x86_64/openmpt-vorbis.dll and b/libs/libopenmpt/bin/x86_64/openmpt-vorbis.dll differ
diff --git a/libs/libopenmpt/bin/x86_64/openmpt-zlib.dll b/libs/libopenmpt/bin/x86_64/openmpt-zlib.dll
index 1e888cb07bc2c937921a6091ffbb8ac9bc6acfaa..562d8e6a9e89b933d2ea4ef30ae2d7e500e35c97 100644
Binary files a/libs/libopenmpt/bin/x86_64/openmpt-zlib.dll and b/libs/libopenmpt/bin/x86_64/openmpt-zlib.dll differ
diff --git a/libs/libopenmpt/changelog.md b/libs/libopenmpt/changelog.md
index d167a7408bb47534e62e04dc4af738e1427fcbc2..9847be1197908bc6962277f54d7a68f0b7d95a79 100644
--- a/libs/libopenmpt/changelog.md
+++ b/libs/libopenmpt/changelog.md
@@ -5,12 +5,64 @@ Changelog {#changelog}
 For fully detailed change log, please see the source repository directly. This
 is just a high-level summary.
 
+### libopenmpt 0.4.4 (2019-04-07)
+
+ *  [**Bug**] Channel VU meters were swapped.
+
+ *  Startrekker: Clamp speed to 31 ticks per row.
+ *  MTM: Ignore unused Exy commands on import. Command E5x (Set Finetune) is now
+    applied correctly.
+ *  MOD: Sample swapping was always enabled since it has been separated from the
+    ProTracker 1/2 compatibility flag. Now it is always enabled for Amiga-style
+    modules and otherwise the old heuristic is used again.
+
+ *  stb_vorbis: Update to v1.16 (2019-03-05).
+
+### libopenmpt 0.4.3 (2019-02-11)
+
+ *  [**Sec**] Possible crash due to null-pointer access when doing a portamento
+    from an OPL instrument to an empty instrument note map slot (r11348).
+
+ *  [**Bug**] libopenmpt did not compile on Apple platforms in C++17 mode.
+
+ *  IT: Various fixes for note-off + instrument number in Old Effects mode.
+ *  MO3: Import IT row highlights as written by MO3 2.4.1.2 or newer. Required
+    for modules using modern tempo mode.
+
+ *  miniz: Update to v2.0.8 (2018-09-19).
+ *  stb_vorbis: Update to v1.15 (2019-02-07).
+
+### libopenmpt 0.4.2 (2019-01-22)
+
+ *  [**Sec**] DSM: Assertion failure during file parsing with debug STLs
+    (r11209).
+ *  [**Sec**] J2B: Assertion failure during file parsing with debug STLs
+    (r11216).
+
+ *  S3M: Allow volume change of OPL instruments after Note Cut.
+
+### libopenmpt 0.4.1 (2019-01-06)
+
+ *  [**Bug**] Binaries compiled for winold (Windows XP, Vista, 7, for CPUs
+    without SSE2 support) did not actually work on CPUs without SSE2 support.
+ *  [**Bug**] libmodplug: Public symbols of the C++ API had `visibility=hidden`
+    set on non-MSVC systems, which made them not publicly accessible.
+ *  [**Bug**] Project files for Windows 10 desktop builds on ARM and ARM64
+    (`build/vs2017win10`) were missing from Windows source package.
+ *  [**Bug**] MSVC project files in Windows source package lacked additional
+    files required to build DLLs.
+
+ *  MO3: Apply playback changes based on "ModPlug-made" header flag.
+
+ *  minimp3: Update to commit e9df0760e94044caded36a55d70ab4152134adc5
+    (2018-12-23).
+
 ### 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 C67 (CDFM Composer) files.
+ *  [**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
diff --git a/libs/libopenmpt/inc/libopenmpt/libopenmpt.h b/libs/libopenmpt/inc/libopenmpt/libopenmpt.h
index ef7359419a1b432de3b6148de6e3f05bbc0c2bb6..d41324885e5255d0573597f610172b934c7e38e6 100644
--- a/libs/libopenmpt/inc/libopenmpt/libopenmpt.h
+++ b/libs/libopenmpt/inc/libopenmpt/libopenmpt.h
@@ -293,6 +293,9 @@ typedef int64_t (*openmpt_stream_tell_func)( void * stream );
 /*! \brief Stream callbacks
  *
  * Stream callbacks used by libopenmpt for stream operations.
+ * \sa openmpt_stream_get_file_callbacks
+ * \sa openmpt_stream_get_fd_callbacks
+ * \sa openmpt_stream_get_buffer_callbacks
  */
 typedef struct openmpt_stream_callbacks {
 
diff --git a/libs/libopenmpt/inc/libopenmpt/libopenmpt_stream_callbacks_buffer.h b/libs/libopenmpt/inc/libopenmpt/libopenmpt_stream_callbacks_buffer.h
index 8111cfde79afa74d1c220cbb31735a84aeac0e0f..575049e4d97789549a99be6cb8fe6463845fcb17 100644
--- a/libs/libopenmpt/inc/libopenmpt/libopenmpt_stream_callbacks_buffer.h
+++ b/libs/libopenmpt/inc/libopenmpt/libopenmpt_stream_callbacks_buffer.h
@@ -27,6 +27,10 @@
 #include <stdlib.h>
 #include <string.h>
 
+/*! \addtogroup libopenmpt_c
+ * @{
+ */
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -162,6 +166,17 @@ static void openmpt_stream_buffer_init( openmpt_stream_buffer * buffer, const vo
 
 #define openmpt_stream_buffer_overflowed( buffer_ ) ( (buffer_)->overflow )
 
+/*! \brief Provide openmpt_stream_callbacks for in-memoy buffers
+ *
+ * Fills openmpt_stream_callbacks suitable for passing an in-memory buffer as a stream parameter to functions doing file input/output.
+ *
+ * \remarks The stream argument must be passed as `(void*)(openmpt_stream_buffer*)stream_buffer`.
+ * \sa \ref libopenmpt_c_fileio
+ * \sa openmpt_stream_callbacks
+ * \sa openmpt_could_open_probability2
+ * \sa openmpt_probe_file_header_from_stream
+ * \sa openmpt_module_create2
+ */
 static openmpt_stream_callbacks openmpt_stream_get_buffer_callbacks(void) {
 	openmpt_stream_callbacks retval;
 	memset( &retval, 0, sizeof( openmpt_stream_callbacks ) );
@@ -175,5 +190,9 @@ static openmpt_stream_callbacks openmpt_stream_get_buffer_callbacks(void) {
 }
 #endif
 
+/*!
+ * @}
+ */
+
 #endif /* LIBOPENMPT_STREAM_CALLBACKS_BUFFER_H */
 
diff --git a/libs/libopenmpt/inc/libopenmpt/libopenmpt_stream_callbacks_fd.h b/libs/libopenmpt/inc/libopenmpt/libopenmpt_stream_callbacks_fd.h
index 4c814cf3ff872e722be4870eac13b98c3bd7247b..46b39f12981ba3bb73b3b644a8d7e69f67bbc000 100644
--- a/libs/libopenmpt/inc/libopenmpt/libopenmpt_stream_callbacks_fd.h
+++ b/libs/libopenmpt/inc/libopenmpt/libopenmpt_stream_callbacks_fd.h
@@ -23,6 +23,10 @@
 #include <unistd.h>
 #endif
 
+/*! \addtogroup libopenmpt_c
+ * @{
+ */
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -67,6 +71,17 @@ static size_t openmpt_stream_fd_read_func( void * stream, void * dst, size_t byt
 	return retval;
 }
 
+/*! \brief Provide openmpt_stream_callbacks for standard POSIX file descriptors
+ *
+ * Fills openmpt_stream_callbacks suitable for passing a POSIX filer descriptor as a stream parameter to functions doing file input/output.
+ *
+ * \remarks The stream argument must be passed as `(void*)(uintptr_t)(int)fd`.
+ * \sa \ref libopenmpt_c_fileio
+ * \sa openmpt_stream_callbacks
+ * \sa openmpt_could_open_probability2
+ * \sa openmpt_probe_file_header_from_stream
+ * \sa openmpt_module_create2
+ */
 static openmpt_stream_callbacks openmpt_stream_get_fd_callbacks(void) {
 	openmpt_stream_callbacks retval;
 	memset( &retval, 0, sizeof( openmpt_stream_callbacks ) );
@@ -78,5 +93,9 @@ static openmpt_stream_callbacks openmpt_stream_get_fd_callbacks(void) {
 }
 #endif
 
+/*!
+ * @}
+ */
+
 #endif /* LIBOPENMPT_STREAM_CALLBACKS_FD_H */
 
diff --git a/libs/libopenmpt/inc/libopenmpt/libopenmpt_stream_callbacks_file.h b/libs/libopenmpt/inc/libopenmpt/libopenmpt_stream_callbacks_file.h
index 4fa529fd99ec4735bab6965178595db4f743dde5..643049153e75fb233104c2cb5ad6eb0b9005dfe7 100644
--- a/libs/libopenmpt/inc/libopenmpt/libopenmpt_stream_callbacks_file.h
+++ b/libs/libopenmpt/inc/libopenmpt/libopenmpt_stream_callbacks_file.h
@@ -20,6 +20,10 @@
 #include <wchar.h> /* off_t */
 #endif
 
+/*! \addtogroup libopenmpt_c
+ * @{
+ */
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -96,6 +100,17 @@ static int64_t openmpt_stream_file_tell_func( void * stream ) {
 	return retval;
 }
 
+/*! \brief Provide openmpt_stream_callbacks for standard C FILE objects
+ *
+ * Fills openmpt_stream_callbacks suitable for passing a standard C FILE object as a stream parameter to functions doing file input/output.
+ *
+ * \remarks The stream argument must be passed as `(void*)(FILE*)file`.
+ * \sa \ref libopenmpt_c_fileio
+ * \sa openmpt_stream_callbacks
+ * \sa openmpt_could_open_probability2
+ * \sa openmpt_probe_file_header_from_stream
+ * \sa openmpt_module_create2
+ */
 static openmpt_stream_callbacks openmpt_stream_get_file_callbacks(void) {
 	openmpt_stream_callbacks retval;
 	memset( &retval, 0, sizeof( openmpt_stream_callbacks ) );
@@ -109,5 +124,9 @@ static openmpt_stream_callbacks openmpt_stream_get_file_callbacks(void) {
 }
 #endif
 
+/*!
+ * @}
+ */
+
 #endif /* LIBOPENMPT_STREAM_CALLBACKS_FILE_H */
 
diff --git a/libs/libopenmpt/inc/libopenmpt/libopenmpt_version.h b/libs/libopenmpt/inc/libopenmpt/libopenmpt_version.h
index d3538e5230606e954348dfaac2e9abe7b24a6a1e..5ca7f21d0ff4a776d8011fc72b67d140aa237b9d 100644
--- a/libs/libopenmpt/inc/libopenmpt/libopenmpt_version.h
+++ b/libs/libopenmpt/inc/libopenmpt/libopenmpt_version.h
@@ -19,7 +19,7 @@
 /*! \brief libopenmpt minor version number */
 #define OPENMPT_API_VERSION_MINOR 4
 /*! \brief libopenmpt patch version number */
-#define OPENMPT_API_VERSION_PATCH 0
+#define OPENMPT_API_VERSION_PATCH 4
 /*! \brief libopenmpt pre-release tag */
 #define OPENMPT_API_VERSION_PREREL ""
 /*! \brief libopenmpt pre-release flag */
diff --git a/libs/libopenmpt/lib/x86/libopenmpt.lib b/libs/libopenmpt/lib/x86/libopenmpt.lib
index dd8b5f0e7aa3a11a402ffcad609f88cb76163bc3..3f814528acc851cec1e764547570756c24d65225 100644
Binary files a/libs/libopenmpt/lib/x86/libopenmpt.lib and b/libs/libopenmpt/lib/x86/libopenmpt.lib differ
diff --git a/libs/libopenmpt/lib/x86/mingw/libopenmpt.dll.a b/libs/libopenmpt/lib/x86/mingw/libopenmpt.dll.a
index e06293ef0e12b4337a418a3236f321a20bf1584a..e3fa0c58fcd082319ea3b6365cb566dd7a3efa24 100644
Binary files a/libs/libopenmpt/lib/x86/mingw/libopenmpt.dll.a and b/libs/libopenmpt/lib/x86/mingw/libopenmpt.dll.a differ
diff --git a/libs/libopenmpt/lib/x86_64/libopenmpt.lib b/libs/libopenmpt/lib/x86_64/libopenmpt.lib
index aca91fd0a48855ce56fcfe9a543432c179939ca5..75e3849fac966542b457684ca6f55a41237211d3 100644
Binary files a/libs/libopenmpt/lib/x86_64/libopenmpt.lib and b/libs/libopenmpt/lib/x86_64/libopenmpt.lib differ
diff --git a/libs/libopenmpt/lib/x86_64/mingw/libopenmpt.dll.a b/libs/libopenmpt/lib/x86_64/mingw/libopenmpt.dll.a
index e3eb180d39cb48d1ff59f73ee34965046e0c0f12..72940372211829f26b413075496f7e201d5fb357 100644
Binary files a/libs/libopenmpt/lib/x86_64/mingw/libopenmpt.dll.a and b/libs/libopenmpt/lib/x86_64/mingw/libopenmpt.dll.a differ
diff --git a/src/sdl/mixer_sound.c b/src/sdl/mixer_sound.c
index 5e550eb27541a9babda5cc110c734c4a83aac874..3c4a5c7b55833b3c9d7a2555441a817de6b066d4 100644
--- a/src/sdl/mixer_sound.c
+++ b/src/sdl/mixer_sound.c
@@ -672,6 +672,7 @@ static void mix_openmpt(void *udata, Uint8 *stream, int len)
 	if (!openmpt_mhandle || songpaused)
 		return;
 
+	// Play module into stream
 	openmpt_module_read_interleaved_stereo(openmpt_mhandle, SAMPLERATE, BUFFERSIZE, (short *)stream);
 
 	// Limiter to prevent music from being disorted with some formats