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 <[email protected]> + +- 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);
