Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libopenmpt for openSUSE:Factory 
checked in at 2021-02-07 15:16:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libopenmpt (Old)
 and      /work/SRC/openSUSE:Factory/.libopenmpt.new.28504 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libopenmpt"

Sun Feb  7 15:16:26 2021 rev:27 rq:868777 version:0.5.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/libopenmpt/libopenmpt.changes    2020-12-18 
19:52:10.697599344 +0100
+++ /work/SRC/openSUSE:Factory/.libopenmpt.new.28504/libopenmpt.changes 
2021-02-07 15:17:50.477649832 +0100
@@ -1,0 +2,18 @@
+Tue Feb  2 23:22:53 UTC 2021 - Mia Herkt <m...@0x0.st>
+
+- Update to 0.5.5:
+  * [Bug] stb_vorbis: Fix decoding of Vorbis streams without
+    comments which affected most Vorbis samples since stb_vorbis
+    v1.20.
+  * openmpt::ext::interactive::set_pitch_factor wasn???t applied to
+    OPL voices.
+  * OPL channel state (in particular current patch) is now updated
+    when seeking.
+  * The FT2 tremolo quirk is now also applied to MOD files.
+    FT2 just copied the quirky code from ProTracker!
+  * DMF: Preserve effects better in some situations where there is
+    more than one effect in a pattern cell.
+  * DMF: Improve import of finetune effect with parameters larger
+    than +/-15.
+
+-------------------------------------------------------------------

Old:
----
  libopenmpt-0.5.4+release.autotools.tar.gz

New:
----
  libopenmpt-0.5.5+release.autotools.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libopenmpt.spec ++++++
--- /var/tmp/diff_new_pack.K4hI77/_old  2021-02-07 15:17:51.045650779 +0100
+++ /var/tmp/diff_new_pack.K4hI77/_new  2021-02-07 15:17:51.049650785 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package libopenmpt
 #
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -21,7 +21,7 @@
 %define libopenmpt_modplug_version 0.8.9.0
 
 Name:           libopenmpt
-Version:        0.5.4
+Version:        0.5.5
 Release:        0
 Summary:        C++ and C library to decode tracker music files
 License:        BSD-3-Clause

++++++ libopenmpt-0.5.4+release.autotools.tar.gz -> 
libopenmpt-0.5.5+release.autotools.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libopenmpt-0.5.4+release.autotools/LICENSE 
new/libopenmpt-0.5.5+release.autotools/LICENSE
--- old/libopenmpt-0.5.4+release.autotools/LICENSE      2020-01-01 
09:49:12.000000000 +0100
+++ new/libopenmpt-0.5.5+release.autotools/LICENSE      2021-01-01 
09:06:03.000000000 +0100
@@ -1,4 +1,4 @@
-Copyright (c) 2004-2020, OpenMPT contributors
+Copyright (c) 2004-2021, OpenMPT contributors
 Copyright (c) 1997-2003, Olivier Lapicque
 All rights reserved.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libopenmpt-0.5.4+release.autotools/README.md 
new/libopenmpt-0.5.5+release.autotools/README.md
--- old/libopenmpt-0.5.4+release.autotools/README.md    2020-07-17 
18:40:43.000000000 +0200
+++ new/libopenmpt-0.5.5+release.autotools/README.md    2020-12-26 
17:31:15.000000000 +0100
@@ -170,36 +170,24 @@
 
      -  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.
-
         Run:
 
-            # generates WebAssembly with dynamic heap growth
-            make CONFIG=emscripten EMSCRIPTEN_TARGET=wasm
-
-        or
-
-            # generates asm.js with a fixed size 128MB heap
-            make CONFIG=emscripten EMSCRIPTEN_TARGET=asmjs128m
+            # generates WebAssembly with JavaScript fallback
+            make CONFIG=emscripten EMSCRIPTEN_TARGET=all
 
         or
 
-            # 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 WebAssembly
+            make CONFIG=emscripten EMSCRIPTEN_TARGET=wasm
 
         or
 
-            # generates JavaScript with dynamic heap growth and with
-            # compatibility for older VMs
+            # generates JavaScript 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/config-emscripten.mk`.
+        node.js. Depending on how your distribution calls the `node.js` binary,
+        you might have to edit `build/make/config-emscripten.mk`.
 
      -  DJGPP / DOS
 
@@ -229,7 +217,7 @@
 
      -  other compilers:
 
-        To compile libopenmpt with other C++14 compliant compilers, run:
+        To compile libopenmpt with other C++17 compliant compilers, run:
         
             make CONFIG=generic
         
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/common/CompilerDetect.h 
new/libopenmpt-0.5.5+release.autotools/common/CompilerDetect.h
--- old/libopenmpt-0.5.4+release.autotools/common/CompilerDetect.h      
2020-08-27 19:24:24.000000000 +0200
+++ new/libopenmpt-0.5.5+release.autotools/common/CompilerDetect.h      
2021-01-20 11:22:11.000000000 +0100
@@ -309,6 +309,12 @@
 #endif
 
 
+#if MPT_OS_EMSCRIPTEN && defined(MPT_BUILD_AUDIOWORKLETPROCESSOR)
+#define MPT_COMPILER_QUIRK_CHRONO_NO_HIGH_RESOLUTION_CLOCK
+#define MPT_COMPILER_QUIRK_RANDOM_NO_RANDOM_DEVICE
+#endif
+
+
 #if MPT_OS_DJGPP
 #define MPT_COMPILER_QUIRK_NO_WCHAR
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/common/mptRandom.cpp 
new/libopenmpt-0.5.5+release.autotools/common/mptRandom.cpp
--- old/libopenmpt-0.5.4+release.autotools/common/mptRandom.cpp 2020-08-28 
14:39:38.000000000 +0200
+++ new/libopenmpt-0.5.5+release.autotools/common/mptRandom.cpp 2021-01-20 
11:22:11.000000000 +0100
@@ -27,6 +27,8 @@
 {
 
 
+#if !defined(MPT_COMPILER_QUIRK_RANDOM_NO_RANDOM_DEVICE)
+
 template <typename T>
 static T log2(T x)
 {
@@ -58,6 +60,8 @@
        return false;
 }
 
+#endif // !MPT_COMPILER_QUIRK_RANDOM_NO_RANDOM_DEVICE
+
 
 namespace {
 template <typename T> struct default_hash { };
@@ -91,6 +95,7 @@
                hash(std::begin(bytes), std::end(bytes));
        }
 
+#if !defined(MPT_COMPILER_QUIRK_CHRONO_NO_HIGH_RESOLUTION_CLOCK)
        {
                uint64be time;
                time = 
std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock().now().time_since_epoch()).count();
@@ -98,6 +103,7 @@
                std::memcpy(bytes, &time, sizeof(time));
                hash(std::begin(bytes), std::end(bytes));
        }
+#endif // !MPT_COMPILER_QUIRK_CHRONO_NO_HIGH_RESOLUTION_CLOCK
 
        return static_cast<T>(hash.result());
 
@@ -126,8 +132,11 @@
 #endif // MODPLUG_TRACKER
 
 sane_random_device::sane_random_device()
+#if !defined(MPT_COMPILER_QUIRK_RANDOM_NO_RANDOM_DEVICE)
        : rd_reliable(false)
+#endif // MPT_COMPILER_QUIRK_RANDOM_NO_RANDOM_DEVICE
 {
+#if !defined(MPT_COMPILER_QUIRK_RANDOM_NO_RANDOM_DEVICE)
        try
        {
                prd = std::make_unique<std::random_device>();
@@ -140,6 +149,7 @@
                rd_reliable = false;    
        }
        if(!rd_reliable)
+#endif // MPT_COMPILER_QUIRK_RANDOM_NO_RANDOM_DEVICE
        {
                init_fallback();
        }
@@ -147,8 +157,11 @@
 
 sane_random_device::sane_random_device(const std::string & token_)
        : token(token_)
+#if !defined(MPT_COMPILER_QUIRK_RANDOM_NO_RANDOM_DEVICE)
        , rd_reliable(false)
+#endif // MPT_COMPILER_QUIRK_RANDOM_NO_RANDOM_DEVICE
 {
+#if !defined(MPT_COMPILER_QUIRK_RANDOM_NO_RANDOM_DEVICE)
        try
        {
                prd = std::make_unique<std::random_device>(token);
@@ -161,6 +174,7 @@
                rd_reliable = false;    
        }
        if(!rd_reliable)
+#endif // MPT_COMPILER_QUIRK_RANDOM_NO_RANDOM_DEVICE
        {
                init_fallback();
        }
@@ -198,6 +212,7 @@
 {
        mpt::lock_guard<mpt::mutex> l(m);
        result_type result = 0;
+#if !defined(MPT_COMPILER_QUIRK_RANDOM_NO_RANDOM_DEVICE)
        if(prd)
        {
                try
@@ -244,6 +259,7 @@
                rd_reliable = false;
        }
        if(!rd_reliable)
+#endif // MPT_COMPILER_QUIRK_RANDOM_NO_RANDOM_DEVICE
        { // std::random_device is unreliable
                //  XOR the generated random number with more entropy from the 
time-seeded
                // PRNG.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/common/mptRandom.h 
new/libopenmpt-0.5.5+release.autotools/common/mptRandom.h
--- old/libopenmpt-0.5.4+release.autotools/common/mptRandom.h   2020-08-28 
14:39:38.000000000 +0200
+++ new/libopenmpt-0.5.5+release.autotools/common/mptRandom.h   2021-01-20 
11:22:11.000000000 +0100
@@ -449,8 +449,10 @@
 private:
        mpt::mutex m;
        std::string token;
+#if !defined(MPT_COMPILER_QUIRK_RANDOM_NO_RANDOM_DEVICE)
        std::unique_ptr<std::random_device> prd;
        bool rd_reliable;
+#endif // !MPT_COMPILER_QUIRK_RANDOM_NO_RANDOM_DEVICE
        std::unique_ptr<std::mt19937> rd_fallback;
 public:
        typedef unsigned int result_type;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/common/version.cpp 
new/libopenmpt-0.5.5+release.autotools/common/version.cpp
--- old/libopenmpt-0.5.4+release.autotools/common/version.cpp   2020-04-17 
15:04:34.000000000 +0200
+++ new/libopenmpt-0.5.5+release.autotools/common/version.cpp   2021-01-01 
09:06:03.000000000 +0100
@@ -582,12 +582,12 @@
                "libopenmpt (based on OpenMPT / ModPlug Tracker)\n"
 #endif
                "\n"
-               "Copyright \xC2\xA9 2004-2020 Contributors\n"
+               "Copyright \xC2\xA9 2004-2021 Contributors\n"
                "Copyright \xC2\xA9 1997-2003 Olivier Lapicque\n"
                "\n"
                "Contributors:\n"
-               "Johannes Schultz (2008-2020)\n"
-               "J\xC3\xB6rn Heusipp (2012-2020)\n"
+               "Johannes Schultz (2008-2021)\n"
+               "J\xC3\xB6rn Heusipp (2012-2021)\n"
                "Ahti Lepp\xC3\xA4nen (2005-2011)\n"
                "Robin Fernandes (2004-2007)\n"
                "Sergiy Pylypenko (2007)\n"
@@ -777,7 +777,7 @@
 mpt::ustring GetLicenseString()
 {
        return MPT_UTF8(
-               "Copyright (c) 2004-2020, OpenMPT contributors" "\n"
+               "Copyright (c) 2004-2021, OpenMPT contributors" "\n"
                "Copyright (c) 1997-2003, Olivier Lapicque" "\n"
                "All rights reserved." "\n"
                "" "\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/common/versionNumber.h 
new/libopenmpt-0.5.5+release.autotools/common/versionNumber.h
--- old/libopenmpt-0.5.4+release.autotools/common/versionNumber.h       
2020-11-29 15:51:02.000000000 +0100
+++ new/libopenmpt-0.5.5+release.autotools/common/versionNumber.h       
2021-01-31 14:55:27.000000000 +0100
@@ -17,7 +17,7 @@
 // Version definitions. The only thing that needs to be changed when changing 
version number.
 #define VER_MAJORMAJOR  1
 #define VER_MAJOR      29
-#define VER_MINOR      06
+#define VER_MINOR      07
 #define VER_MINORMINOR 00
 
 OPENMPT_NAMESPACE_END
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libopenmpt-0.5.4+release.autotools/configure 
new/libopenmpt-0.5.5+release.autotools/configure
--- old/libopenmpt-0.5.4+release.autotools/configure    2020-11-29 
16:07:23.000000000 +0100
+++ new/libopenmpt-0.5.5+release.autotools/configure    2021-01-31 
15:18:44.000000000 +0100
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for libopenmpt 0.5.4+release.autotools.
+# Generated by GNU Autoconf 2.69 for libopenmpt 0.5.5+release.autotools.
 #
 # Report bugs to <https://bugs.openmpt.org/>.
 #
@@ -590,8 +590,8 @@
 # Identity of this package.
 PACKAGE_NAME='libopenmpt'
 PACKAGE_TARNAME='libopenmpt'
-PACKAGE_VERSION='0.5.4+release.autotools'
-PACKAGE_STRING='libopenmpt 0.5.4+release.autotools'
+PACKAGE_VERSION='0.5.5+release.autotools'
+PACKAGE_STRING='libopenmpt 0.5.5+release.autotools'
 PACKAGE_BUGREPORT='https://bugs.openmpt.org/'
 PACKAGE_URL='https://lib.openmpt.org/'
 
@@ -1472,7 +1472,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures libopenmpt 0.5.4+release.autotools to adapt to many 
kinds of systems.
+\`configure' configures libopenmpt 0.5.5+release.autotools to adapt to many 
kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1543,7 +1543,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libopenmpt 
0.5.4+release.autotools:";;
+     short | recursive ) echo "Configuration of libopenmpt 
0.5.5+release.autotools:";;
    esac
   cat <<\_ACEOF
 
@@ -1729,7 +1729,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libopenmpt configure 0.5.4+release.autotools
+libopenmpt configure 0.5.5+release.autotools
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2219,7 +2219,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libopenmpt $as_me 0.5.4+release.autotools, which was
+It was created by libopenmpt $as_me 0.5.5+release.autotools, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3090,7 +3090,7 @@
 
 # Define the identity of the package.
  PACKAGE='libopenmpt'
- VERSION='0.5.4+release.autotools'
+ VERSION='0.5.5+release.autotools'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -17251,13 +17251,13 @@
 
 
 
-$as_echo "#define MPT_SVNURL 
\"https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.5.4\""; >>confdefs.h
+$as_echo "#define MPT_SVNURL 
\"https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.5.5\""; >>confdefs.h
 
 
-$as_echo "#define MPT_SVNVERSION \"13932\"" >>confdefs.h
+$as_echo "#define MPT_SVNVERSION \"14111\"" >>confdefs.h
 
 
-$as_echo "#define MPT_SVNDATE \"2020-11-29T15:01:39.790705Z\"" >>confdefs.h
+$as_echo "#define MPT_SVNDATE \"2021-01-31T14:15:03.175335Z\"" >>confdefs.h
 
 
 $as_echo "#define MPT_PACKAGE true" >>confdefs.h
@@ -22522,7 +22522,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libopenmpt $as_me 0.5.4+release.autotools, which was
+This file was extended by libopenmpt $as_me 0.5.5+release.autotools, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -22589,7 +22589,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-libopenmpt config.status 0.5.4+release.autotools
+libopenmpt config.status 0.5.5+release.autotools
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libopenmpt-0.5.4+release.autotools/configure.ac 
new/libopenmpt-0.5.5+release.autotools/configure.ac
--- old/libopenmpt-0.5.4+release.autotools/configure.ac 2020-11-29 
16:07:14.000000000 +0100
+++ new/libopenmpt-0.5.5+release.autotools/configure.ac 2021-01-31 
15:18:32.000000000 +0100
@@ -1,4 +1,4 @@
-AC_INIT([libopenmpt], [0.5.4+release.autotools], [https://bugs.openmpt.org/], 
[libopenmpt], [https://lib.openmpt.org/])
+AC_INIT([libopenmpt], [0.5.5+release.autotools], [https://bugs.openmpt.org/], 
[libopenmpt], [https://lib.openmpt.org/])
 AC_PREREQ([2.68])
 
 AC_CONFIG_MACRO_DIR([m4])
@@ -27,9 +27,9 @@
 AC_SUBST([LIBOPENMPT_LTVER_REVISION])
 AC_SUBST([LIBOPENMPT_LTVER_AGE])
 
-AC_DEFINE([MPT_SVNURL], 
["https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.5.4";], [svn version])
-AC_DEFINE([MPT_SVNVERSION], ["13932"], [svn version])
-AC_DEFINE([MPT_SVNDATE], ["2020-11-29T15:01:39.790705Z"], [svn date])
+AC_DEFINE([MPT_SVNURL], 
["https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.5.5";], [svn version])
+AC_DEFINE([MPT_SVNVERSION], ["14111"], [svn version])
+AC_DEFINE([MPT_SVNDATE], ["2021-01-31T14:15:03.175335Z"], [svn date])
 AC_DEFINE([MPT_PACKAGE], [true], [is package])
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/libopenmpt/bindings/freebasic/libopenmpt.bi
 
new/libopenmpt-0.5.5+release.autotools/libopenmpt/bindings/freebasic/libopenmpt.bi
--- 
old/libopenmpt-0.5.4+release.autotools/libopenmpt/bindings/freebasic/libopenmpt.bi
  2020-01-07 15:44:11.000000000 +0100
+++ 
new/libopenmpt-0.5.5+release.autotools/libopenmpt/bindings/freebasic/libopenmpt.bi
  2020-12-22 17:52:26.000000000 +0100
@@ -981,7 +981,7 @@
   \param module The module handle to work on.
   \param samplerate Sample rate to render output. Should be in [8000,192000], 
but this is not enforced.
   \param count Number of audio frames to render per channel.
-  \param interleaved_quad Pointer to a buffer of at least count*4 elements 
that receives the interleaved suad surround output in the order (L,R,RL,RR).
+  \param interleaved_quad Pointer to a buffer of at least count*4 elements 
that receives the interleaved quad surround output in the order (L,R,RL,RR).
   \return The number of frames actually rendered.
   \retval 0 The end of song has been reached.
   \remarks The output buffers are only written to up to the returned number of 
elements.
@@ -1011,7 +1011,7 @@
   \param module The module handle to work on.
   \param samplerate Sample rate to render output. Should be in [8000,192000], 
but this is not enforced.
   \param count Number of audio frames to render per channel.
-  \param interleaved_quad Pointer to a buffer of at least count*4 elements 
that receives the interleaved suad surround output in the order (L,R,RL,RR).
+  \param interleaved_quad Pointer to a buffer of at least count*4 elements 
that receives the interleaved quad surround output in the order (L,R,RL,RR).
   \return The number of frames actually rendered.
   \retval 0 The end of song has been reached.
   \remarks The output buffers are only written to up to the returned number of 
elements.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/libopenmpt/dox/changelog.md 
new/libopenmpt-0.5.5+release.autotools/libopenmpt/dox/changelog.md
--- old/libopenmpt-0.5.4+release.autotools/libopenmpt/dox/changelog.md  
2020-11-29 16:01:37.000000000 +0100
+++ new/libopenmpt-0.5.5+release.autotools/libopenmpt/dox/changelog.md  
2021-01-31 15:15:00.000000000 +0100
@@ -5,6 +5,27 @@
 For fully detailed change log, please see the source repository directly. This
 is just a high-level summary.
 
+### libopenmpt 0.5.5 (2021-01-31)
+
+ *  [**New**] `Makefile` `CONFIG=emscripten` now supports
+    `EMSCRIPTEN_TARGET=audioworkletprocessor` which builds an ES6 module in
+    a single file with reduced dependencies suitable to be used in an
+    AudioWorkletProcessor.
+
+ *  [**Bug**] stb_vorbis: Fix decoding of Vorbis streams without comments which
+    affected most Vorbis samples since stb_vorbis v1.20.
+
+ *  `openmpt::ext::interactive::set_pitch_factor` wasn't applied to OPL voices.
+ *  OPL channel state (in particular current patch) is now updated when 
seeking.
+ *  The FT2 tremolo quirk is now also applied to MOD files. FT2 just copied the
+    quirky code from ProTracker!
+ *  DMF: Preserve effects better in some situations where there is more than 
one
+    effect in a pattern cell.
+ *  DMF: Improve import of finetune effect with parameters larger than +/-15.
+
+ *  mpg123: Update to v1.26.4 (2020-12-24).
+ *  pugixml: Update to v1.11.4 (2020-12-22).
+
 ### libopenmpt 0.5.4 (2020-11-29)
 
  *  AMS: An upper bound for uncompressed sample size is now established to
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/libopenmpt/libopenmpt.h 
new/libopenmpt-0.5.5+release.autotools/libopenmpt/libopenmpt.h
--- old/libopenmpt-0.5.4+release.autotools/libopenmpt/libopenmpt.h      
2020-01-07 16:18:52.000000000 +0100
+++ new/libopenmpt-0.5.5+release.autotools/libopenmpt/libopenmpt.h      
2020-12-22 17:52:26.000000000 +0100
@@ -1071,7 +1071,7 @@
  * \param mod The module handle to work on.
  * \param samplerate Sample rate to render output. Should be in [8000,192000], 
but this is not enforced.
  * \param count Number of audio frames to render per channel.
- * \param interleaved_quad Pointer to a buffer of at least count*4 elements 
that receives the interleaved suad surround output in the order (L,R,RL,RR).
+ * \param interleaved_quad Pointer to a buffer of at least count*4 elements 
that receives the interleaved quad surround output in the order (L,R,RL,RR).
  * \return The number of frames actually rendered.
  * \retval 0 The end of song has been reached.
  * \remarks The output buffers are only written to up to the returned number 
of elements.
@@ -1099,7 +1099,7 @@
  * \param mod The module handle to work on.
  * \param samplerate Sample rate to render output. Should be in [8000,192000], 
but this is not enforced.
  * \param count Number of audio frames to render per channel.
- * \param interleaved_quad Pointer to a buffer of at least count*4 elements 
that receives the interleaved suad surround output in the order (L,R,RL,RR).
+ * \param interleaved_quad Pointer to a buffer of at least count*4 elements 
that receives the interleaved quad surround output in the order (L,R,RL,RR).
  * \return The number of frames actually rendered.
  * \retval 0 The end of song has been reached.
  * \remarks The output buffers are only written to up to the returned number 
of elements.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/libopenmpt/libopenmpt.hpp 
new/libopenmpt-0.5.5+release.autotools/libopenmpt/libopenmpt.hpp
--- old/libopenmpt-0.5.4+release.autotools/libopenmpt/libopenmpt.hpp    
2020-01-07 15:44:11.000000000 +0100
+++ new/libopenmpt-0.5.5+release.autotools/libopenmpt/libopenmpt.hpp    
2021-01-06 16:13:14.000000000 +0100
@@ -750,7 +750,7 @@
        /*!
          \param samplerate Sample rate to render output. Should be in 
[8000,192000], but this is not enforced.
          \param count Number of audio frames to render per channel.
-         \param interleaved_quad Pointer to a buffer of at least count*4 
elements that receives the interleaved suad surround output in the order 
(L,R,RL,RR).
+         \param interleaved_quad Pointer to a buffer of at least count*4 
elements that receives the interleaved quad surround output in the order 
(L,R,RL,RR).
          \return The number of frames actually rendered.
          \retval 0 The end of song has been reached.
          \remarks The output buffers are only written to up to the returned 
number of elements.
@@ -776,7 +776,7 @@
        /*!
          \param samplerate Sample rate to render output. Should be in 
[8000,192000], but this is not enforced.
          \param count Number of audio frames to render per channel.
-         \param interleaved_quad Pointer to a buffer of at least count*4 
elements that receives the interleaved suad surround output in the order 
(L,R,RL,RR).
+         \param interleaved_quad Pointer to a buffer of at least count*4 
elements that receives the interleaved quad surround output in the order 
(L,R,RL,RR).
          \return The number of frames actually rendered.
          \retval 0 The end of song has been reached.
          \remarks The output buffers are only written to up to the returned 
number of elements.
@@ -1119,7 +1119,7 @@
          \param value The value that should be set.
          \throws openmpt::exception Throws an exception derived from 
openmpt::exception in case the value is not sensible (e.g. negative tempo 
factor) or under the circumstances outlined in openmpt::module::get_ctls.
          \sa openmpt::module::get_ctls
-         \deprecated Please use openmpt::module::ctl_set_bool(), 
openmpt::module::ctl_set_int(), openmpt::module::ctl_set_float(), or 
openmpt::module::ctl_set_string().
+         \deprecated Please use openmpt::module::ctl_set_bool(), 
openmpt::module::ctl_set_int(), openmpt::module::ctl_set_floatingpoint(), or 
openmpt::module::ctl_set_string().
        */
        LIBOPENMPT_ATTR_DEPRECATED void ctl_set( const std::string & ctl, const 
std::string & value );
        //! Set ctl boolean value
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/libopenmpt/libopenmpt_c.cpp 
new/libopenmpt-0.5.5+release.autotools/libopenmpt/libopenmpt_c.cpp
--- old/libopenmpt-0.5.4+release.autotools/libopenmpt/libopenmpt_c.cpp  
2020-10-22 14:39:17.000000000 +0200
+++ new/libopenmpt-0.5.5+release.autotools/libopenmpt/libopenmpt_c.cpp  
2021-01-10 16:47:53.000000000 +0100
@@ -1734,12 +1734,12 @@
                openmpt::interface::check_pointer( interface );
                std::memset( interface, 0, interface_size );
                int result = 0;
-               if ( !strcmp( interface_id, "" ) ) {
+               if ( !std::strcmp( interface_id, "" ) ) {
                        result = 0;
 
 
 
-               } else if ( !strcmp( interface_id, 
LIBOPENMPT_EXT_C_INTERFACE_PATTERN_VIS ) && ( interface_size == sizeof( 
openmpt_module_ext_interface_pattern_vis ) ) ) {
+               } else if ( !std::strcmp( interface_id, 
LIBOPENMPT_EXT_C_INTERFACE_PATTERN_VIS ) && ( interface_size == sizeof( 
openmpt_module_ext_interface_pattern_vis ) ) ) {
                        openmpt_module_ext_interface_pattern_vis * i = 
static_cast< openmpt_module_ext_interface_pattern_vis * >( interface );
                        i->get_pattern_row_channel_volume_effect_type = 
&get_pattern_row_channel_volume_effect_type;
                        i->get_pattern_row_channel_effect_type = 
&get_pattern_row_channel_effect_type;
@@ -1747,7 +1747,7 @@
 
 
 
-               } else if ( !strcmp( interface_id, 
LIBOPENMPT_EXT_C_INTERFACE_INTERACTIVE ) && ( interface_size == sizeof( 
openmpt_module_ext_interface_interactive ) ) ) {
+               } else if ( !std::strcmp( interface_id, 
LIBOPENMPT_EXT_C_INTERFACE_INTERACTIVE ) && ( interface_size == sizeof( 
openmpt_module_ext_interface_interactive ) ) ) {
                        openmpt_module_ext_interface_interactive * i = 
static_cast< openmpt_module_ext_interface_interactive * >( interface );
                        i->set_current_speed = &set_current_speed;
                        i->set_current_tempo = &set_current_tempo;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/libopenmpt/libopenmpt_impl.cpp 
new/libopenmpt-0.5.5+release.autotools/libopenmpt/libopenmpt_impl.cpp
--- old/libopenmpt-0.5.4+release.autotools/libopenmpt/libopenmpt_impl.cpp       
2020-10-25 14:03:24.000000000 +0100
+++ new/libopenmpt-0.5.5+release.autotools/libopenmpt/libopenmpt_impl.cpp       
2021-01-03 00:13:06.000000000 +0100
@@ -1106,9 +1106,9 @@
        } else {
                subsong = &subsongs[m_current_subsong];
        }
+       m_sndFile->SetCurrentOrder( static_cast<ORDERINDEX>( 
subsong->start_order ) );
        GetLengthType t = m_sndFile->GetLength( m_ctl_seek_sync_samples ? 
eAdjustSamplePositions : eAdjust, GetLengthTarget( seconds ).StartPos( 
static_cast<SEQUENCEINDEX>( subsong->sequence ), static_cast<ORDERINDEX>( 
subsong->start_order ), static_cast<ROWINDEX>( subsong->start_row ) ) ).back();
-       m_sndFile->m_PlayState.m_nCurrentOrder = t.lastOrder;
-       m_sndFile->SetCurrentOrder( t.lastOrder );
+       m_sndFile->m_PlayState.m_nNextOrder = 
m_sndFile->m_PlayState.m_nCurrentOrder = t.lastOrder;
        m_sndFile->m_PlayState.m_nNextRow = t.lastRow;
        m_currentPositionSeconds = base_seconds + t.duration;
        return m_currentPositionSeconds;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/libopenmpt/libopenmpt_version.h 
new/libopenmpt-0.5.5+release.autotools/libopenmpt/libopenmpt_version.h
--- old/libopenmpt-0.5.4+release.autotools/libopenmpt/libopenmpt_version.h      
2020-11-29 16:01:37.000000000 +0100
+++ new/libopenmpt-0.5.5+release.autotools/libopenmpt/libopenmpt_version.h      
2021-01-31 15:15:00.000000000 +0100
@@ -19,7 +19,7 @@
 /*! \brief libopenmpt minor version number */
 #define OPENMPT_API_VERSION_MINOR 5
 /*! \brief libopenmpt patch version number */
-#define OPENMPT_API_VERSION_PATCH 4
+#define OPENMPT_API_VERSION_PATCH 5
 /*! \brief libopenmpt pre-release tag */
 #define OPENMPT_API_VERSION_PREREL ""
 /*! \brief libopenmpt pre-release flag */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/libopenmpt/libopenmpt_version.mk 
new/libopenmpt-0.5.5+release.autotools/libopenmpt/libopenmpt_version.mk
--- old/libopenmpt-0.5.4+release.autotools/libopenmpt/libopenmpt_version.mk     
2020-11-29 16:01:37.000000000 +0100
+++ new/libopenmpt-0.5.5+release.autotools/libopenmpt/libopenmpt_version.mk     
2021-01-31 15:15:00.000000000 +0100
@@ -1,8 +1,8 @@
 LIBOPENMPT_VERSION_MAJOR=0
 LIBOPENMPT_VERSION_MINOR=5
-LIBOPENMPT_VERSION_PATCH=4
+LIBOPENMPT_VERSION_PATCH=5
 LIBOPENMPT_VERSION_PREREL=
 
 LIBOPENMPT_LTVER_CURRENT=2
-LIBOPENMPT_LTVER_REVISION=4
+LIBOPENMPT_LTVER_REVISION=5
 LIBOPENMPT_LTVER_AGE=2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libopenmpt-0.5.4+release.autotools/man/openmpt123.1 
new/libopenmpt-0.5.5+release.autotools/man/openmpt123.1
--- old/libopenmpt-0.5.4+release.autotools/man/openmpt123.1     2020-11-29 
16:07:13.000000000 +0100
+++ new/libopenmpt-0.5.5+release.autotools/man/openmpt123.1     2021-01-31 
15:18:32.000000000 +0100
@@ -1,5 +1,5 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.47.8.
-.TH OPENMPT123 "1" "November 2020" "openmpt123 v0.5.4" "User Commands"
+.TH OPENMPT123 "1" "January 2021" "openmpt123 v0.5.5" "User Commands"
 .SH NAME
 openmpt123 - command line module music player based on libopenmpt
 .SH SYNOPSIS
@@ -163,4 +163,4 @@
 \fB\-\-\fR
 Interpret further arguments as filenames
 .SH COPYRIGHT
-Copyright \(co 2013\-2020 OpenMPT developers <https://lib.openmpt.org/>
+Copyright \(co 2013\-2021 OpenMPT developers <https://lib.openmpt.org/>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/openmpt123/openmpt123.cpp 
new/libopenmpt-0.5.5+release.autotools/openmpt123/openmpt123.cpp
--- old/libopenmpt-0.5.4+release.autotools/openmpt123/openmpt123.cpp    
2020-05-16 15:00:43.000000000 +0200
+++ new/libopenmpt-0.5.5+release.autotools/openmpt123/openmpt123.cpp    
2021-01-01 09:06:03.000000000 +0100
@@ -8,7 +8,7 @@
  */
 
 static const char * const license =
-"Copyright (c) 2004-2020, OpenMPT contributors" "\n"
+"Copyright (c) 2004-2021, OpenMPT contributors" "\n"
 "Copyright (c) 1997-2003, Olivier Lapicque" "\n"
 "All rights reserved." "\n"
 "" "\n"
@@ -459,7 +459,7 @@
 
 static void show_info( std::ostream & log, bool verbose ) {
        log << "openmpt123" << " v" << OPENMPT123_VERSION_STRING << ", 
libopenmpt " << openmpt::string::get( "library_version" ) << " (" << "OpenMPT " 
<< openmpt::string::get( "core_version" ) << ")" << std::endl;
-       log << "Copyright (c) 2013-2020 OpenMPT developers 
<https://lib.openmpt.org/>" << std::endl;
+       log << "Copyright (c) 2013-2021 OpenMPT developers 
<https://lib.openmpt.org/>" << std::endl;
        if ( !verbose ) {
                log << std::endl;
                return;
@@ -536,7 +536,7 @@
 static void show_man_version( textout & log ) {
        log << "openmpt123" << " v" << OPENMPT123_VERSION_STRING << std::endl;
        log << std::endl;
-       log << "Copyright (c) 2013-2020 OpenMPT developers 
<https://lib.openmpt.org/>" << std::endl;
+       log << "Copyright (c) 2013-2021 OpenMPT developers 
<https://lib.openmpt.org/>" << std::endl;
 }
 
 static void show_short_version( textout & log ) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/soundlib/Dlsbank.cpp 
new/libopenmpt-0.5.5+release.autotools/soundlib/Dlsbank.cpp
--- old/libopenmpt-0.5.4+release.autotools/soundlib/Dlsbank.cpp 2020-08-25 
12:42:00.000000000 +0200
+++ new/libopenmpt-0.5.5+release.autotools/soundlib/Dlsbank.cpp 2020-12-25 
19:31:03.000000000 +0100
@@ -1698,6 +1698,7 @@
                        if (usUnityNote > 0x7F) usUnityNote = 60;
                        int steps = (60 + transpose - usUnityNote) * 128 + 
sFineTune;
                        sample.Transpose(steps * (1.0 / (12.0 * 128.0)));
+                       sample.RelativeTone = 0;
 
                        Limit(lVolume, 16, 256);
                        sample.nGlobalVol = (uint8)(lVolume / 4);       // 0-64
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/soundlib/Load_dmf.cpp 
new/libopenmpt-0.5.5+release.autotools/soundlib/Load_dmf.cpp
--- old/libopenmpt-0.5.4+release.autotools/soundlib/Load_dmf.cpp        
2020-11-27 19:17:23.000000000 +0100
+++ new/libopenmpt-0.5.5+release.autotools/soundlib/Load_dmf.cpp        
2021-01-25 20:58:24.000000000 +0100
@@ -630,10 +630,19 @@
 
                                        switch(effect2)
                                        {
-                                       case 1:  // Note Finetune
-                                               effect2 = 
static_cast<ModCommand::COMMAND>(effectParam2 < 128 ? CMD_PORTAMENTOUP : 
CMD_PORTAMENTODOWN);
-                                               if(effectParam2 > 128) 
effectParam2 = 255 - effectParam2 + 1;
-                                               effectParam2 = 0xF0 | 
std::min(uint8(0x0F), effectParam2);  // Well, this is not too accurate...
+                                       case 1:  // Note Finetune (1/16th of a 
semitone signed 8-bit value, not 1/128th as the interface claims)
+                                               effect2 = (effectParam2 < 128) 
? CMD_PORTAMENTOUP : CMD_PORTAMENTODOWN;
+                                               if(effectParam2 >= 128)
+                                                       effectParam2 = 
~effectParam2 + 1;
+                                               if(effectParam2 >= 16 && 
m->IsNote())
+                                               {
+                                                       if(effect2 == 
CMD_PORTAMENTOUP)
+                                                               m->note = 
static_cast<ModCommand::NOTE>(std::min(m->note + effectParam2 / 16, 
static_cast<int>(NOTE_MAX)));
+                                                       else
+                                                               m->note = 
static_cast<ModCommand::NOTE>(std::max(m->note - effectParam2 / 16, 
static_cast<int>(NOTE_MIN)));
+                                                       effectParam2 %= 16u;
+                                               }
+                                               effectParam2 = 0xF0 | 
std::min(uint8(0x0F), effectParam2);
                                                break;
                                        case 2:  // Note Delay (wtf is the 
difference to Sample Delay?)
                                                effectParam2 = 
DMFdelay2MPT(effectParam2, settings.internalTicks);
@@ -654,7 +663,7 @@
                                        case 4:  // Portamento Up
                                        case 5:  // Portamento Down
                                                effectParam2 = 
DMFporta2MPT(effectParam2, settings.internalTicks, true);
-                                               effect2 = 
static_cast<ModCommand::COMMAND>(effect2 == 4 ? CMD_PORTAMENTOUP : 
CMD_PORTAMENTODOWN);
+                                               effect2 = (effect2 == 4) ? 
CMD_PORTAMENTOUP : CMD_PORTAMENTODOWN;
                                                useMem2 = true;
                                                break;
                                        case 6:  // Portamento to Note
@@ -811,6 +820,12 @@
                                // Prefer instrument effects over any other 
effects
                                if(effect1 != CMD_NONE)
                                {
+                                       
ModCommand::TwoRegularCommandsToMPT(effect3, effectParam3, effect1, 
effectParam1);
+                                       if(m->volcmd == VOLCMD_NONE && effect3 
!= VOLCMD_NONE)
+                                       {
+                                               m->volcmd = effect3;
+                                               m->vol = effectParam3;
+                                       }
                                        m->command = effect1;
                                        m->param = effectParam1;
                                } else if(effect3 != CMD_NONE)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/soundlib/Load_mod.cpp 
new/libopenmpt-0.5.5+release.autotools/soundlib/Load_mod.cpp
--- old/libopenmpt-0.5.4+release.autotools/soundlib/Load_mod.cpp        
2020-10-25 16:14:57.000000000 +0100
+++ new/libopenmpt-0.5.5+release.autotools/soundlib/Load_mod.cpp        
2021-01-04 19:04:45.000000000 +0100
@@ -1160,6 +1160,10 @@
        {
                m_SongFlags.set(SONG_ISAMIGA);
        }
+       if(isGenericMultiChannel || isMdKd)
+       {
+               m_playBehaviour.set(kFT2MODTremoloRampWaveform);
+       }
        if(isInconexia)
        {
                m_playBehaviour.set(kMODIgnorePanning);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/soundlib/SampleFormats.cpp 
new/libopenmpt-0.5.5+release.autotools/soundlib/SampleFormats.cpp
--- old/libopenmpt-0.5.4+release.autotools/soundlib/SampleFormats.cpp   
2020-08-03 20:26:20.000000000 +0200
+++ new/libopenmpt-0.5.5+release.autotools/soundlib/SampleFormats.cpp   
2021-01-26 23:07:05.000000000 +0100
@@ -20,6 +20,7 @@
 #include "../common/mptFileIO.h"
 #endif // !MODPLUG_NO_FILESAVE
 #include "../common/misc_util.h"
+#include "../common/Endianness.h"
 #include "Tagging.h"
 #include "ITTools.h"
 #include "XMTools.h"
@@ -2486,6 +2487,7 @@
                idVHDR  = MagicBE("VHDR"),
                idBODY  = MagicBE("BODY"),
                idNAME  = MagicBE("NAME"),
+               idCHAN = MagicBE("CHAN"),
        };
 
        uint32be id;            // See ChunkIdentifiers
@@ -2538,6 +2540,7 @@
 
        FileReader vhdrChunk = chunks.GetChunk(IFFChunk::idVHDR);
        FileReader bodyChunk = chunks.GetChunk(IFFChunk::idBODY);
+       FileReader chanChunk = chunks.GetChunk(IFFChunk::idCHAN);
        IFFSampleHeader sampleHeader;
        if(!bodyChunk.IsValid()
                || !vhdrChunk.IsValid()
@@ -2549,6 +2552,7 @@
        DestroySampleThreadsafe(nSample);
        // Default values
        const uint8 bytesPerSample = memcmp(fileHeader.magic, "8SVX", 4) ? 2 : 
1;
+       const uint8 channels = chanChunk.ReadUint32BE() == 6 ? 2 : 1;
        ModSample &sample = Samples[nSample];
        sample.Initialize();
        sample.nLoopStart = sampleHeader.oneShotHiSamples / bytesPerSample;
@@ -2569,13 +2573,13 @@
                m_szNames[nSample] = "";
        }
 
-       sample.nLength = mpt::saturate_cast<SmpLength>(bodyChunk.GetLength() / 
bytesPerSample);
+       sample.nLength = mpt::saturate_cast<SmpLength>(bodyChunk.GetLength() / 
(bytesPerSample * channels));
        if((sample.nLoopStart + 4 < sample.nLoopEnd) && (sample.nLoopEnd <= 
sample.nLength)) sample.uFlags.set(CHN_LOOP);
 
        // While this is an Amiga format, the 16SV version appears to be only 
used on PC, and only with little-endian sample data.
        SampleIO(
                (bytesPerSample == 2) ? SampleIO::_16bit : SampleIO::_8bit,
-               SampleIO::mono,
+               (channels == 2) ? SampleIO::stereoSplit : SampleIO::mono,
                SampleIO::littleEndian,
                SampleIO::signedPCM)
                .ReadSample(sample, bodyChunk);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/soundlib/Snd_defs.h 
new/libopenmpt-0.5.5+release.autotools/soundlib/Snd_defs.h
--- old/libopenmpt-0.5.4+release.autotools/soundlib/Snd_defs.h  2020-07-25 
23:45:26.000000000 +0200
+++ new/libopenmpt-0.5.5+release.autotools/soundlib/Snd_defs.h  2021-01-04 
19:04:45.000000000 +0100
@@ -512,7 +512,7 @@
        kFT2NoteOffFlags,               // Set and reset the correct 
fade/key-off flags with note-off and instrument number after note-off
        kITMultiSampleInstrumentNumber, // After portamento to different sample 
within multi-sampled instrument, lone instrument numbers in patterns always 
recall the new sample's default settings
        kRowDelayWithNoteDelay,         // Retrigger note delays on every 
reptition of a row
-       kFT2TremoloRampWaveform,        // FT2-compatible tremolo ramp down / 
triangle waveform
+       kFT2MODTremoloRampWaveform,     // FT2-/ProTracker-compatible tremolo 
ramp down / triangle waveform
        kFT2PortaUpDownMemory,          // Portamento up and down have separate 
memory
 
        kMODOutOfRangeNoteDelay,        // ProTracker behaviour for 
out-of-range note delays
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/soundlib/Snd_fx.cpp 
new/libopenmpt-0.5.5+release.autotools/soundlib/Snd_fx.cpp
--- old/libopenmpt-0.5.4+release.autotools/soundlib/Snd_fx.cpp  2020-11-14 
14:49:06.000000000 +0100
+++ new/libopenmpt-0.5.5+release.autotools/soundlib/Snd_fx.cpp  2021-01-02 
23:31:56.000000000 +0100
@@ -154,6 +154,9 @@
                        int vol = 0;
                        sndFile.ProcessInstrumentFade(chn, vol);
 
+                       if(chn.dwFlags[CHN_ADLIB])
+                               continue;
+
                        if(updateInc || chnSettings[channel].incChanged)
                        {
                                if(chn.m_CalculateFreq || 
chn.m_ReCalculateFreqOnFirstTick)
@@ -568,11 +571,6 @@
                                {
                                        if(Samples[smp].uFlags[CHN_PANNING])
                                                
chn.SetInstrumentPan(Samples[smp].nPan, *this);
-                                       if(Samples[smp].uFlags[CHN_ADLIB])
-                                       {
-                                               memory.state->Chn[nChn].Stop();
-                                               
memory.chnSettings[nChn].ticksToRender = 0;
-                                       }
                                }
                        }
 
@@ -1301,18 +1299,25 @@
                        m_PlayState.m_nFrameDelay = m_PlayState.m_nPatternDelay 
= 0;
                        m_PlayState.m_nTickCount = 
Util::MaxValueOfType(m_PlayState.m_nTickCount) - 1;
                        m_PlayState.m_bPositionChanged = true;
+                       if(m_opl != nullptr)
+                               m_opl->Reset();
                        for(CHANNELINDEX n = 0; n < GetNumChannels(); n++)
                        {
-                               if(m_PlayState.Chn[n].nLastNote != NOTE_NONE)
+                               auto &chn = m_PlayState.Chn[n];
+                               if(chn.nLastNote != NOTE_NONE)
                                {
-                                       m_PlayState.Chn[n].nNewNote = 
m_PlayState.Chn[n].nLastNote;
+                                       chn.nNewNote = chn.nLastNote;
                                }
                                if(memory.chnSettings[n].vol != 0xFF && 
!adjustSamplePos)
                                {
-                                       m_PlayState.Chn[n].nVolume = 
std::min(memory.chnSettings[n].vol, uint8(64)) * 4;
+                                       chn.nVolume = 
std::min(memory.chnSettings[n].vol, uint8(64)) * 4;
+                               }
+                               if(chn.pModSample != nullptr && 
chn.pModSample->uFlags[CHN_ADLIB] && m_opl)
+                               {
+                                       m_opl->Patch(n, chn.pModSample->adlib);
+                                       m_opl->NoteCut(n);
                                }
                        }
-                       if(m_opl != nullptr) m_opl->Reset();
 
 #ifndef NO_PLUGINS
                        // If there were any PC events, update plugin 
parameters to their latest value.
@@ -1694,7 +1699,7 @@
                chn.nFineTune = pSmp->nFineTune;
        }
 
-       chn.nTranspose = pSmp->RelativeTone;
+       chn.nTranspose = UseFinetuneAndTranspose() ? pSmp->RelativeTone : 0;
 
        // FT2 compatibility: Don't reset portamento target with new instrument 
numbers.
        // Test case: Porta-Pickup.xm
@@ -4984,6 +4989,7 @@
                        // MIDI channel
                        isNibble = true;
                        data = 0xFF;
+#ifndef NO_PLUGINS
                        const PLUGINDEX plug = (plugin != 0) ? plugin : 
GetBestPlugin(nChn, PrioritiseChannel, EvenIfMuted);
                        if(plug > 0 && plug <= MAX_MIXPLUGINS)
                        {
@@ -4991,6 +4997,7 @@
                                if(midiPlug)
                                        data = midiPlug->GetMidiChannel(nChn);
                        }
+#endif // NO_PLUGINS
                        if(data == 0xFF)
                        {
                                // Fallback if no plugin was found
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/soundlib/Sndfile.cpp 
new/libopenmpt-0.5.5+release.autotools/soundlib/Sndfile.cpp
--- old/libopenmpt-0.5.4+release.autotools/soundlib/Sndfile.cpp 2020-07-25 
23:01:44.000000000 +0200
+++ new/libopenmpt-0.5.5+release.autotools/soundlib/Sndfile.cpp 2021-01-04 
19:04:45.000000000 +0100
@@ -1085,7 +1085,7 @@
                playBehaviour.set(kFT2FinetunePrecision);
                playBehaviour.set(kFT2NoteOffFlags);
                playBehaviour.set(kRowDelayWithNoteDelay);
-               playBehaviour.set(kFT2TremoloRampWaveform);
+               playBehaviour.set(kFT2MODTremoloRampWaveform);
                playBehaviour.set(kFT2PortaUpDownMemory);
                playBehaviour.set(kFT2PanSustainRelease);
                playBehaviour.set(kFT2NoteDelayWithoutInstr);
@@ -1116,6 +1116,7 @@
                playBehaviour.set(kMODOutOfRangeNoteDelay);
                playBehaviour.set(kMODTempoOnSecondTick);
                playBehaviour.set(kRowDelayWithNoteDelay);
+               playBehaviour.set(kFT2MODTremoloRampWaveform);
                break;
 
        default:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/soundlib/Sndmix.cpp 
new/libopenmpt-0.5.5+release.autotools/soundlib/Sndmix.cpp
--- old/libopenmpt-0.5.4+release.autotools/soundlib/Sndmix.cpp  2020-10-19 
23:03:54.000000000 +0200
+++ new/libopenmpt-0.5.5+release.autotools/soundlib/Sndmix.cpp  2021-01-07 
20:56:47.000000000 +0100
@@ -889,7 +889,7 @@
                        const uint8 attenuation = ((GetType() & (MOD_TYPE_XM | 
MOD_TYPE_MOD)) || m_playBehaviour[kITVibratoTremoloPanbrello]) ? 5 : 6;
 
                        int delta = GetVibratoDelta(chn.nTremoloType, 
chn.nTremoloPos);
-                       if((chn.nTremoloType & 0x03) == 1 && 
m_playBehaviour[kFT2TremoloRampWaveform])
+                       if((chn.nTremoloType & 0x03) == 1 && 
m_playBehaviour[kFT2MODTremoloRampWaveform])
                        {
                                // FT2 compatibility: Tremolo ramp down / 
triangle implementation is weird and affected by vibrato position (copypaste 
bug)
                                // Test case: TremoloWaveforms.xm, 
TremoloVibrato.xm
@@ -2295,7 +2295,10 @@
                                        // In ST3, a sample rate of 8363 Hz is 
mapped to middle-C, which is 261.625 Hz in a tempered scale at A4 = 440.
                                        // Hence, we have to translate our 
"sample rate" into pitch.
                                        const auto freq = hasTuning ? 
chn.nPeriod : GetFreqFromPeriod(period, chn.nC5Speed, nPeriodFrac);
-                                       const auto milliHertz = 
Util::muldivr_unsigned(freq, 261625, 8363 << FREQ_FRACBITS);
+                                       auto milliHertz = 
Util::muldivr_unsigned(freq, 261625, 8363 << FREQ_FRACBITS);
+#ifndef MODPLUG_TRACKER
+                                       milliHertz = 
Util::muldivr_unsigned(milliHertz, m_nFreqFactor, 65536);
+#endif  // !MODPLUG_TRACKER
                                        const bool keyOff = 
chn.dwFlags[CHN_KEYOFF] || (chn.dwFlags[CHN_NOTEFADE] && chn.nFadeOutVol == 0);
                                        m_opl->Frequency(nChn, milliHertz, 
keyOff, m_playBehaviour[kOPLBeatingOscillators]);
                                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/soundlib/UpgradeModule.cpp 
new/libopenmpt-0.5.5+release.autotools/soundlib/UpgradeModule.cpp
--- old/libopenmpt-0.5.4+release.autotools/soundlib/UpgradeModule.cpp   
2020-07-25 23:45:26.000000000 +0200
+++ new/libopenmpt-0.5.5+release.autotools/soundlib/UpgradeModule.cpp   
2021-01-04 19:04:45.000000000 +0100
@@ -565,7 +565,7 @@
                {
                        { kFT2NoteOffFlags,              MPT_V("1.27.00.27") },
                        { kRowDelayWithNoteDelay,        MPT_V("1.27.00.37") },
-                       { kFT2TremoloRampWaveform,       MPT_V("1.27.00.37") },
+                       { kFT2MODTremoloRampWaveform,    MPT_V("1.27.00.37") },
                        { kFT2PortaUpDownMemory,         MPT_V("1.27.00.37") },
                        { kFT2PanSustainRelease,         MPT_V("1.28.00.09") },
                        { kFT2NoteDelayWithoutInstr,     MPT_V("1.28.00.44") },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/soundlib/modsmp_ctrl.cpp 
new/libopenmpt-0.5.5+release.autotools/soundlib/modsmp_ctrl.cpp
--- old/libopenmpt-0.5.4+release.autotools/soundlib/modsmp_ctrl.cpp     
2019-07-16 22:39:22.000000000 +0200
+++ new/libopenmpt-0.5.5+release.autotools/soundlib/modsmp_ctrl.cpp     
2021-01-04 18:35:23.000000000 +0100
@@ -187,10 +187,9 @@
 
 
 template <class T>
-static void ConvertStereoToMonoOneChannelImpl(T *pDest, const SmpLength length)
+static void ConvertStereoToMonoOneChannelImpl(T *pDest, const T *pSource, 
const SmpLength length)
 {
-       const T *pEnd = pDest + length;
-       for(T *pSource = pDest; pDest != pEnd; pDest++, pSource += 2)
+       for(const T *pEnd = pDest + length; pDest != pEnd; pDest++, pSource += 
2)
        {
                *pDest = *pSource;
        }
@@ -218,9 +217,9 @@
                        conversionMode = onlyLeft;
                }
                if(smp.GetElementarySampleSize() == 2)
-                       ConvertStereoToMonoOneChannelImpl(smp.sample16() + 
(conversionMode == onlyLeft ? 0 : 1), smp.nLength);
+                       ConvertStereoToMonoOneChannelImpl(smp.sample16(), 
smp.sample16() + (conversionMode == onlyLeft ? 0 : 1), smp.nLength);
                else if(smp.GetElementarySampleSize() == 1)
-                       ConvertStereoToMonoOneChannelImpl(smp.sample8() + 
(conversionMode == onlyLeft ? 0 : 1), smp.nLength);
+                       ConvertStereoToMonoOneChannelImpl(smp.sample8(), 
smp.sample8() + (conversionMode == onlyLeft ? 0 : 1), smp.nLength);
                else
                        return false;
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/soundlib/plugins/LFOPlugin.cpp 
new/libopenmpt-0.5.5+release.autotools/soundlib/plugins/LFOPlugin.cpp
--- old/libopenmpt-0.5.4+release.autotools/soundlib/plugins/LFOPlugin.cpp       
2019-12-24 10:29:44.000000000 +0100
+++ new/libopenmpt-0.5.5+release.autotools/soundlib/plugins/LFOPlugin.cpp       
2020-12-18 23:51:02.000000000 +0100
@@ -276,7 +276,7 @@
 }
 
 
-bool LFOPlugin::IsNotePlaying(uint32 note, CHANNELINDEX trackerChn)
+bool LFOPlugin::IsNotePlaying(uint8 note, CHANNELINDEX trackerChn)
 {
        if(IMixPlugin *plugin = GetOutputPlugin())
                return plugin->IsNotePlaying(note, trackerChn);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/soundlib/plugins/LFOPlugin.h 
new/libopenmpt-0.5.5+release.autotools/soundlib/plugins/LFOPlugin.h
--- old/libopenmpt-0.5.4+release.autotools/soundlib/plugins/LFOPlugin.h 
2020-04-20 22:09:04.000000000 +0200
+++ new/libopenmpt-0.5.5+release.autotools/soundlib/plugins/LFOPlugin.h 
2020-12-18 23:51:02.000000000 +0100
@@ -91,7 +91,7 @@
        void MidiVibrato(int32 depth, int8 pwd, CHANNELINDEX trackChannel) 
override;
        void MidiCommand(const ModInstrument &instr, uint16 note, uint16 vol, 
CHANNELINDEX trackChannel) override;
        void HardAllNotesOff() override;
-       bool IsNotePlaying(uint32 note, CHANNELINDEX trackerChn) override;
+       bool IsNotePlaying(uint8 note, CHANNELINDEX trackerChn) override;
 
        int32 GetNumPrograms() const override { return 0; }
        int32 GetCurrentProgram() override { return 0; }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/soundlib/plugins/PlugInterface.cpp 
new/libopenmpt-0.5.5+release.autotools/soundlib/plugins/PlugInterface.cpp
--- old/libopenmpt-0.5.4+release.autotools/soundlib/plugins/PlugInterface.cpp   
2020-11-14 14:49:06.000000000 +0100
+++ new/libopenmpt-0.5.5+release.autotools/soundlib/plugins/PlugInterface.cpp   
2020-12-18 23:51:02.000000000 +0100
@@ -947,8 +947,11 @@
 }
 
 
-bool IMidiPlugin::IsNotePlaying(uint32 note, CHANNELINDEX trackerChn)
+bool IMidiPlugin::IsNotePlaying(uint8 note, CHANNELINDEX trackerChn)
 {
+       if(!ModCommand::IsNote(note) || trackerChn >= 
std::size(m_MidiCh[GetMidiChannel(trackerChn)].noteOnMap[note]))
+               return false;
+
        note -= NOTE_MIN;
        return 
(m_MidiCh[GetMidiChannel(trackerChn)].noteOnMap[note][trackerChn] != 0);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/soundlib/plugins/PlugInterface.h 
new/libopenmpt-0.5.5+release.autotools/soundlib/plugins/PlugInterface.h
--- old/libopenmpt-0.5.4+release.autotools/soundlib/plugins/PlugInterface.h     
2020-11-06 20:50:14.000000000 +0100
+++ new/libopenmpt-0.5.5+release.autotools/soundlib/plugins/PlugInterface.h     
2020-12-18 23:51:02.000000000 +0100
@@ -147,7 +147,7 @@
        virtual void MidiVibrato(int32 /*depth*/, int8 /*pwd*/, CHANNELINDEX 
/*trackerChn*/) { }
        virtual void MidiCommand(const ModInstrument &/*instr*/, uint16 
/*note*/, uint16 /*vol*/, CHANNELINDEX /*trackChannel*/) { }
        virtual void HardAllNotesOff() { }
-       virtual bool IsNotePlaying(uint32 /*note*/, CHANNELINDEX 
/*trackerChn*/) { return false; }
+       virtual bool IsNotePlaying(uint8 /*note*/, CHANNELINDEX /*trackerChn*/) 
{ return false; }
 
        // Modify parameter by given amount. Only needs to be re-implemented if 
plugin architecture allows this to be performed atomically.
        virtual void ModifyParameter(PlugParamIndex nIndex, PlugParamValue 
diff);
@@ -264,7 +264,7 @@
        void MidiPitchBend(int32 increment, int8 pwd, CHANNELINDEX trackerChn) 
override;
        void MidiVibrato(int32 depth, int8 pwd, CHANNELINDEX trackerChn) 
override;
        void MidiCommand(const ModInstrument &instr, uint16 note, uint16 vol, 
CHANNELINDEX trackChannel) override;
-       bool IsNotePlaying(uint32 note, CHANNELINDEX trackerChn) override;
+       bool IsNotePlaying(uint8 note, CHANNELINDEX trackerChn) override;
 
        // Get the MIDI channel currently associated with a given tracker 
channel
        virtual uint8 GetMidiChannel(CHANNELINDEX trackChannel) const;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libopenmpt-0.5.4+release.autotools/soundlib/tuning.cpp 
new/libopenmpt-0.5.5+release.autotools/soundlib/tuning.cpp
--- old/libopenmpt-0.5.4+release.autotools/soundlib/tuning.cpp  2019-12-26 
10:00:25.000000000 +0100
+++ new/libopenmpt-0.5.5+release.autotools/soundlib/tuning.cpp  2020-12-22 
19:42:13.000000000 +0100
@@ -234,12 +234,13 @@
 
 void CTuning::SetNoteName(const NOTEINDEXTYPE &n, const mpt::ustring &str)
 {
+       const NOTEINDEXTYPE pos = (GetGroupSize() < 1) ? n : 
static_cast<NOTEINDEXTYPE>(mpt::wrapping_modulo(n, m_GroupSize));
        if(!str.empty())
        {
-               m_NoteNameMap[n] = str;
+               m_NoteNameMap[pos] = str;
        } else
        {
-               const auto iter = m_NoteNameMap.find(n);
+               const auto iter = m_NoteNameMap.find(pos);
                if(iter != m_NoteNameMap.end())
                {
                        m_NoteNameMap.erase(iter);

Reply via email to