Hello community, here is the log from the commit of package libopenmpt for openSUSE:Factory checked in at 2020-04-15 19:53:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libopenmpt (Old) and /work/SRC/openSUSE:Factory/.libopenmpt.new.2738 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libopenmpt" Wed Apr 15 19:53:05 2020 rev:24 rq:793695 version:0.4.12 Changes: -------- --- /work/SRC/openSUSE:Factory/libopenmpt/libopenmpt.changes 2020-02-03 11:12:13.981812019 +0100 +++ /work/SRC/openSUSE:Factory/.libopenmpt.new.2738/libopenmpt.changes 2020-04-15 19:53:07.269561828 +0200 @@ -1,0 +2,12 @@ +Mon Apr 13 21:59:44 UTC 2020 - Mia Herkt <[email protected]> + +- Update to 0.4.12: + * IT: Vibrato was too fast in Old Effects mode since + libopenmpt 0.3. + * XM: Treat 8bitbubsy’s FT2 clone exactly like Fasttracker 2 with + respect to compatibility and playback flags. For example, + FT2 Pan Law was not applied. + * DMF: Some files had a wrong tempo since + libopenmpt 0.2.5705-beta15. + +------------------------------------------------------------------- Old: ---- libopenmpt-0.4.11+release.autotools.tar.gz New: ---- libopenmpt-0.4.12+release.autotools.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libopenmpt.spec ++++++ --- /var/tmp/diff_new_pack.CDd8Mi/_old 2020-04-15 19:53:08.641562447 +0200 +++ /var/tmp/diff_new_pack.CDd8Mi/_new 2020-04-15 19:53:08.645562448 +0200 @@ -20,7 +20,7 @@ %define libopenmpt libopenmpt0 %define libopenmpt_modplug libopenmpt_modplug1 Name: libopenmpt -Version: 0.4.11 +Version: 0.4.12 Release: 0 Summary: C++ and C library to decode tracker music files License: BSD-3-Clause ++++++ libopenmpt-0.4.11+release.autotools.tar.gz -> libopenmpt-0.4.12+release.autotools.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.4.11+release.autotools/LICENSE new/libopenmpt-0.4.12+release.autotools/LICENSE --- old/libopenmpt-0.4.11+release.autotools/LICENSE 2019-01-01 10:10:16.000000000 +0100 +++ new/libopenmpt-0.4.12+release.autotools/LICENSE 2020-01-01 09:49:37.000000000 +0100 @@ -1,4 +1,4 @@ -Copyright (c) 2004-2019, OpenMPT contributors +Copyright (c) 2004-2020, OpenMPT contributors Copyright (c) 1997-2003, Olivier Lapicque All rights reserved. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.4.11+release.autotools/common/mptFileIO.h new/libopenmpt-0.4.12+release.autotools/common/mptFileIO.h --- old/libopenmpt-0.4.11+release.autotools/common/mptFileIO.h 2018-12-22 11:22:35.000000000 +0100 +++ new/libopenmpt-0.4.12+release.autotools/common/mptFileIO.h 2020-03-15 19:25:13.000000000 +0100 @@ -181,7 +181,7 @@ private: FlushMode m_FlushMode; #if MPT_COMPILER_MSVC - FILE *m_f; + FILE *m_f = nullptr; #endif // MPT_COMPILER_MSVC mpt::ofstream m_s; #if MPT_COMPILER_MSVC @@ -198,6 +198,8 @@ , m_s(filename, mode) #endif // MPT_COMPILER_MSVC { + if(!stream().is_open()) + stream().setstate(mpt::ofstream::failbit); } mpt::ofstream& stream() { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.4.11+release.autotools/common/mptUUID.h new/libopenmpt-0.4.12+release.autotools/common/mptUUID.h --- old/libopenmpt-0.4.11+release.autotools/common/mptUUID.h 2018-07-16 14:07:14.000000000 +0200 +++ new/libopenmpt-0.4.12+release.autotools/common/mptUUID.h 2020-02-11 14:03:19.000000000 +0100 @@ -15,6 +15,8 @@ #include "Endianness.h" +#include <stdexcept> + #if MPT_OS_WINDOWS #if defined(MODPLUG_TRACKER) || !defined(NO_DMO) #include <guiddef.h> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.4.11+release.autotools/common/version.cpp new/libopenmpt-0.4.12+release.autotools/common/version.cpp --- old/libopenmpt-0.4.11+release.autotools/common/version.cpp 2019-01-01 10:10:16.000000000 +0100 +++ new/libopenmpt-0.4.12+release.autotools/common/version.cpp 2020-01-01 09:49:37.000000000 +0100 @@ -595,12 +595,12 @@ "libopenmpt (based on OpenMPT / ModPlug Tracker)\n" #endif "\n" - "Copyright \xC2\xA9 2004-2019 Contributors\n" + "Copyright \xC2\xA9 2004-2020 Contributors\n" "Copyright \xC2\xA9 1997-2003 Olivier Lapicque\n" "\n" "Contributors:\n" - "Johannes Schultz (2008-2019)\n" - "J\xC3\xB6rn Heusipp (2012-2019)\n" + "Johannes Schultz (2008-2020)\n" + "J\xC3\xB6rn Heusipp (2012-2020)\n" "Ahti Lepp\xC3\xA4nen (2005-2011)\n" "Robin Fernandes (2004-2007)\n" "Sergiy Pylypenko (2007)\n" @@ -785,7 +785,7 @@ mpt::ustring GetLicenseString() { return MPT_UTF8( - "Copyright (c) 2004-2019, OpenMPT contributors" "\n" + "Copyright (c) 2004-2020, 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.4.11+release.autotools/common/versionNumber.h new/libopenmpt-0.4.12+release.autotools/common/versionNumber.h --- old/libopenmpt-0.4.11+release.autotools/common/versionNumber.h 2019-12-22 17:14:06.000000000 +0100 +++ new/libopenmpt-0.4.12+release.autotools/common/versionNumber.h 2020-04-13 15:02:52.000000000 +0200 @@ -20,7 +20,7 @@ //Version definitions. The only thing that needs to be changed when changing version number. #define VER_MAJORMAJOR 1 #define VER_MAJOR 28 -#define VER_MINOR 09 +#define VER_MINOR 10 #define VER_MINORMINOR 00 //Numerical value of the version. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.4.11+release.autotools/configure new/libopenmpt-0.4.12+release.autotools/configure --- old/libopenmpt-0.4.11+release.autotools/configure 2019-12-22 20:21:08.000000000 +0100 +++ new/libopenmpt-0.4.12+release.autotools/configure 2020-04-13 15:44:56.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for libopenmpt 0.4.11+release.autotools. +# Generated by GNU Autoconf 2.69 for libopenmpt 0.4.12+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.4.11+release.autotools' -PACKAGE_STRING='libopenmpt 0.4.11+release.autotools' +PACKAGE_VERSION='0.4.12+release.autotools' +PACKAGE_STRING='libopenmpt 0.4.12+release.autotools' PACKAGE_BUGREPORT='https://bugs.openmpt.org/' PACKAGE_URL='https://lib.openmpt.org/' @@ -1485,7 +1485,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.4.11+release.autotools to adapt to many kinds of systems. +\`configure' configures libopenmpt 0.4.12+release.autotools to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1556,7 +1556,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libopenmpt 0.4.11+release.autotools:";; + short | recursive ) echo "Configuration of libopenmpt 0.4.12+release.autotools:";; esac cat <<\_ACEOF @@ -1756,7 +1756,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libopenmpt configure 0.4.11+release.autotools +libopenmpt configure 0.4.12+release.autotools generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2246,7 +2246,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.4.11+release.autotools, which was +It was created by libopenmpt $as_me 0.4.12+release.autotools, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3117,7 +3117,7 @@ # Define the identity of the package. PACKAGE='libopenmpt' - VERSION='0.4.11+release.autotools' + VERSION='0.4.12+release.autotools' cat >>confdefs.h <<_ACEOF @@ -17281,13 +17281,13 @@ -$as_echo "#define MPT_SVNURL \"https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.4.11\"" >>confdefs.h +$as_echo "#define MPT_SVNURL \"https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.4.12\"" >>confdefs.h -$as_echo "#define MPT_SVNVERSION \"12392\"" >>confdefs.h +$as_echo "#define MPT_SVNVERSION \"12633\"" >>confdefs.h -$as_echo "#define MPT_SVNDATE \"2019-12-22T19:09:25.374363Z\"" >>confdefs.h +$as_echo "#define MPT_SVNDATE \"2020-04-13T13:25:04.191224Z\"" >>confdefs.h $as_echo "#define MPT_PACKAGE true" >>confdefs.h @@ -23527,7 +23527,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.4.11+release.autotools, which was +This file was extended by libopenmpt $as_me 0.4.12+release.autotools, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -23594,7 +23594,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.4.11+release.autotools +libopenmpt config.status 0.4.12+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.4.11+release.autotools/configure.ac new/libopenmpt-0.4.12+release.autotools/configure.ac --- old/libopenmpt-0.4.11+release.autotools/configure.ac 2019-12-22 20:20:58.000000000 +0100 +++ new/libopenmpt-0.4.12+release.autotools/configure.ac 2020-04-13 15:44:47.000000000 +0200 @@ -1,4 +1,4 @@ -AC_INIT([libopenmpt], [0.4.11+release.autotools], [https://bugs.openmpt.org/], [libopenmpt], [https://lib.openmpt.org/]) +AC_INIT([libopenmpt], [0.4.12+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.4.11"], [svn version]) -AC_DEFINE([MPT_SVNVERSION], ["12392"], [svn version]) -AC_DEFINE([MPT_SVNDATE], ["2019-12-22T19:09:25.374363Z"], [svn date]) +AC_DEFINE([MPT_SVNURL], ["https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.4.12"], [svn version]) +AC_DEFINE([MPT_SVNVERSION], ["12633"], [svn version]) +AC_DEFINE([MPT_SVNDATE], ["2020-04-13T13:25:04.191224Z"], [svn date]) AC_DEFINE([MPT_PACKAGE], [true], [is package]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.4.11+release.autotools/libopenmpt/dox/changelog.md new/libopenmpt-0.4.12+release.autotools/libopenmpt/dox/changelog.md --- old/libopenmpt-0.4.11+release.autotools/libopenmpt/dox/changelog.md 2019-12-22 20:09:19.000000000 +0100 +++ new/libopenmpt-0.4.12+release.autotools/libopenmpt/dox/changelog.md 2020-04-13 15:25:01.000000000 +0200 @@ -5,6 +5,13 @@ For fully detailed change log, please see the source repository directly. This is just a high-level summary. +### libopenmpt 0.4.12 (2020-04-13) + + * IT: Vibrato was too fast in Old Effects mode since libopenmpt 0.3. + * XM: Treat 8bitbubsy's FT2 clone exactly like Fasttracker 2 with respect to + compatibility and playback flags. For example, FT2 Pan Law was not applied. + * DMF: Some files had a wrong tempo since libopenmpt 0.2.5705-beta15. + ### libopenmpt 0.4.11 (2019-12-22) * MOD: Fix initial instrument change with no note playing. Fixes first pattern diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.4.11+release.autotools/libopenmpt/libopenmpt_c.cpp new/libopenmpt-0.4.12+release.autotools/libopenmpt/libopenmpt_c.cpp --- old/libopenmpt-0.4.11+release.autotools/libopenmpt/libopenmpt_c.cpp 2018-07-05 14:36:28.000000000 +0200 +++ new/libopenmpt-0.4.12+release.autotools/libopenmpt/libopenmpt_c.cpp 2020-01-07 16:33:04.000000000 +0100 @@ -924,7 +924,7 @@ return NULL; } -LIBOPENMPT_API int32_t openmpt_module_get_current_speed( openmpt_module * mod ) { +int32_t openmpt_module_get_current_speed( openmpt_module * mod ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_current_speed(); @@ -933,7 +933,7 @@ } return 0; } -LIBOPENMPT_API int32_t openmpt_module_get_current_tempo( openmpt_module * mod ) { +int32_t openmpt_module_get_current_tempo( openmpt_module * mod ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_current_tempo(); @@ -942,7 +942,7 @@ } return 0; } -LIBOPENMPT_API int32_t openmpt_module_get_current_order( openmpt_module * mod ) { +int32_t openmpt_module_get_current_order( openmpt_module * mod ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_current_order(); @@ -951,7 +951,7 @@ } return 0; } -LIBOPENMPT_API int32_t openmpt_module_get_current_pattern( openmpt_module * mod ) { +int32_t openmpt_module_get_current_pattern( openmpt_module * mod ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_current_pattern(); @@ -960,7 +960,7 @@ } return 0; } -LIBOPENMPT_API int32_t openmpt_module_get_current_row( openmpt_module * mod ) { +int32_t openmpt_module_get_current_row( openmpt_module * mod ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_current_row(); @@ -969,7 +969,7 @@ } return 0; } -LIBOPENMPT_API int32_t openmpt_module_get_current_playing_channels( openmpt_module * mod ) { +int32_t openmpt_module_get_current_playing_channels( openmpt_module * mod ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_current_playing_channels(); @@ -979,7 +979,7 @@ return 0; } -LIBOPENMPT_API float openmpt_module_get_current_channel_vu_mono( openmpt_module * mod, int32_t channel ) { +float openmpt_module_get_current_channel_vu_mono( openmpt_module * mod, int32_t channel ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_current_channel_vu_mono( channel ); @@ -988,7 +988,7 @@ } return 0.0; } -LIBOPENMPT_API float openmpt_module_get_current_channel_vu_left( openmpt_module * mod, int32_t channel ) { +float openmpt_module_get_current_channel_vu_left( openmpt_module * mod, int32_t channel ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_current_channel_vu_left( channel ); @@ -997,7 +997,7 @@ } return 0.0; } -LIBOPENMPT_API float openmpt_module_get_current_channel_vu_right( openmpt_module * mod, int32_t channel ) { +float openmpt_module_get_current_channel_vu_right( openmpt_module * mod, int32_t channel ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_current_channel_vu_right( channel ); @@ -1006,7 +1006,7 @@ } return 0.0; } -LIBOPENMPT_API float openmpt_module_get_current_channel_vu_rear_left( openmpt_module * mod, int32_t channel ) { +float openmpt_module_get_current_channel_vu_rear_left( openmpt_module * mod, int32_t channel ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_current_channel_vu_rear_left( channel ); @@ -1015,7 +1015,7 @@ } return 0.0; } -LIBOPENMPT_API float openmpt_module_get_current_channel_vu_rear_right( openmpt_module * mod, int32_t channel ) { +float openmpt_module_get_current_channel_vu_rear_right( openmpt_module * mod, int32_t channel ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_current_channel_vu_rear_right( channel ); @@ -1025,7 +1025,7 @@ return 0.0; } -LIBOPENMPT_API int32_t openmpt_module_get_num_subsongs( openmpt_module * mod ) { +int32_t openmpt_module_get_num_subsongs( openmpt_module * mod ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_num_subsongs(); @@ -1034,7 +1034,7 @@ } return 0; } -LIBOPENMPT_API int32_t openmpt_module_get_num_channels( openmpt_module * mod ) { +int32_t openmpt_module_get_num_channels( openmpt_module * mod ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_num_channels(); @@ -1043,7 +1043,7 @@ } return 0; } -LIBOPENMPT_API int32_t openmpt_module_get_num_orders( openmpt_module * mod ) { +int32_t openmpt_module_get_num_orders( openmpt_module * mod ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_num_orders(); @@ -1052,7 +1052,7 @@ } return 0; } -LIBOPENMPT_API int32_t openmpt_module_get_num_patterns( openmpt_module * mod ) { +int32_t openmpt_module_get_num_patterns( openmpt_module * mod ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_num_patterns(); @@ -1061,7 +1061,7 @@ } return 0; } -LIBOPENMPT_API int32_t openmpt_module_get_num_instruments( openmpt_module * mod ) { +int32_t openmpt_module_get_num_instruments( openmpt_module * mod ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_num_instruments(); @@ -1070,7 +1070,7 @@ } return 0; } -LIBOPENMPT_API int32_t openmpt_module_get_num_samples( openmpt_module * mod ) { +int32_t openmpt_module_get_num_samples( openmpt_module * mod ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_num_samples(); @@ -1080,7 +1080,7 @@ return 0; } -LIBOPENMPT_API const char * openmpt_module_get_subsong_name( openmpt_module * mod, int32_t index ) { +const char * openmpt_module_get_subsong_name( openmpt_module * mod, int32_t index ) { try { openmpt::interface::check_soundfile( mod ); std::vector<std::string> names = mod->impl->get_subsong_names(); @@ -1096,7 +1096,7 @@ } return NULL; } -LIBOPENMPT_API const char * openmpt_module_get_channel_name( openmpt_module * mod, int32_t index ) { +const char * openmpt_module_get_channel_name( openmpt_module * mod, int32_t index ) { try { openmpt::interface::check_soundfile( mod ); std::vector<std::string> names = mod->impl->get_channel_names(); @@ -1112,7 +1112,7 @@ } return NULL; } -LIBOPENMPT_API const char * openmpt_module_get_order_name( openmpt_module * mod, int32_t index ) { +const char * openmpt_module_get_order_name( openmpt_module * mod, int32_t index ) { try { openmpt::interface::check_soundfile( mod ); std::vector<std::string> names = mod->impl->get_order_names(); @@ -1128,7 +1128,7 @@ } return NULL; } -LIBOPENMPT_API const char * openmpt_module_get_pattern_name( openmpt_module * mod, int32_t index ) { +const char * openmpt_module_get_pattern_name( openmpt_module * mod, int32_t index ) { try { openmpt::interface::check_soundfile( mod ); std::vector<std::string> names = mod->impl->get_pattern_names(); @@ -1144,7 +1144,7 @@ } return NULL; } -LIBOPENMPT_API const char * openmpt_module_get_instrument_name( openmpt_module * mod, int32_t index ) { +const char * openmpt_module_get_instrument_name( openmpt_module * mod, int32_t index ) { try { openmpt::interface::check_soundfile( mod ); std::vector<std::string> names = mod->impl->get_instrument_names(); @@ -1160,7 +1160,7 @@ } return NULL; } -LIBOPENMPT_API const char * openmpt_module_get_sample_name( openmpt_module * mod, int32_t index ) { +const char * openmpt_module_get_sample_name( openmpt_module * mod, int32_t index ) { try { openmpt::interface::check_soundfile( mod ); std::vector<std::string> names = mod->impl->get_sample_names(); @@ -1177,7 +1177,7 @@ return NULL; } -LIBOPENMPT_API int32_t openmpt_module_get_order_pattern( openmpt_module * mod, int32_t order ) { +int32_t openmpt_module_get_order_pattern( openmpt_module * mod, int32_t order ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_order_pattern( order ); @@ -1187,7 +1187,7 @@ return 0; } -LIBOPENMPT_API int32_t openmpt_module_get_pattern_num_rows( openmpt_module * mod, int32_t pattern ) { +int32_t openmpt_module_get_pattern_num_rows( openmpt_module * mod, int32_t pattern ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_pattern_num_rows( pattern ); @@ -1197,7 +1197,7 @@ return 0; } -LIBOPENMPT_API uint8_t openmpt_module_get_pattern_row_channel_command( openmpt_module * mod, int32_t pattern, int32_t row, int32_t channel, int command ) { +uint8_t openmpt_module_get_pattern_row_channel_command( openmpt_module * mod, int32_t pattern, int32_t row, int32_t channel, int command ) { try { openmpt::interface::check_soundfile( mod ); return mod->impl->get_pattern_row_channel_command( pattern, row, channel, command ); @@ -1207,7 +1207,7 @@ return 0; } -LIBOPENMPT_API const char * openmpt_module_format_pattern_row_channel_command( openmpt_module * mod, int32_t pattern, int32_t row, int32_t channel, int command ) { +const char * openmpt_module_format_pattern_row_channel_command( openmpt_module * mod, int32_t pattern, int32_t row, int32_t channel, int command ) { try { openmpt::interface::check_soundfile( mod ); return openmpt::strdup( mod->impl->format_pattern_row_channel_command( pattern, row, channel, command ).c_str() ); @@ -1217,7 +1217,7 @@ return 0; } -LIBOPENMPT_API const char * openmpt_module_highlight_pattern_row_channel_command( openmpt_module * mod, int32_t pattern, int32_t row, int32_t channel, int command ) { +const char * openmpt_module_highlight_pattern_row_channel_command( openmpt_module * mod, int32_t pattern, int32_t row, int32_t channel, int command ) { try { openmpt::interface::check_soundfile( mod ); return openmpt::strdup( mod->impl->highlight_pattern_row_channel_command( pattern, row, channel, command ).c_str() ); @@ -1227,7 +1227,7 @@ return 0; } -LIBOPENMPT_API const char * openmpt_module_format_pattern_row_channel( openmpt_module * mod, int32_t pattern, int32_t row, int32_t channel, size_t width, int pad ) { +const char * openmpt_module_format_pattern_row_channel( openmpt_module * mod, int32_t pattern, int32_t row, int32_t channel, size_t width, int pad ) { try { openmpt::interface::check_soundfile( mod ); return openmpt::strdup( mod->impl->format_pattern_row_channel( pattern, row, channel, width, pad ? true : false ).c_str() ); @@ -1237,7 +1237,7 @@ return 0; } -LIBOPENMPT_API const char * openmpt_module_highlight_pattern_row_channel( openmpt_module * mod, int32_t pattern, int32_t row, int32_t channel, size_t width, int pad ) { +const char * openmpt_module_highlight_pattern_row_channel( openmpt_module * mod, int32_t pattern, int32_t row, int32_t channel, size_t width, int pad ) { try { openmpt::interface::check_soundfile( mod ); return openmpt::strdup( mod->impl->highlight_pattern_row_channel( pattern, row, channel, width, pad ? true : false ).c_str() ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.4.11+release.autotools/libopenmpt/libopenmpt_version.h new/libopenmpt-0.4.12+release.autotools/libopenmpt/libopenmpt_version.h --- old/libopenmpt-0.4.11+release.autotools/libopenmpt/libopenmpt_version.h 2019-12-22 20:09:19.000000000 +0100 +++ new/libopenmpt-0.4.12+release.autotools/libopenmpt/libopenmpt_version.h 2020-04-13 15:25:01.000000000 +0200 @@ -19,7 +19,7 @@ /*! \brief libopenmpt minor version number */ #define OPENMPT_API_VERSION_MINOR 4 /*! \brief libopenmpt patch version number */ -#define OPENMPT_API_VERSION_PATCH 11 +#define OPENMPT_API_VERSION_PATCH 12 /*! \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.4.11+release.autotools/libopenmpt/libopenmpt_version.mk new/libopenmpt-0.4.12+release.autotools/libopenmpt/libopenmpt_version.mk --- old/libopenmpt-0.4.11+release.autotools/libopenmpt/libopenmpt_version.mk 2019-12-22 20:09:19.000000000 +0100 +++ new/libopenmpt-0.4.12+release.autotools/libopenmpt/libopenmpt_version.mk 2020-04-13 15:25:01.000000000 +0200 @@ -1,8 +1,8 @@ LIBOPENMPT_VERSION_MAJOR=0 LIBOPENMPT_VERSION_MINOR=4 -LIBOPENMPT_VERSION_PATCH=11 +LIBOPENMPT_VERSION_PATCH=12 LIBOPENMPT_VERSION_PREREL= LIBOPENMPT_LTVER_CURRENT=1 -LIBOPENMPT_LTVER_REVISION=11 +LIBOPENMPT_LTVER_REVISION=12 LIBOPENMPT_LTVER_AGE=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.4.11+release.autotools/man/openmpt123.1 new/libopenmpt-0.4.12+release.autotools/man/openmpt123.1 --- old/libopenmpt-0.4.11+release.autotools/man/openmpt123.1 2019-12-22 20:20:58.000000000 +0100 +++ new/libopenmpt-0.4.12+release.autotools/man/openmpt123.1 2020-04-13 15:44:46.000000000 +0200 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. -.TH OPENMPT123 "1" "December 2019" "openmpt123 v0.4.11" "User Commands" +.TH OPENMPT123 "1" "April 2020" "openmpt123 v0.4.12" "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\-2019 OpenMPT developers <https://lib.openmpt.org/> +Copyright \(co 2013\-2020 OpenMPT developers <https://lib.openmpt.org/> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.4.11+release.autotools/openmpt123/openmpt123.cpp new/libopenmpt-0.4.12+release.autotools/openmpt123/openmpt123.cpp --- old/libopenmpt-0.4.11+release.autotools/openmpt123/openmpt123.cpp 2019-01-01 10:10:16.000000000 +0100 +++ new/libopenmpt-0.4.12+release.autotools/openmpt123/openmpt123.cpp 2020-01-01 09:49:37.000000000 +0100 @@ -8,7 +8,7 @@ */ static const char * const license = -"Copyright (c) 2004-2019, OpenMPT contributors" "\n" +"Copyright (c) 2004-2020, OpenMPT contributors" "\n" "Copyright (c) 1997-2003, Olivier Lapicque" "\n" "All rights reserved." "\n" "" "\n" @@ -441,7 +441,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-2019 OpenMPT developers <https://lib.openmpt.org/>" << std::endl; + log << "Copyright (c) 2013-2020 OpenMPT developers <https://lib.openmpt.org/>" << std::endl; if ( !verbose ) { log << std::endl; return; @@ -530,7 +530,7 @@ static void show_man_version( textout & log ) { log << "openmpt123" << " v" << OPENMPT123_VERSION_STRING << std::endl; log << std::endl; - log << "Copyright (c) 2013-2019 OpenMPT developers <https://lib.openmpt.org/>" << std::endl; + log << "Copyright (c) 2013-2020 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.4.11+release.autotools/openmpt123/openmpt123_sdl.hpp new/libopenmpt-0.4.12+release.autotools/openmpt123/openmpt123_sdl.hpp --- old/libopenmpt-0.4.11+release.autotools/openmpt123/openmpt123_sdl.hpp 2018-07-05 14:23:04.000000000 +0200 +++ new/libopenmpt-0.4.12+release.autotools/openmpt123/openmpt123_sdl.hpp 2019-12-25 09:41:04.000000000 +0100 @@ -26,7 +26,14 @@ namespace openmpt123 { struct sdl_exception : public exception { - sdl_exception( int /*code*/ ) : exception( "SDL error" ) { } +private: + static std::string text_from_code( int code ) { + std::ostringstream s; + s << code; + return s.str(); + } +public: + sdl_exception( int code, const char * error ) : exception( text_from_code( code ) + " (" + ( error ? std::string(error) : std::string("NULL") ) + ")" ) { } }; class sdl_stream_raii : public write_buffers_blocking_wrapper { @@ -36,8 +43,7 @@ protected: void check_sdl_error( int e ) { if ( e < 0 ) { - throw sdl_exception( e ); - return; + throw sdl_exception( e, SDL_GetError() ); } } std::uint32_t round_up_power2(std::uint32_t x) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.4.11+release.autotools/openmpt123/openmpt123_sdl2.hpp new/libopenmpt-0.4.12+release.autotools/openmpt123/openmpt123_sdl2.hpp --- old/libopenmpt-0.4.11+release.autotools/openmpt123/openmpt123_sdl2.hpp 2018-07-05 14:23:04.000000000 +0200 +++ new/libopenmpt-0.4.12+release.autotools/openmpt123/openmpt123_sdl2.hpp 2019-12-25 09:41:04.000000000 +0100 @@ -26,13 +26,19 @@ namespace openmpt123 { struct sdl2_exception : public exception { - sdl2_exception( int /*code*/ ) : exception( "SDL2 error" ) { } +private: + static std::string text_from_code( int code ) { + std::ostringstream s; + s << code; + return s.str(); + } +public: + sdl2_exception( int code, const char * error ) : exception( text_from_code( code ) + " (" + ( error ? std::string(error) : std::string("NULL") ) + ")" ) { } }; static void check_sdl2_error( int e ) { if ( e < 0 ) { - throw sdl2_exception( e ); - return; + throw sdl2_exception( e, SDL_GetError() ); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.4.11+release.autotools/soundlib/Load_dmf.cpp new/libopenmpt-0.4.12+release.autotools/soundlib/Load_dmf.cpp --- old/libopenmpt-0.4.11+release.autotools/soundlib/Load_dmf.cpp 2018-12-06 15:29:05.000000000 +0100 +++ new/libopenmpt-0.4.12+release.autotools/soundlib/Load_dmf.cpp 2020-03-21 21:42:27.000000000 +0100 @@ -466,18 +466,16 @@ //const int tickspeed = (tempoRealBPMmode) ? MAX(1, (tempoData * beat * 4) / 60) : tempoData; const int tickspeed = (settings.realBPMmode) ? std::max(1, settings.tempoBPM * settings.beat * 2) : ((settings.tempoTicks + 1) * 30); // Try to find matching speed - try higher speeds first, so that effects like arpeggio and tremor work better. - for(speed = 255; speed > 2; speed--) + for(speed = 255; speed >= 1; speed--) { // Original unoptimized formula: // tempo = 30 * tickspeed * speed / 48; tempo = tickspeed * speed / 48; if(tempo >= 32 && tempo <= 255) - { break; - } } Limit(tempo, 32, 255); - settings.internalTicks = (uint8)speed; + settings.internalTicks = static_cast<uint8>(std::max(1, speed)); } else { tempoChange = false; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.4.11+release.autotools/soundlib/Load_xm.cpp new/libopenmpt-0.4.12+release.autotools/soundlib/Load_xm.cpp --- old/libopenmpt-0.4.11+release.autotools/soundlib/Load_xm.cpp 2018-12-06 15:29:05.000000000 +0100 +++ new/libopenmpt-0.4.12+release.autotools/soundlib/Load_xm.cpp 2020-03-21 14:34:15.000000000 +0100 @@ -361,6 +361,10 @@ { m_nMixLevels = mixLevelsCompatibleFT2; } + } else if(!memcmp(fileHeader.trackerName, "Fasttracker II clone", 20)) + { + // 8bitbubsy's FT2 clone should be treated exactly like FT2 + madeWith = verFT2Generic | verConfirmed; } else if(!memcmp(fileHeader.trackerName, "MadTracker 2.0\0", 15)) { // Fix channel 2 in m3_cha.xm diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.4.11+release.autotools/soundlib/ModSample.cpp new/libopenmpt-0.4.12+release.autotools/soundlib/ModSample.cpp --- old/libopenmpt-0.4.11+release.autotools/soundlib/ModSample.cpp 2019-03-19 21:54:13.000000000 +0100 +++ new/libopenmpt-0.4.12+release.autotools/soundlib/ModSample.cpp 2020-03-29 16:16:41.000000000 +0200 @@ -125,6 +125,7 @@ // Initialize sample slot with default values. void ModSample::Initialize(MODTYPE type) { + FreeSample(); nLength = 0; nLoopStart = nLoopEnd = 0; nSustainStart = nSustainEnd = 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.4.11+release.autotools/soundlib/Snd_fx.cpp new/libopenmpt-0.4.12+release.autotools/soundlib/Snd_fx.cpp --- old/libopenmpt-0.4.11+release.autotools/soundlib/Snd_fx.cpp 2019-11-01 16:17:56.000000000 +0100 +++ new/libopenmpt-0.4.12+release.autotools/soundlib/Snd_fx.cpp 2020-04-07 20:02:25.000000000 +0200 @@ -127,22 +127,21 @@ if(i >= portaStart) { chn.isFirstTick = false; - const ModCommand &p = *sndFile.Patterns[state->m_nPattern].GetpModCommand(state->m_nRow, channel); - if(p.command == CMD_TONEPORTAMENTO) sndFile.TonePortamento(chn, p.param); - else if(p.command == CMD_TONEPORTAVOL) sndFile.TonePortamento(chn, 0); - if(p.volcmd == VOLCMD_TONEPORTAMENTO) - { - uint32 param = p.vol; - if(sndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT | MOD_TYPE_AMS | MOD_TYPE_DMF | MOD_TYPE_DBM | MOD_TYPE_IMF | MOD_TYPE_PSM | MOD_TYPE_J2B | MOD_TYPE_ULT | MOD_TYPE_OKT | MOD_TYPE_MT2 | MOD_TYPE_MDL)) - { - param = ImpulseTrackerPortaVolCmd[param & 0x0F]; - } else - { - // Close enough. Do not bother with idiosyncratic FT2 behaviour here. - param <<= 4; - } - sndFile.TonePortamento(chn, param); - } + const ModCommand &m = *sndFile.Patterns[state->m_nPattern].GetpModCommand(state->m_nRow, channel); + auto command = m.command; + if(m.volcmd == VOLCMD_TONEPORTAMENTO) + { + const auto retVal = sndFile.GetVolCmdTonePorta(m, 0); + const auto porta = retVal.first; + const auto clearEffectCommand = retVal.second; + sndFile.TonePortamento(chn, porta); + if(clearEffectCommand) + command = CMD_NONE; + } + if(command == CMD_TONEPORTAMENTO) + sndFile.TonePortamento(chn, m.param); + else if(command == CMD_TONEPORTAVOL) + sndFile.TonePortamento(chn, 0); updateInc = true; } @@ -571,6 +570,17 @@ if(chn.rowCommand.vol != 0) chn.nOldVolParam = chn.rowCommand.vol; break; + case VOLCMD_TONEPORTAMENTO: + if(chn.rowCommand.vol) + { + const auto retVal = GetVolCmdTonePorta(chn.rowCommand, 0); + const auto porta = retVal.first; + const auto clearEffectCommand = retVal.second; + chn.nPortamentoSlide = porta * 4; + if(clearEffectCommand) + command = CMD_NONE; + } + break; } switch(command) @@ -2959,30 +2969,13 @@ { if (volcmd == VOLCMD_TONEPORTAMENTO) { - uint32 porta = 0; - if(GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT | MOD_TYPE_AMS | MOD_TYPE_DMF | MOD_TYPE_DBM | MOD_TYPE_IMF | MOD_TYPE_PSM | MOD_TYPE_J2B | MOD_TYPE_ULT | MOD_TYPE_OKT | MOD_TYPE_MT2 | MOD_TYPE_MDL)) - { - porta = ImpulseTrackerPortaVolCmd[vol & 0x0F]; - } else - { - if(cmd == CMD_TONEPORTAMENTO && GetType() == MOD_TYPE_XM) - { - // Yes, FT2 is *that* weird. If there is a Mx command in the volume column - // and a normal 3xx command, the 3xx command is ignored but the Mx command's - // effectiveness is doubled. - // Test case: TonePortamentoMemory.xm - cmd = CMD_NONE; - vol *= 2; - } - porta = vol << 4; - - // FT2 compatibility: If there's a portamento and a note delay, execute the portamento, but don't update the parameter - // Test case: PortaDelay.xm - if(m_playBehaviour[kFT2PortaDelay] && nStartTick != 0) - { - porta = 0; - } - } + const auto retVal = GetVolCmdTonePorta(chn.rowCommand, nStartTick); + const auto porta = retVal.first; + const auto clearEffectCommand = retVal.second; + + if(clearEffectCommand) + cmd = CMD_NONE; + TonePortamento(chn, porta); } else { @@ -4026,6 +4019,36 @@ } } + +std::pair<uint32, bool> CSoundFile::GetVolCmdTonePorta(const ModCommand &m, uint32 startTick) const +{ + if(GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT | MOD_TYPE_AMS | MOD_TYPE_DMF | MOD_TYPE_DBM | MOD_TYPE_IMF | MOD_TYPE_PSM | MOD_TYPE_J2B | MOD_TYPE_ULT | MOD_TYPE_OKT | MOD_TYPE_MT2 | MOD_TYPE_MDL)) + { + return {ImpulseTrackerPortaVolCmd[m.vol & 0x0F], false}; + } else + { + bool clearEffectColumn = false; + uint32 vol = m.vol; + if(m.command == CMD_TONEPORTAMENTO && GetType() == MOD_TYPE_XM) + { + // Yes, FT2 is *that* weird. If there is a Mx command in the volume column + // and a normal 3xx command, the 3xx command is ignored but the Mx command's + // effectiveness is doubled. + // Test case: TonePortamentoMemory.xm + clearEffectColumn = true; + vol *= 2; + } + + // FT2 compatibility: If there's a portamento and a note delay, execute the portamento, but don't update the parameter + // Test case: PortaDelay.xm + if(m_playBehaviour[kFT2PortaDelay] && startTick != 0) + return {0, clearEffectColumn}; + else + return {vol * 16, clearEffectColumn}; + } +} + + // Portamento Slide void CSoundFile::TonePortamento(ModChannel &chn, uint32 param) const { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.4.11+release.autotools/soundlib/Sndfile.h new/libopenmpt-0.4.12+release.autotools/soundlib/Sndfile.h --- old/libopenmpt-0.4.11+release.autotools/soundlib/Sndfile.h 2019-10-27 15:47:44.000000000 +0100 +++ new/libopenmpt-0.4.12+release.autotools/soundlib/Sndfile.h 2020-04-07 20:02:25.000000000 +0200 @@ -959,6 +959,7 @@ void PortamentoFineMPT(ModChannel &chn, int); void PortamentoExtraFineMPT(ModChannel &chn, int); void NoteSlide(ModChannel &chn, uint32 param, bool slideUp, bool retrig) const; + std::pair<uint32, bool> GetVolCmdTonePorta(const ModCommand &m, uint32 startTick) const; void TonePortamento(ModChannel &chn, uint32 param) const; void Vibrato(ModChannel &chn, uint32 param) const; void FineVibrato(ModChannel &chn, uint32 param) const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.4.11+release.autotools/soundlib/Sndmix.cpp new/libopenmpt-0.4.12+release.autotools/soundlib/Sndmix.cpp --- old/libopenmpt-0.4.11+release.autotools/soundlib/Sndmix.cpp 2019-09-15 21:49:59.000000000 +0200 +++ new/libopenmpt-0.4.12+release.autotools/soundlib/Sndmix.cpp 2020-04-06 20:00:42.000000000 +0200 @@ -1558,6 +1558,8 @@ if(chn.dwFlags[CHN_VIBRATO]) { + const bool advancePosition = !m_SongFlags[SONG_FIRSTTICK] || ((GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) && !(m_SongFlags[SONG_ITOLDEFFECTS])); + if(GetType() == MOD_TYPE_669) { if(chn.nVibratoPos % 2u) @@ -1569,7 +1571,7 @@ } // IT compatibility: IT has its own, more precise tables and pre-increments the vibrato position - if(m_playBehaviour[kITVibratoTremoloPanbrello]) + if(advancePosition && m_playBehaviour[kITVibratoTremoloPanbrello]) chn.nVibratoPos += 4 * chn.nVibratoSpeed; int vdelta = GetVibratoDelta(chn.nVibratoType, chn.nVibratoPos); @@ -1672,12 +1674,9 @@ } // Advance vibrato position - IT updates on every tick, unless "old effects" are enabled (in this case it only updates on non-first ticks like other trackers) - if(!m_SongFlags[SONG_FIRSTTICK] || ((GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) && !(m_SongFlags[SONG_ITOLDEFFECTS]))) - { - // IT compatibility: IT has its own, more precise tables and pre-increments the vibrato position - if(!m_playBehaviour[kITVibratoTremoloPanbrello]) - chn.nVibratoPos += chn.nVibratoSpeed; - } + // IT compatibility: IT has its own, more precise tables and pre-increments the vibrato position + if(advancePosition && !m_playBehaviour[kITVibratoTremoloPanbrello]) + chn.nVibratoPos += chn.nVibratoSpeed; } else if(chn.dwOldFlags[CHN_VIBRATO]) { // Stop MIDI vibrato for plugins:
