You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
(1) |
Apr
(1) |
May
|
Jun
(1) |
Jul
|
Aug
(10) |
Sep
|
Oct
|
Nov
|
Dec
(3) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(1) |
Feb
(2) |
Mar
(3) |
Apr
(2) |
May
(10) |
Jun
(2) |
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
(3) |
Dec
|
2008 |
Jan
(6) |
Feb
(4) |
Mar
(5) |
Apr
(2) |
May
(1) |
Jun
(1) |
Jul
(4) |
Aug
(6) |
Sep
(2) |
Oct
(9) |
Nov
(1) |
Dec
(4) |
2009 |
Jan
(9) |
Feb
(2) |
Mar
(2) |
Apr
(2) |
May
(6) |
Jun
(18) |
Jul
(33) |
Aug
(39) |
Sep
(33) |
Oct
(24) |
Nov
(23) |
Dec
(22) |
2010 |
Jan
(29) |
Feb
(32) |
Mar
(51) |
Apr
(17) |
May
(31) |
Jun
(21) |
Jul
(32) |
Aug
(28) |
Sep
(35) |
Oct
(27) |
Nov
(11) |
Dec
(13) |
2011 |
Jan
(14) |
Feb
(13) |
Mar
(27) |
Apr
(27) |
May
(28) |
Jun
(20) |
Jul
(43) |
Aug
(52) |
Sep
(66) |
Oct
(61) |
Nov
(11) |
Dec
(8) |
2012 |
Jan
(20) |
Feb
(30) |
Mar
(38) |
Apr
(21) |
May
(33) |
Jun
(21) |
Jul
(25) |
Aug
(9) |
Sep
(24) |
Oct
(42) |
Nov
(27) |
Dec
(41) |
2013 |
Jan
(20) |
Feb
(35) |
Mar
(156) |
Apr
(298) |
May
(258) |
Jun
(201) |
Jul
(105) |
Aug
(60) |
Sep
(193) |
Oct
(245) |
Nov
(280) |
Dec
(194) |
2014 |
Jan
(63) |
Feb
(202) |
Mar
(200) |
Apr
(23) |
May
(53) |
Jun
(105) |
Jul
(18) |
Aug
(26) |
Sep
(110) |
Oct
(187) |
Nov
(97) |
Dec
(74) |
2015 |
Jan
(45) |
Feb
(55) |
Mar
(116) |
Apr
(116) |
May
(193) |
Jun
(164) |
Jul
(50) |
Aug
(111) |
Sep
(98) |
Oct
(71) |
Nov
(103) |
Dec
(63) |
2016 |
Jan
(33) |
Feb
(101) |
Mar
(182) |
Apr
(139) |
May
(140) |
Jun
(103) |
Jul
(165) |
Aug
(286) |
Sep
(208) |
Oct
(127) |
Nov
(97) |
Dec
(54) |
2017 |
Jan
(64) |
Feb
(335) |
Mar
(202) |
Apr
(212) |
May
(139) |
Jun
(127) |
Jul
(294) |
Aug
(154) |
Sep
(170) |
Oct
(152) |
Nov
(156) |
Dec
(62) |
2018 |
Jan
(168) |
Feb
(237) |
Mar
(196) |
Apr
(174) |
May
(174) |
Jun
(161) |
Jul
(127) |
Aug
(88) |
Sep
(149) |
Oct
(66) |
Nov
(52) |
Dec
(135) |
2019 |
Jan
(146) |
Feb
(126) |
Mar
(104) |
Apr
(58) |
May
(60) |
Jun
(28) |
Jul
(197) |
Aug
(129) |
Sep
(141) |
Oct
(148) |
Nov
(63) |
Dec
(100) |
2020 |
Jan
(74) |
Feb
(37) |
Mar
(59) |
Apr
(154) |
May
(194) |
Jun
(133) |
Jul
(313) |
Aug
(197) |
Sep
(49) |
Oct
(162) |
Nov
(143) |
Dec
(57) |
2021 |
Jan
(120) |
Feb
(107) |
Mar
(314) |
Apr
(157) |
May
(524) |
Jun
(169) |
Jul
(72) |
Aug
(133) |
Sep
(135) |
Oct
(146) |
Nov
(198) |
Dec
(325) |
2022 |
Jan
(409) |
Feb
(249) |
Mar
(138) |
Apr
(95) |
May
(102) |
Jun
(221) |
Jul
(66) |
Aug
(120) |
Sep
(192) |
Oct
(131) |
Nov
(53) |
Dec
(171) |
2023 |
Jan
(357) |
Feb
(82) |
Mar
(168) |
Apr
(218) |
May
(196) |
Jun
(86) |
Jul
(115) |
Aug
(49) |
Sep
(190) |
Oct
(102) |
Nov
(45) |
Dec
(76) |
2024 |
Jan
(86) |
Feb
(50) |
Mar
(324) |
Apr
(209) |
May
(197) |
Jun
(232) |
Jul
(194) |
Aug
(247) |
Sep
(219) |
Oct
(266) |
Nov
(328) |
Dec
(304) |
2025 |
Jan
(191) |
Feb
(115) |
Mar
(137) |
Apr
(32) |
May
(126) |
Jun
(403) |
Jul
(213) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <sv...@op...> - 2024-11-02 11:39:42
|
Author: manx Date: Sat Nov 2 12:39:34 2024 New Revision: 22068 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22068 Log: [Doc] libopenmpt: Update changelog. Modified: branches/OpenMPT-1.31/doc/libopenmpt/changelog.md Modified: branches/OpenMPT-1.31/doc/libopenmpt/changelog.md ============================================================================== --- branches/OpenMPT-1.31/doc/libopenmpt/changelog.md Sat Nov 2 12:39:05 2024 (r22067) +++ branches/OpenMPT-1.31/doc/libopenmpt/changelog.md Sat Nov 2 12:39:34 2024 (r22068) @@ -7,7 +7,7 @@ ### libopenmpt 0.7.12-pre - * mpg123: Update to v1.32.9-dev+r5448 (2024-10-28). + * mpg123: Update to v1.32.9 (2024-11-02). ### libopenmpt 0.7.11 (2024-10-26) |
From: <sv...@op...> - 2024-11-02 11:39:17
|
Author: manx Date: Sat Nov 2 12:39:05 2024 New Revision: 22067 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22067 Log: Merged revision(s) 22066 from trunk/OpenMPT: [Var] mpg123: Update to 1.32.9 (2024-11-02). ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/include/mpg123/OpenMPT.txt branches/OpenMPT-1.31/include/mpg123/src/compat/compat.h branches/OpenMPT-1.31/include/mpg123/src/version.h Modified: branches/OpenMPT-1.31/include/mpg123/OpenMPT.txt ============================================================================== --- branches/OpenMPT-1.31/include/mpg123/OpenMPT.txt Sat Nov 2 12:38:30 2024 (r22066) +++ branches/OpenMPT-1.31/include/mpg123/OpenMPT.txt Sat Nov 2 12:39:05 2024 (r22067) @@ -1,4 +1,4 @@ -libmpg123 library version 1.32.9-dev+r5448 (2024-10-28). +libmpg123 library version 1.32.9 (2024-11-02). The following changes have been made: * `ports/makefile/config.h` has been added for plain `Makefile` builds. * `ports/MSVC++/config.h` has been added for MSVC builds. Modified: branches/OpenMPT-1.31/include/mpg123/src/compat/compat.h ============================================================================== --- branches/OpenMPT-1.31/include/mpg123/src/compat/compat.h Sat Nov 2 12:38:30 2024 (r22066) +++ branches/OpenMPT-1.31/include/mpg123/src/compat/compat.h Sat Nov 2 12:39:05 2024 (r22067) @@ -110,7 +110,7 @@ typedef unsigned char byte; -#if (defined(_UCRT) || defined(_MSC_VER) || (defined(__MINGW32__) || defined(__MINGW64__))) && !defined(__CYGWIN__) +#if (defined(_UCRT) || defined(_MSC_VER) || (defined(__MINGW32__) || defined(__MINGW64__)) || (defined(__WATCOMC__) && defined(__NT__))) && !defined(__CYGWIN__) #define MPG123_COMPAT_MSVCRT_IO #endif @@ -134,6 +134,13 @@ #ifndef MPG123_COMPAT_MSVCRT_IO_64 #define MPG123_COMPAT_MSVCRT_IO_64 #endif +#endif +#endif +#if defined(__WATCOMC__) && defined(__NT__) +#if (__WATCOMC__ >= 1100) +#ifndef MPG123_COMPAT_MSVCRT_IO_64 +#define MPG123_COMPAT_MSVCRT_IO_64 +#endif #endif #endif #endif Modified: branches/OpenMPT-1.31/include/mpg123/src/version.h ============================================================================== --- branches/OpenMPT-1.31/include/mpg123/src/version.h Sat Nov 2 12:38:30 2024 (r22066) +++ branches/OpenMPT-1.31/include/mpg123/src/version.h Sat Nov 2 12:39:05 2024 (r22067) @@ -19,7 +19,7 @@ #define MPG123_PATCH 9 // Don't get too wild with that to avoid confusing m4. No brackets. // Also, it should fit well into a sane file name for the tarball. -#define MPG123_SUFFIX "-dev" +#define MPG123_SUFFIX "" #define MPG123_VERSION_CAT_REALLY(a, b, c) #a "." #b "." #c #define MPG123_VERSION_CAT(a, b, c) MPG123_VERSION_CAT_REALLY(a, b, c) |
From: <sv...@op...> - 2024-11-02 11:38:42
|
Author: manx Date: Sat Nov 2 12:38:30 2024 New Revision: 22066 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22066 Log: [Var] mpg123: Update to 1.32.9 (2024-11-02). Modified: trunk/OpenMPT/include/mpg123/OpenMPT.txt trunk/OpenMPT/include/mpg123/src/compat/compat.h trunk/OpenMPT/include/mpg123/src/version.h Modified: trunk/OpenMPT/include/mpg123/OpenMPT.txt ============================================================================== --- trunk/OpenMPT/include/mpg123/OpenMPT.txt Sat Nov 2 11:11:12 2024 (r22065) +++ trunk/OpenMPT/include/mpg123/OpenMPT.txt Sat Nov 2 12:38:30 2024 (r22066) @@ -1,4 +1,4 @@ -libmpg123 library version 1.32.9-dev+r5448 (2024-10-28). +libmpg123 library version 1.32.9 (2024-11-02). The following changes have been made: * `ports/makefile/config.h` has been added for plain `Makefile` builds. * `ports/MSVC++/config.h` has been added for MSVC builds. Modified: trunk/OpenMPT/include/mpg123/src/compat/compat.h ============================================================================== --- trunk/OpenMPT/include/mpg123/src/compat/compat.h Sat Nov 2 11:11:12 2024 (r22065) +++ trunk/OpenMPT/include/mpg123/src/compat/compat.h Sat Nov 2 12:38:30 2024 (r22066) @@ -110,7 +110,7 @@ typedef unsigned char byte; -#if (defined(_UCRT) || defined(_MSC_VER) || (defined(__MINGW32__) || defined(__MINGW64__))) && !defined(__CYGWIN__) +#if (defined(_UCRT) || defined(_MSC_VER) || (defined(__MINGW32__) || defined(__MINGW64__)) || (defined(__WATCOMC__) && defined(__NT__))) && !defined(__CYGWIN__) #define MPG123_COMPAT_MSVCRT_IO #endif @@ -134,6 +134,13 @@ #ifndef MPG123_COMPAT_MSVCRT_IO_64 #define MPG123_COMPAT_MSVCRT_IO_64 #endif +#endif +#endif +#if defined(__WATCOMC__) && defined(__NT__) +#if (__WATCOMC__ >= 1100) +#ifndef MPG123_COMPAT_MSVCRT_IO_64 +#define MPG123_COMPAT_MSVCRT_IO_64 +#endif #endif #endif #endif Modified: trunk/OpenMPT/include/mpg123/src/version.h ============================================================================== --- trunk/OpenMPT/include/mpg123/src/version.h Sat Nov 2 11:11:12 2024 (r22065) +++ trunk/OpenMPT/include/mpg123/src/version.h Sat Nov 2 12:38:30 2024 (r22066) @@ -19,7 +19,7 @@ #define MPG123_PATCH 9 // Don't get too wild with that to avoid confusing m4. No brackets. // Also, it should fit well into a sane file name for the tarball. -#define MPG123_SUFFIX "-dev" +#define MPG123_SUFFIX "" #define MPG123_VERSION_CAT_REALLY(a, b, c) #a "." #b "." #c #define MPG123_VERSION_CAT(a, b, c) MPG123_VERSION_CAT_REALLY(a, b, c) |
From: <sv...@op...> - 2024-11-02 10:11:24
|
Author: manx Date: Sat Nov 2 11:11:12 2024 New Revision: 22065 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22065 Log: [Ref] About Dialog: Use UV_ instead of U_ where UL_ is not possible. Modified: trunk/OpenMPT/mptrack/AboutDialog.cpp Modified: trunk/OpenMPT/mptrack/AboutDialog.cpp ============================================================================== --- trunk/OpenMPT/mptrack/AboutDialog.cpp Sat Nov 2 10:59:26 2024 (r22064) +++ trunk/OpenMPT/mptrack/AboutDialog.cpp Sat Nov 2 11:11:12 2024 (r22065) @@ -397,9 +397,9 @@ text += MPT_UFORMAT("Available CPU features: {}\n")(CPUFeaturesToString(CPUInfo.get_features())); #endif // MPT_ENABLE_ARCH_INTRINSICS text += MPT_UFORMAT("Operating System: {}\n\n")(mpt::OS::Windows::Version::GetCurrentName()); - text += MPT_UFORMAT("OpenMPT Install Path{1}: {0}\n")(theApp.GetInstallPath(), theApp.IsPortableMode() ? U_(" (portable)") : U_("")); - text += MPT_UFORMAT("OpenMPT Executable Path{1}: {0}\n")(theApp.GetInstallBinArchPath(), theApp.IsPortableMode() ? U_(" (portable)") : U_("")); - text += MPT_UFORMAT("Settings{1}: {0}\n")(theApp.GetConfigFileName(), theApp.IsPortableMode() ? U_(" (portable)") : U_("")); + text += MPT_UFORMAT("OpenMPT Install Path{1}: {0}\n")(theApp.GetInstallPath(), theApp.IsPortableMode() ? UV_(" (portable)") : UV_("")); + text += MPT_UFORMAT("OpenMPT Executable Path{1}: {0}\n")(theApp.GetInstallBinArchPath(), theApp.IsPortableMode() ? UV_(" (portable)") : UV_("")); + text += MPT_UFORMAT("Settings{1}: {0}\n")(theApp.GetConfigFileName(), theApp.IsPortableMode() ? UV_(" (portable)") : UV_("")); break; case 1: { @@ -440,22 +440,22 @@ } text += MPT_UFORMAT("{}: {}") ( name - , info.state == ComponentStateAvailable ? U_("ok") : - info.state == ComponentStateUnavailable? U_("missing") : - info.state == ComponentStateUnintialized ? U_("not loaded") : - info.state == ComponentStateBlocked ? U_("blocked") : - info.state == ComponentStateUnregistered ? U_("unregistered") : - U_("unknown") + , info.state == ComponentStateAvailable ? UV_("ok") : + info.state == ComponentStateUnavailable? UV_("missing") : + info.state == ComponentStateUnintialized ? UV_("not loaded") : + info.state == ComponentStateBlocked ? UV_("blocked") : + info.state == ComponentStateUnregistered ? UV_("unregistered") : + UV_("unknown") ); if(info.type != ComponentTypeUnknown) { text += MPT_UFORMAT(" ({})") - ( info.type == ComponentTypeBuiltin ? U_("builtin") : - info.type == ComponentTypeSystem ? U_("system") : - info.type == ComponentTypeSystemInstallable ? U_("system, optional") : - info.type == ComponentTypeBundled ? U_("bundled") : - info.type == ComponentTypeForeign ? U_("foreign") : - U_("unknown") + ( info.type == ComponentTypeBuiltin ? UV_("builtin") : + info.type == ComponentTypeSystem ? UV_("system") : + info.type == ComponentTypeSystemInstallable ? UV_("system, optional") : + info.type == ComponentTypeBundled ? UV_("bundled") : + info.type == ComponentTypeForeign ? UV_("foreign") : + UV_("unknown") ); } text += lf; @@ -492,14 +492,14 @@ ); text += MPT_UFORMAT("Windows version: {}\n") ( - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win81) ? U_("Windows 8.1") : - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win8) ? U_("Windows 8") : - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win7) ? U_("Windows 7") : - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::WinVista) ? U_("Windows Vista") : - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::WinXP) ? U_("Windows XP") : - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win2000) ? U_("Windows 2000") : - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::WinNT4) ? U_("Windows NT4") : - U_("unknown") + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win81) ? UV_("Windows 8.1") : + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win8) ? UV_("Windows 8") : + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win7) ? UV_("Windows 7") : + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::WinVista) ? UV_("Windows Vista") : + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::WinXP) ? UV_("Windows XP") : + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win2000) ? UV_("Windows 2000") : + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::WinNT4) ? UV_("Windows NT4") : + UV_("unknown") ); text += MPT_UFORMAT("Windows original: {}\n") ( mpt::OS::Windows::IsOriginal() ? yes : no |
From: <sv...@op...> - 2024-11-02 09:59:38
|
Author: manx Date: Sat Nov 2 10:59:26 2024 New Revision: 22064 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22064 Log: [Ref] mptString: Add #define UV_(str) for mpt::ustring_view. Modified: trunk/OpenMPT/common/mptString.h Modified: trunk/OpenMPT/common/mptString.h ============================================================================== --- trunk/OpenMPT/common/mptString.h Sat Nov 2 10:54:51 2024 (r22063) +++ trunk/OpenMPT/common/mptString.h Sat Nov 2 10:59:26 2024 (r22064) @@ -408,6 +408,7 @@ #define UC_(x) MPT_UCHAR(x) #define UL_(x) MPT_ULITERAL(x) +#define UV_(x) MPT_USTRINGVIEW(x) #define U_(x) MPT_USTRING(x) |
From: <sv...@op...> - 2024-11-02 09:54:57
|
Author: manx Date: Sat Nov 2 10:54:51 2024 New Revision: 22063 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22063 Log: [Ref] mpt/string/types.hpp: Add MPT_WIDESTRINGVIEW, similar to MPT_USTRINGVIEW. Modified: trunk/OpenMPT/src/mpt/string/types.hpp Modified: trunk/OpenMPT/src/mpt/string/types.hpp ============================================================================== --- trunk/OpenMPT/src/mpt/string/types.hpp Sat Nov 2 10:49:05 2024 (r22062) +++ trunk/OpenMPT/src/mpt/string/types.hpp Sat Nov 2 10:54:51 2024 (r22063) @@ -185,16 +185,18 @@ using widestring = std::wstring; using widestring_view = std::wstring_view; using widechar = wchar_t; -#define MPT_WIDECHAR(x) L##x -#define MPT_WIDELITERAL(x) L##x -#define MPT_WIDESTRING(x) std::wstring(L##x) +#define MPT_WIDECHAR(x) L##x +#define MPT_WIDELITERAL(x) L##x +#define MPT_WIDESTRING(x) std::wstring(L##x) +#define MPT_WIDESTRINGVIEW(x) std::wstring_view(L##x) #else // MPT_COMPILER_QUIRK_NO_WCHAR using widestring = std::u32string; using widestring_view = std::u32string_view; using widechar = char32_t; -#define MPT_WIDECHAR(x) U##x -#define MPT_WIDELITERAL(x) U##x -#define MPT_WIDESTRING(x) std::u32string(U##x) +#define MPT_WIDECHAR(x) U##x +#define MPT_WIDELITERAL(x) U##x +#define MPT_WIDESTRING(x) std::u32string(U##x) +#define MPT_WIDESTRINGVIEW(x) std::u32string_view(U##x) #endif // !MPT_COMPILER_QUIRK_NO_WCHAR |
From: <sv...@op...> - 2024-11-02 09:49:17
|
Author: manx Date: Sat Nov 2 10:49:05 2024 New Revision: 22062 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22062 Log: [Fix] Partially revert r22059. Does not build in C++17 UTF8 mode. Modified: trunk/OpenMPT/mptrack/AboutDialog.cpp Modified: trunk/OpenMPT/mptrack/AboutDialog.cpp ============================================================================== --- trunk/OpenMPT/mptrack/AboutDialog.cpp Sat Nov 2 01:26:34 2024 (r22061) +++ trunk/OpenMPT/mptrack/AboutDialog.cpp Sat Nov 2 10:49:05 2024 (r22062) @@ -397,9 +397,9 @@ text += MPT_UFORMAT("Available CPU features: {}\n")(CPUFeaturesToString(CPUInfo.get_features())); #endif // MPT_ENABLE_ARCH_INTRINSICS text += MPT_UFORMAT("Operating System: {}\n\n")(mpt::OS::Windows::Version::GetCurrentName()); - text += MPT_UFORMAT("OpenMPT Install Path{1}: {0}\n")(theApp.GetInstallPath(), theApp.IsPortableMode() ? UL_(" (portable)") : UL_("")); - text += MPT_UFORMAT("OpenMPT Executable Path{1}: {0}\n")(theApp.GetInstallBinArchPath(), theApp.IsPortableMode() ? UL_(" (portable)") : UL_("")); - text += MPT_UFORMAT("Settings{1}: {0}\n")(theApp.GetConfigFileName(), theApp.IsPortableMode() ? UL_(" (portable)") : UL_("")); + text += MPT_UFORMAT("OpenMPT Install Path{1}: {0}\n")(theApp.GetInstallPath(), theApp.IsPortableMode() ? U_(" (portable)") : U_("")); + text += MPT_UFORMAT("OpenMPT Executable Path{1}: {0}\n")(theApp.GetInstallBinArchPath(), theApp.IsPortableMode() ? U_(" (portable)") : U_("")); + text += MPT_UFORMAT("Settings{1}: {0}\n")(theApp.GetConfigFileName(), theApp.IsPortableMode() ? U_(" (portable)") : U_("")); break; case 1: { @@ -440,22 +440,22 @@ } text += MPT_UFORMAT("{}: {}") ( name - , info.state == ComponentStateAvailable ? UL_("ok") : - info.state == ComponentStateUnavailable? UL_("missing") : - info.state == ComponentStateUnintialized ? UL_("not loaded") : - info.state == ComponentStateBlocked ? UL_("blocked") : - info.state == ComponentStateUnregistered ? UL_("unregistered") : - UL_("unknown") + , info.state == ComponentStateAvailable ? U_("ok") : + info.state == ComponentStateUnavailable? U_("missing") : + info.state == ComponentStateUnintialized ? U_("not loaded") : + info.state == ComponentStateBlocked ? U_("blocked") : + info.state == ComponentStateUnregistered ? U_("unregistered") : + U_("unknown") ); if(info.type != ComponentTypeUnknown) { text += MPT_UFORMAT(" ({})") - ( info.type == ComponentTypeBuiltin ? UL_("builtin") : - info.type == ComponentTypeSystem ? UL_("system") : - info.type == ComponentTypeSystemInstallable ? UL_("system, optional") : - info.type == ComponentTypeBundled ? UL_("bundled") : - info.type == ComponentTypeForeign ? UL_("foreign") : - UL_("unknown") + ( info.type == ComponentTypeBuiltin ? U_("builtin") : + info.type == ComponentTypeSystem ? U_("system") : + info.type == ComponentTypeSystemInstallable ? U_("system, optional") : + info.type == ComponentTypeBundled ? U_("bundled") : + info.type == ComponentTypeForeign ? U_("foreign") : + U_("unknown") ); } text += lf; @@ -492,14 +492,14 @@ ); text += MPT_UFORMAT("Windows version: {}\n") ( - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win81) ? UL_("Windows 8.1") : - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win8) ? UL_("Windows 8") : - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win7) ? UL_("Windows 7") : - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::WinVista) ? UL_("Windows Vista") : - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::WinXP) ? UL_("Windows XP") : - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win2000) ? UL_("Windows 2000") : - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::WinNT4) ? UL_("Windows NT4") : - UL_("unknown") + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win81) ? U_("Windows 8.1") : + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win8) ? U_("Windows 8") : + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win7) ? U_("Windows 7") : + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::WinVista) ? U_("Windows Vista") : + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::WinXP) ? U_("Windows XP") : + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win2000) ? U_("Windows 2000") : + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::WinNT4) ? U_("Windows NT4") : + U_("unknown") ); text += MPT_UFORMAT("Windows original: {}\n") ( mpt::OS::Windows::IsOriginal() ? yes : no |
From: <sv...@op...> - 2024-11-02 00:26:42
|
Author: sagamusix Date: Sat Nov 2 01:26:34 2024 New Revision: 22061 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22061 Log: Merged revision(s) 22060 from trunk/OpenMPT: [Imp] Add the possibility to disable enhanced GDI upscaling via hidden setting Display.UseGDIUpcaling. This may fix issues that in particular some older VST plugins may be having when this mode is enabled (https://bugs.openmpt.org/view.php?id=1524). ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/mptrack/Mptrack.cpp branches/OpenMPT-1.31/mptrack/TrackerSettings.cpp branches/OpenMPT-1.31/mptrack/TrackerSettings.h Modified: branches/OpenMPT-1.31/mptrack/Mptrack.cpp ============================================================================== --- branches/OpenMPT-1.31/mptrack/Mptrack.cpp Sat Nov 2 01:23:53 2024 (r22060) +++ branches/OpenMPT-1.31/mptrack/Mptrack.cpp Sat Nov 2 01:26:34 2024 (r22061) @@ -1279,7 +1279,7 @@ // For Windows 10, Creators Update (1703) and newer { mpt::Library user32(mpt::LibraryPath::System(P_("user32"))); - if (user32.IsValid()) + if(user32.IsValid()) { enum MPT_DPI_AWARENESS_CONTEXT { @@ -1293,12 +1293,12 @@ PSETPROCESSDPIAWARENESSCONTEXT SetProcessDpiAwarenessContext = nullptr; if(user32.Bind(SetProcessDpiAwarenessContext, "SetProcessDpiAwarenessContext")) { - if (TrackerSettings::Instance().highResUI) + if(TrackerSettings::Instance().highResUI) { setDPI = (SetProcessDpiAwarenessContext(HANDLE(MPT_DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2)) == TRUE); } else { - if (SetProcessDpiAwarenessContext(HANDLE(MPT_DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED)) == TRUE) + if(TrackerSettings::Instance().useGDIUpcaling && SetProcessDpiAwarenessContext(HANDLE(MPT_DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED)) == TRUE) setDPI = true; else setDPI = (SetProcessDpiAwarenessContext(HANDLE(MPT_DPI_AWARENESS_CONTEXT_UNAWARE)) == TRUE); Modified: branches/OpenMPT-1.31/mptrack/TrackerSettings.cpp ============================================================================== --- branches/OpenMPT-1.31/mptrack/TrackerSettings.cpp Sat Nov 2 01:23:53 2024 (r22060) +++ branches/OpenMPT-1.31/mptrack/TrackerSettings.cpp Sat Nov 2 01:26:34 2024 (r22061) @@ -175,6 +175,7 @@ , m_ShowSplashScreen(conf, U_("Display"), U_("ShowSplashScreen"), true) , gbMdiMaximize(conf, U_("Display"), U_("MDIMaximize"), true) , highResUI(conf, U_("Display"), U_("HighResUI"), false) + , useGDIUpcaling(conf, UL_("Display"), UL_("UseGDIUpscaling"), true) , glTreeSplitRatio(conf, U_("Display"), U_("MDITreeRatio"), 128) , glTreeWindowWidth(conf, U_("Display"), U_("MDITreeWidth"), 160) , glGeneralWindowHeight(conf, U_("Display"), U_("MDIGeneralHeight"), 222) Modified: branches/OpenMPT-1.31/mptrack/TrackerSettings.h ============================================================================== --- branches/OpenMPT-1.31/mptrack/TrackerSettings.h Sat Nov 2 01:23:53 2024 (r22060) +++ branches/OpenMPT-1.31/mptrack/TrackerSettings.h Sat Nov 2 01:26:34 2024 (r22061) @@ -660,6 +660,7 @@ Setting<bool> m_ShowSplashScreen; Setting<bool> gbMdiMaximize; Setting<bool> highResUI; + Setting<bool> useGDIUpcaling; Setting<LONG> glTreeSplitRatio; Setting<LONG> glTreeWindowWidth; Setting<LONG> glGeneralWindowHeight; |
From: <sv...@op...> - 2024-11-02 00:24:05
|
Author: sagamusix Date: Sat Nov 2 01:23:53 2024 New Revision: 22060 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22060 Log: [Imp] Add the possibility to disable enhanced GDI upscaling via hidden setting Display.UseGDIUpcaling. This may fix issues that in particular some older VST plugins may be having when this mode is enabled (https://bugs.openmpt.org/view.php?id=1524). Modified: trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/mptrack/TrackerSettings.h Modified: trunk/OpenMPT/mptrack/Mptrack.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp Sat Nov 2 00:26:39 2024 (r22059) +++ trunk/OpenMPT/mptrack/Mptrack.cpp Sat Nov 2 01:23:53 2024 (r22060) @@ -1285,7 +1285,7 @@ // For Windows 10, Creators Update (1703) and newer { mpt::Library user32(mpt::LibraryPath::System(P_("user32"))); - if (user32.IsValid()) + if(user32.IsValid()) { enum MPT_DPI_AWARENESS_CONTEXT { @@ -1299,12 +1299,12 @@ PSETPROCESSDPIAWARENESSCONTEXT SetProcessDpiAwarenessContext = nullptr; if(user32.Bind(SetProcessDpiAwarenessContext, "SetProcessDpiAwarenessContext")) { - if (TrackerSettings::Instance().highResUI) + if(TrackerSettings::Instance().highResUI) { setDPI = (SetProcessDpiAwarenessContext(HANDLE(MPT_DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2)) == TRUE); } else { - if (SetProcessDpiAwarenessContext(HANDLE(MPT_DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED)) == TRUE) + if(TrackerSettings::Instance().useGDIUpcaling && SetProcessDpiAwarenessContext(HANDLE(MPT_DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED)) == TRUE) setDPI = true; else setDPI = (SetProcessDpiAwarenessContext(HANDLE(MPT_DPI_AWARENESS_CONTEXT_UNAWARE)) == TRUE); Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp ============================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp Sat Nov 2 00:26:39 2024 (r22059) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp Sat Nov 2 01:23:53 2024 (r22060) @@ -176,6 +176,7 @@ , m_ShowSplashScreen(conf, UL_("Display"), UL_("ShowSplashScreen"), true) , gbMdiMaximize(conf, UL_("Display"), UL_("MDIMaximize"), true) , highResUI(conf, UL_("Display"), UL_("HighResUI"), false) + , useGDIUpcaling(conf, UL_("Display"), UL_("UseGDIUpscaling"), true) , glTreeSplitRatio(conf, UL_("Display"), UL_("MDITreeRatio"), 128) , glTreeWindowWidth(conf, UL_("Display"), UL_("MDITreeWidth"), 160) , glGeneralWindowHeight(conf, UL_("Display"), UL_("MDIGeneralHeight"), 222) Modified: trunk/OpenMPT/mptrack/TrackerSettings.h ============================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.h Sat Nov 2 00:26:39 2024 (r22059) +++ trunk/OpenMPT/mptrack/TrackerSettings.h Sat Nov 2 01:23:53 2024 (r22060) @@ -669,6 +669,7 @@ Setting<bool> m_ShowSplashScreen; Setting<bool> gbMdiMaximize; Setting<bool> highResUI; + Setting<bool> useGDIUpcaling; Setting<LONG> glTreeSplitRatio; Setting<LONG> glTreeWindowWidth; Setting<LONG> glGeneralWindowHeight; |
From: <sv...@op...> - 2024-11-01 23:26:48
|
Author: sagamusix Date: Sat Nov 2 00:26:39 2024 New Revision: 22059 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22059 Log: [Ref] Use UL_ instead of U_ in TrackerSettings and CAboutDialog places to reduce binary size by about ~12KB. Modified: trunk/OpenMPT/mptrack/AboutDialog.cpp trunk/OpenMPT/mptrack/TrackerSettings.cpp Modified: trunk/OpenMPT/mptrack/AboutDialog.cpp ============================================================================== --- trunk/OpenMPT/mptrack/AboutDialog.cpp Fri Nov 1 23:47:42 2024 (r22058) +++ trunk/OpenMPT/mptrack/AboutDialog.cpp Sat Nov 2 00:26:39 2024 (r22059) @@ -250,14 +250,13 @@ DialogBase::OnInitDialog(); mpt::ustring app; - app += MPT_UFORMAT("OpenMPT{} ({} ({} bit))")( + app += MPT_UFORMAT("OpenMPT{} ({}, {} bit)\r\n")( mpt::ToUnicode(mpt::Charset::ASCII, OPENMPT_BUILD_VARIANT_MONIKER), mpt::OS::Windows::Name(mpt::OS::Windows::GetProcessArchitecture()), mpt::arch_bits) - + U_("\n"); - app += U_("Version ") + Build::GetVersionStringSimple() + U_("\n\n"); - app += Build::GetURL(Build::Url::Website) + U_("\n"); - SetDlgItemText(IDC_EDIT3, mpt::ToCString(mpt::replace(app, U_("\n"), U_("\r\n")))); + + UL_("Version ") + Build::GetVersionStringSimple() + UL_("\r\n\r\n") + + Build::GetURL(Build::Url::Website) + UL_("\r\n"); + SetDlgItemText(IDC_EDIT3, mpt::ToCString(app)); m_bmp.SubclassDlgItem(IDC_BITMAP1, this); @@ -303,10 +302,10 @@ std::vector<mpt::ustring> features; #if MPT_COMPILER_MSVC #if defined(MPT_ENABLE_ARCH_X86) - features.push_back(U_("x86")); + features.push_back(UL_("x86")); #endif #if defined(MPT_ENABLE_ARCH_AMD64) - features.push_back(U_("amd64")); + features.push_back(UL_("amd64")); #endif struct ProcFlag { @@ -342,9 +341,9 @@ mpt::ustring CAboutDlg::GetTabText(int tab) { - const mpt::ustring lf = U_("\n"); - const mpt::ustring yes = U_("yes"); - const mpt::ustring no = U_("no"); + const mpt::ustring lf = UL_("\n"); + const mpt::ustring yes = UL_("yes"); + const mpt::ustring no = UL_("no"); #ifdef MPT_ENABLE_ARCH_INTRINSICS const mpt::arch::current::cpu_info CPUInfo = mpt::arch::get_cpu_info(); #endif // MPT_ENABLE_ARCH_INTRINSICS @@ -352,7 +351,7 @@ switch(tab) { case 0: - text = U_("OpenMPT - Open ModPlug Tracker\n\n") + text = UL_("OpenMPT - Open ModPlug Tracker\n\n") + MPT_UFORMAT("Version: {}\n")(Build::GetVersionStringExtended()) + MPT_UFORMAT("Source Code: {}\n")(SourceInfo::Current().GetUrlWithRevision() + UL_(" ") + SourceInfo::Current().GetStateString()) + MPT_UFORMAT("Build Date: {}\n")(Build::GetBuildDateString()) @@ -361,18 +360,18 @@ + MPT_UFORMAT("Required Windows Kernel Level: {}\n")(mpt::OS::Windows::Version::GetName(mpt::OS::Windows::Version::GetMinimumKernelLevel())) + MPT_UFORMAT("Required Windows API Level: {}\n")(mpt::OS::Windows::Version::GetName(mpt::OS::Windows::Version::GetMinimumAPILevel())); { - text += U_("Required CPU features: "); + text += UL_("Required CPU features: "); std::vector<mpt::ustring> features; #ifdef MPT_ENABLE_ARCH_INTRINSICS #if MPT_ARCH_AMD64 - features.push_back(U_("x86-64")); - if(mpt::arch::current::assumed_features() & mpt::arch::current::feature::avx) features.push_back(U_("avx")); - if(mpt::arch::current::assumed_features() & mpt::arch::current::feature::avx2) features.push_back(U_("avx2")); + features.push_back(UL_("x86-64")); + if(mpt::arch::current::assumed_features() & mpt::arch::current::feature::avx) features.push_back(UL_("avx")); + if(mpt::arch::current::assumed_features() & mpt::arch::current::feature::avx2) features.push_back(UL_("avx2")); #elif MPT_ARCH_X86 - if(mpt::arch::current::assumed_features() & mpt::arch::current::feature::sse) features.push_back(U_("sse")); - if(mpt::arch::current::assumed_features() & mpt::arch::current::feature::sse2) features.push_back(U_("sse2")); - if(mpt::arch::current::assumed_features() & mpt::arch::current::feature::avx) features.push_back(U_("avx")); - if(mpt::arch::current::assumed_features() & mpt::arch::current::feature::avx2) features.push_back(U_("avx2")); + if(mpt::arch::current::assumed_features() & mpt::arch::current::feature::sse) features.push_back(UL_("sse")); + if(mpt::arch::current::assumed_features() & mpt::arch::current::feature::sse2) features.push_back(UL_("sse2")); + if(mpt::arch::current::assumed_features() & mpt::arch::current::feature::avx) features.push_back(UL_("avx")); + if(mpt::arch::current::assumed_features() & mpt::arch::current::feature::avx2) features.push_back(UL_("avx2")); #endif #endif text += mpt::join_format(features, U_(" ")); @@ -398,16 +397,16 @@ text += MPT_UFORMAT("Available CPU features: {}\n")(CPUFeaturesToString(CPUInfo.get_features())); #endif // MPT_ENABLE_ARCH_INTRINSICS text += MPT_UFORMAT("Operating System: {}\n\n")(mpt::OS::Windows::Version::GetCurrentName()); - text += MPT_UFORMAT("OpenMPT Install Path{1}: {0}\n")(theApp.GetInstallPath(), theApp.IsPortableMode() ? U_(" (portable)") : U_("")); - text += MPT_UFORMAT("OpenMPT Executable Path{1}: {0}\n")(theApp.GetInstallBinArchPath(), theApp.IsPortableMode() ? U_(" (portable)") : U_("")); - text += MPT_UFORMAT("Settings{1}: {0}\n")(theApp.GetConfigFileName(), theApp.IsPortableMode() ? U_(" (portable)") : U_("")); + text += MPT_UFORMAT("OpenMPT Install Path{1}: {0}\n")(theApp.GetInstallPath(), theApp.IsPortableMode() ? UL_(" (portable)") : UL_("")); + text += MPT_UFORMAT("OpenMPT Executable Path{1}: {0}\n")(theApp.GetInstallBinArchPath(), theApp.IsPortableMode() ? UL_(" (portable)") : UL_("")); + text += MPT_UFORMAT("Settings{1}: {0}\n")(theApp.GetConfigFileName(), theApp.IsPortableMode() ? UL_(" (portable)") : UL_("")); break; case 1: { std::vector<std::string> components = ComponentManager::Instance()->GetRegisteredComponents(); if(!TrackerSettings::Instance().ComponentsKeepLoaded) { - text += U_("Components are loaded and unloaded as needed.\n\n"); + text += UL_("Components are loaded and unloaded as needed.\n\n"); for(const auto &component : components) { ComponentInfo info = ComponentManager::Instance()->GetComponentInfo(component); @@ -424,10 +423,10 @@ { if(available) { - text += U_("Loaded Components:\n"); + text += UL_("Loaded Components:\n"); } else { - text += U_("\nUnloaded Components:\n"); + text += UL_("\nUnloaded Components:\n"); } for(const auto &component : components) { @@ -441,22 +440,22 @@ } text += MPT_UFORMAT("{}: {}") ( name - , info.state == ComponentStateAvailable ? U_("ok") : - info.state == ComponentStateUnavailable? U_("missing") : - info.state == ComponentStateUnintialized ? U_("not loaded") : - info.state == ComponentStateBlocked ? U_("blocked") : - info.state == ComponentStateUnregistered ? U_("unregistered") : - U_("unknown") + , info.state == ComponentStateAvailable ? UL_("ok") : + info.state == ComponentStateUnavailable? UL_("missing") : + info.state == ComponentStateUnintialized ? UL_("not loaded") : + info.state == ComponentStateBlocked ? UL_("blocked") : + info.state == ComponentStateUnregistered ? UL_("unregistered") : + UL_("unknown") ); if(info.type != ComponentTypeUnknown) { text += MPT_UFORMAT(" ({})") - ( info.type == ComponentTypeBuiltin ? U_("builtin") : - info.type == ComponentTypeSystem ? U_("system") : - info.type == ComponentTypeSystemInstallable ? U_("system, optional") : - info.type == ComponentTypeBundled ? U_("bundled") : - info.type == ComponentTypeForeign ? U_("foreign") : - U_("unknown") + ( info.type == ComponentTypeBuiltin ? UL_("builtin") : + info.type == ComponentTypeSystem ? UL_("system") : + info.type == ComponentTypeSystemInstallable ? UL_("system, optional") : + info.type == ComponentTypeBundled ? UL_("bundled") : + info.type == ComponentTypeForeign ? UL_("foreign") : + UL_("unknown") ); } text += lf; @@ -472,17 +471,17 @@ text += Build::GetLicenseString(); break; case 4: - text += U_("Website:\n") + Build::GetURL(Build::Url::Website); - text += U_("\n\nForum:\n") + Build::GetURL(Build::Url::Forum); - text += U_("\n\nBug Tracker:\n") + Build::GetURL(Build::Url::Bugtracker); - text += U_("\n\nUpdates:\n") + Build::GetURL(Build::Url::Updates); + text += UL_("Website:\n") + Build::GetURL(Build::Url::Website); + text += UL_("\n\nForum:\n") + Build::GetURL(Build::Url::Forum); + text += UL_("\n\nBug Tracker:\n") + Build::GetURL(Build::Url::Bugtracker); + text += UL_("\n\nUpdates:\n") + Build::GetURL(Build::Url::Updates); break; case 5: try { if(!theApp.GetWine()) { - text += U_("Wine integration not available.\n"); + text += UL_("Wine integration not available.\n"); } else { @@ -493,20 +492,20 @@ ); text += MPT_UFORMAT("Windows version: {}\n") ( - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win81) ? U_("Windows 8.1") : - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win8) ? U_("Windows 8") : - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win7) ? U_("Windows 7") : - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::WinVista) ? U_("Windows Vista") : - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::WinXP) ? U_("Windows XP") : - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win2000) ? U_("Windows 2000") : - mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::WinNT4) ? U_("Windows NT4") : - U_("unknown") + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win81) ? UL_("Windows 8.1") : + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win8) ? UL_("Windows 8") : + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win7) ? UL_("Windows 7") : + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::WinVista) ? UL_("Windows Vista") : + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::WinXP) ? UL_("Windows XP") : + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::Win2000) ? UL_("Windows 2000") : + mpt::osinfo::windows::Version::Current().IsAtLeast(mpt::osinfo::windows::Version::WinNT4) ? UL_("Windows NT4") : + UL_("unknown") ); text += MPT_UFORMAT("Windows original: {}\n") ( mpt::OS::Windows::IsOriginal() ? yes : no ); - text += U_("\n"); + text += UL_("\n"); text += MPT_UFORMAT("Wine: {}\n") ( mpt::OS::Windows::IsWine() ? yes : no @@ -524,7 +523,7 @@ ( mpt::ToUnicode(mpt::Charset::UTF8, wine.VersionContext().RawHostRelease()) ); - text += U_("\n"); + text += UL_("\n"); text += MPT_UFORMAT("uname -m: {}\n") ( mpt::ToUnicode(mpt::Charset::UTF8, wine.Uname_m()) @@ -542,7 +541,7 @@ ( mpt::ToUnicode(mpt::Charset::UTF8, wine.XDG_CONFIG_HOME()) ); - text += U_("\n"); + text += UL_("\n"); text += MPT_UFORMAT("OpenMPT folder: {}\n") ( theApp.GetInstallPath().ToUnicode() @@ -563,7 +562,7 @@ } } catch(const mpt::Wine::Exception & e) { - text += U_("Exception: ") + mpt::get_exception_text<mpt::ustring>(e) + U_("\n"); + text += UL_("Exception: ") + mpt::get_exception_text<mpt::ustring>(e) + UL_("\n"); } break; } Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp ============================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp Fri Nov 1 23:47:42 2024 (r22058) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp Sat Nov 2 00:26:39 2024 (r22059) @@ -119,19 +119,19 @@ : conf(conf_) // Debug #if !defined(MPT_LOG_IS_DISABLED) - , DebugLogLevel(conf, U_("Debug"), U_("LogLevel"), static_cast<int>(mpt::log::GlobalLogLevel)) - , DebugLogFacilitySolo(conf, U_("Debug"), U_("LogFacilitySolo"), std::string()) - , DebugLogFacilityBlocked(conf, U_("Debug"), U_("LogFacilityBlocked"), std::string()) - , DebugLogFileEnable(conf, U_("Debug"), U_("LogFileEnable"), mpt::log::FileEnabled) - , DebugLogDebuggerEnable(conf, U_("Debug"), U_("LogDebuggerEnable"), mpt::log::DebuggerEnabled) - , DebugLogConsoleEnable(conf, U_("Debug"), U_("LogConsoleEnable"), mpt::log::ConsoleEnabled) + , DebugLogLevel(conf, UL_("Debug"), UL_("LogLevel"), static_cast<int>(mpt::log::GlobalLogLevel)) + , DebugLogFacilitySolo(conf, UL_("Debug"), UL_("LogFacilitySolo"), std::string()) + , DebugLogFacilityBlocked(conf, UL_("Debug"), UL_("LogFacilityBlocked"), std::string()) + , DebugLogFileEnable(conf, UL_("Debug"), UL_("LogFileEnable"), mpt::log::FileEnabled) + , DebugLogDebuggerEnable(conf, UL_("Debug"), UL_("LogDebuggerEnable"), mpt::log::DebuggerEnabled) + , DebugLogConsoleEnable(conf, UL_("Debug"), UL_("LogConsoleEnable"), mpt::log::ConsoleEnabled) #endif - , DebugTraceEnable(conf, U_("Debug"), U_("TraceEnable"), false) - , DebugTraceSize(conf, U_("Debug"), U_("TraceSize"), 1000000) - , DebugTraceAlwaysDump(conf, U_("Debug"), U_("TraceAlwaysDump"), false) - , DebugStopSoundDeviceOnCrash(conf, U_("Debug"), U_("StopSoundDeviceOnCrash"), true) - , DebugStopSoundDeviceBeforeDump(conf, U_("Debug"), U_("StopSoundDeviceBeforeDump"), false) - , DebugDelegateToWindowsHandler(conf, U_("Debug"), U_("DelegateToWindowsHandler"), false) + , DebugTraceEnable(conf, UL_("Debug"), UL_("TraceEnable"), false) + , DebugTraceSize(conf, UL_("Debug"), UL_("TraceSize"), 1000000) + , DebugTraceAlwaysDump(conf, UL_("Debug"), UL_("TraceAlwaysDump"), false) + , DebugStopSoundDeviceOnCrash(conf, UL_("Debug"), UL_("StopSoundDeviceOnCrash"), true) + , DebugStopSoundDeviceBeforeDump(conf, UL_("Debug"), UL_("StopSoundDeviceBeforeDump"), false) + , DebugDelegateToWindowsHandler(conf, UL_("Debug"), UL_("DelegateToWindowsHandler"), false) { // Duplicate state for debug stuff in order to avoid calling into settings framework from crash context. @@ -168,216 +168,216 @@ TrackerSettings::TrackerSettings(SettingsContainer &conf) : conf(conf) // Version - , IniVersion(conf, U_("Version"), U_("Version"), mpt::ustring()) + , IniVersion(conf, UL_("Version"), UL_("Version"), mpt::ustring()) , FirstRun(IniVersion.Get() == mpt::ustring()) , PreviousSettingsVersion(GetPreviousSettingsVersion(IniVersion)) - , VersionInstallGUID(conf, U_("Version"), U_("InstallGUID"), mpt::UUID()) + , VersionInstallGUID(conf, UL_("Version"), UL_("InstallGUID"), mpt::UUID()) // Display - , m_ShowSplashScreen(conf, U_("Display"), U_("ShowSplashScreen"), true) - , gbMdiMaximize(conf, U_("Display"), U_("MDIMaximize"), true) - , highResUI(conf, U_("Display"), U_("HighResUI"), false) - , glTreeSplitRatio(conf, U_("Display"), U_("MDITreeRatio"), 128) - , glTreeWindowWidth(conf, U_("Display"), U_("MDITreeWidth"), 160) - , glGeneralWindowHeight(conf, U_("Display"), U_("MDIGeneralHeight"), 222) - , glPatternWindowHeight(conf, U_("Display"), U_("MDIPatternHeight"), 152) - , glSampleWindowHeight(conf, U_("Display"), U_("MDISampleHeight"), 190) - , glInstrumentWindowHeight(conf, U_("Display"), U_("MDIInstrumentHeight"), 300) - , glCommentsWindowHeight(conf, U_("Display"), U_("MDICommentsHeight"), 288) - , glGraphWindowHeight(conf, U_("Display"), U_("MDIGraphHeight"), 288) - , gnPlugWindowX(conf, U_("Display"), U_("PlugSelectWindowX"), 243) - , gnPlugWindowY(conf, U_("Display"), U_("PlugSelectWindowY"), 273) - , gnPlugWindowWidth(conf, U_("Display"), U_("PlugSelectWindowWidth"), 450) - , gnPlugWindowHeight(conf, U_("Display"), U_("PlugSelectWindowHeight"), 540) - , lastSelectedPlugin(conf, U_("Display"), U_("PlugSelectWindowLast"), {}) - , gnMsgBoxVisiblityFlags(conf, U_("Display"), U_("MsgBoxVisibilityFlags"), uint32_max) - , GUIUpdateInterval(conf, U_("Display"), U_("GUIUpdateInterval"), 0) - , FSUpdateInterval(conf, U_("Display"), U_("FSUpdateInterval"), 500) - , VuMeterUpdateInterval(conf, U_("Display"), U_("VuMeterUpdateInterval"), 15) - , VuMeterDecaySpeedDecibelPerSecond(conf, U_("Display"), U_("VuMeterDecaySpeedDecibelPerSecond"), 88.0f) - , accidentalFlats(conf, U_("Display"), U_("AccidentalFlats"), false) - , rememberSongWindows(conf, U_("Display"), U_("RememberSongWindows"), true) - , showDirsInSampleBrowser(conf, U_("Display"), U_("ShowDirsInSampleBrowser"), false) - , useOldStyleFolderBrowser(conf, U_("Display"), U_("UseOldStyleFolderBrowser"), false) - , defaultRainbowChannelColors(conf, U_("Display"), U_("DefaultChannelColors"), DefaultChannelColors::Random) - , commentsFont(conf, U_("Display"), U_("Comments Font"), FontSetting(U_("Courier New"), 120)) + , m_ShowSplashScreen(conf, UL_("Display"), UL_("ShowSplashScreen"), true) + , gbMdiMaximize(conf, UL_("Display"), UL_("MDIMaximize"), true) + , highResUI(conf, UL_("Display"), UL_("HighResUI"), false) + , glTreeSplitRatio(conf, UL_("Display"), UL_("MDITreeRatio"), 128) + , glTreeWindowWidth(conf, UL_("Display"), UL_("MDITreeWidth"), 160) + , glGeneralWindowHeight(conf, UL_("Display"), UL_("MDIGeneralHeight"), 222) + , glPatternWindowHeight(conf, UL_("Display"), UL_("MDIPatternHeight"), 152) + , glSampleWindowHeight(conf, UL_("Display"), UL_("MDISampleHeight"), 190) + , glInstrumentWindowHeight(conf, UL_("Display"), UL_("MDIInstrumentHeight"), 300) + , glCommentsWindowHeight(conf, UL_("Display"), UL_("MDICommentsHeight"), 288) + , glGraphWindowHeight(conf, UL_("Display"), UL_("MDIGraphHeight"), 288) + , gnPlugWindowX(conf, UL_("Display"), UL_("PlugSelectWindowX"), 243) + , gnPlugWindowY(conf, UL_("Display"), UL_("PlugSelectWindowY"), 273) + , gnPlugWindowWidth(conf, UL_("Display"), UL_("PlugSelectWindowWidth"), 450) + , gnPlugWindowHeight(conf, UL_("Display"), UL_("PlugSelectWindowHeight"), 540) + , lastSelectedPlugin(conf, UL_("Display"), UL_("PlugSelectWindowLast"), {}) + , gnMsgBoxVisiblityFlags(conf, UL_("Display"), UL_("MsgBoxVisibilityFlags"), uint32_max) + , GUIUpdateInterval(conf, UL_("Display"), UL_("GUIUpdateInterval"), 0) + , FSUpdateInterval(conf, UL_("Display"), UL_("FSUpdateInterval"), 500) + , VuMeterUpdateInterval(conf, UL_("Display"), UL_("VuMeterUpdateInterval"), 15) + , VuMeterDecaySpeedDecibelPerSecond(conf, UL_("Display"), UL_("VuMeterDecaySpeedDecibelPerSecond"), 88.0f) + , accidentalFlats(conf, UL_("Display"), UL_("AccidentalFlats"), false) + , rememberSongWindows(conf, UL_("Display"), UL_("RememberSongWindows"), true) + , showDirsInSampleBrowser(conf, UL_("Display"), UL_("ShowDirsInSampleBrowser"), false) + , useOldStyleFolderBrowser(conf, UL_("Display"), UL_("UseOldStyleFolderBrowser"), false) + , defaultRainbowChannelColors(conf, UL_("Display"), UL_("DefaultChannelColors"), DefaultChannelColors::Random) + , commentsFont(conf, UL_("Display"), UL_("Comments Font"), FontSetting(UL_("Courier New"), 120)) // Misc - , defaultModType(conf, U_("Misc"), U_("DefaultModType"), MOD_TYPE_IT) - , defaultNewFileAction(conf, U_("Misc"), U_("DefaultNewFileAction"), nfDefaultFormat) - , DefaultPlugVolumeHandling(conf, U_("Misc"), U_("DefaultPlugVolumeHandling"), PLUGIN_VOLUMEHANDLING_IGNORE) - , autoApplySmoothFT2Ramping(conf, U_("Misc"), U_("SmoothFT2Ramping"), false) - , MiscITCompressionStereo(conf, U_("Misc"), U_("ITCompressionStereo"), 4) - , MiscITCompressionMono(conf, U_("Misc"), U_("ITCompressionMono"), 7) - , MiscSaveChannelMuteStatus(conf, U_("Misc"), U_("SaveChannelMuteStatus"), true) - , MiscAllowMultipleCommandsPerKey(conf, U_("Misc"), U_("AllowMultipleCommandsPerKey"), false) - , MiscDistinguishModifiers(conf, U_("Misc"), U_("DistinguishModifiers"), false) - , MiscProcessPriorityClass(conf, U_("Misc"), U_("ProcessPriorityClass"), ProcessPriorityClassNORMAL) - , MiscFlushFileBuffersOnSave(conf, U_("Misc"), U_("FlushFileBuffersOnSave"), true) - , MiscCacheCompleteFileBeforeLoading(conf, U_("Misc"), U_("CacheCompleteFileBeforeLoading"), false) - , MiscUseSingleInstance(conf, U_("Misc"), U_("UseSingleInstance"), false) + , defaultModType(conf, UL_("Misc"), UL_("DefaultModType"), MOD_TYPE_IT) + , defaultNewFileAction(conf, UL_("Misc"), UL_("DefaultNewFileAction"), nfDefaultFormat) + , DefaultPlugVolumeHandling(conf, UL_("Misc"), UL_("DefaultPlugVolumeHandling"), PLUGIN_VOLUMEHANDLING_IGNORE) + , autoApplySmoothFT2Ramping(conf, UL_("Misc"), UL_("SmoothFT2Ramping"), false) + , MiscITCompressionStereo(conf, UL_("Misc"), UL_("ITCompressionStereo"), 4) + , MiscITCompressionMono(conf, UL_("Misc"), UL_("ITCompressionMono"), 7) + , MiscSaveChannelMuteStatus(conf, UL_("Misc"), UL_("SaveChannelMuteStatus"), true) + , MiscAllowMultipleCommandsPerKey(conf, UL_("Misc"), UL_("AllowMultipleCommandsPerKey"), false) + , MiscDistinguishModifiers(conf, UL_("Misc"), UL_("DistinguishModifiers"), false) + , MiscProcessPriorityClass(conf, UL_("Misc"), UL_("ProcessPriorityClass"), ProcessPriorityClassNORMAL) + , MiscFlushFileBuffersOnSave(conf, UL_("Misc"), UL_("FlushFileBuffersOnSave"), true) + , MiscCacheCompleteFileBeforeLoading(conf, UL_("Misc"), UL_("CacheCompleteFileBeforeLoading"), false) + , MiscUseSingleInstance(conf, UL_("Misc"), UL_("UseSingleInstance"), false) // Sound Settings , m_SoundShowRecordingSettings(false) - , m_SoundShowDeprecatedDevices(conf, U_("Sound Settings"), U_("ShowDeprecatedDevices"), false) - , m_SoundDeprecatedDeviceWarningShown(conf, U_("Sound Settings"), U_("DeprecatedDeviceWarningShown"), false) - , m_SoundSampleRates(conf, U_("Sound Settings"), U_("SampleRates"), GetDefaultSampleRates()) - , m_SoundSettingsOpenDeviceAtStartup(conf, U_("Sound Settings"), U_("OpenDeviceAtStartup"), false) - , m_SoundSettingsStopMode(conf, U_("Sound Settings"), U_("StopMode"), SoundDeviceStopModeClosed) + , m_SoundShowDeprecatedDevices(conf, UL_("Sound Settings"), UL_("ShowDeprecatedDevices"), false) + , m_SoundDeprecatedDeviceWarningShown(conf, UL_("Sound Settings"), UL_("DeprecatedDeviceWarningShown"), false) + , m_SoundSampleRates(conf, UL_("Sound Settings"), UL_("SampleRates"), GetDefaultSampleRates()) + , m_SoundSettingsOpenDeviceAtStartup(conf, UL_("Sound Settings"), UL_("OpenDeviceAtStartup"), false) + , m_SoundSettingsStopMode(conf, UL_("Sound Settings"), UL_("StopMode"), SoundDeviceStopModeClosed) , m_SoundDeviceSettingsUseOldDefaults(false) , m_SoundDeviceID_DEPRECATED(SoundDevice::Legacy::ID()) - , m_SoundDeviceIdentifier(conf, U_("Sound Settings"), U_("Device"), SoundDevice::Identifier()) - , MixerMaxChannels(conf, U_("Sound Settings"), U_("MixChannels"), MixerSettings().m_nMaxMixChannels) - , MixerDSPMask(conf, U_("Sound Settings"), U_("Quality"), MixerSettings().DSPMask) - , MixerFlags(conf, U_("Sound Settings"), U_("SoundSetup"), MixerSettings().MixerFlags) - , MixerSamplerate(conf, U_("Sound Settings"), U_("Mixing_Rate"), MixerSettings().gdwMixingFreq) - , MixerOutputChannels(conf, U_("Sound Settings"), U_("ChannelMode"), MixerSettings().gnChannels) - , MixerPreAmp(conf, U_("Sound Settings"), U_("PreAmp"), MixerSettings().m_nPreAmp) - , MixerStereoSeparation(conf, U_("Sound Settings"), U_("StereoSeparation"), MixerSettings().m_nStereoSeparation) - , MixerVolumeRampUpMicroseconds(conf, U_("Sound Settings"), U_("VolumeRampUpMicroseconds"), MixerSettings().GetVolumeRampUpMicroseconds()) - , MixerVolumeRampDownMicroseconds(conf, U_("Sound Settings"), U_("VolumeRampDownMicroseconds"), MixerSettings().GetVolumeRampDownMicroseconds()) - , MixerNumInputChannels(conf, U_("Sound Settings"), U_("NumInputChannels"), static_cast<uint32>(MixerSettings().NumInputChannels)) - , ResamplerMode(conf, U_("Sound Settings"), U_("SrcMode"), CResamplerSettings().SrcMode) - , ResamplerSubMode(conf, U_("Sound Settings"), U_("XMMSModplugResamplerWFIRType"), CResamplerSettings().gbWFIRType) - , ResamplerCutoffPercent(conf, U_("Sound Settings"), U_("ResamplerWFIRCutoff"), mpt::saturate_round<int32>(CResamplerSettings().gdWFIRCutoff * 100.0)) - , ResamplerEmulateAmiga(conf, U_("Sound Settings"), U_("ResamplerEmulateAmiga"), Resampling::AmigaFilter::A1200) - , SoundBoostedThreadPriority(conf, U_("Sound Settings"), U_("BoostedThreadPriority"), SoundDevice::AppInfo().BoostedThreadPriorityXP) - , SoundBoostedThreadMMCSSClass(conf, U_("Sound Settings"), U_("BoostedThreadMMCSSClass"), SoundDevice::AppInfo().BoostedThreadMMCSSClassVista) - , SoundBoostedThreadRealtimePosix(conf, U_("Sound Settings"), U_("BoostedThreadRealtimeLinux"), SoundDevice::AppInfo().BoostedThreadRealtimePosix) - , SoundBoostedThreadNicenessPosix(conf, U_("Sound Settings"), U_("BoostedThreadNicenessPosix"), SoundDevice::AppInfo().BoostedThreadNicenessPosix) - , SoundBoostedThreadRtprioPosix(conf, U_("Sound Settings"), U_("BoostedThreadRtprioLinux"), SoundDevice::AppInfo().BoostedThreadRtprioPosix) - , SoundMaskDriverCrashes(conf, U_("Sound Settings"), U_("MaskDriverCrashes"), SoundDevice::AppInfo().MaskDriverCrashes) - , SoundAllowDeferredProcessing(conf, U_("Sound Settings"), U_("AllowDeferredProcessing"), SoundDevice::AppInfo().AllowDeferredProcessing) + , m_SoundDeviceIdentifier(conf, UL_("Sound Settings"), UL_("Device"), SoundDevice::Identifier()) + , MixerMaxChannels(conf, UL_("Sound Settings"), UL_("MixChannels"), MixerSettings().m_nMaxMixChannels) + , MixerDSPMask(conf, UL_("Sound Settings"), UL_("Quality"), MixerSettings().DSPMask) + , MixerFlags(conf, UL_("Sound Settings"), UL_("SoundSetup"), MixerSettings().MixerFlags) + , MixerSamplerate(conf, UL_("Sound Settings"), UL_("Mixing_Rate"), MixerSettings().gdwMixingFreq) + , MixerOutputChannels(conf, UL_("Sound Settings"), UL_("ChannelMode"), MixerSettings().gnChannels) + , MixerPreAmp(conf, UL_("Sound Settings"), UL_("PreAmp"), MixerSettings().m_nPreAmp) + , MixerStereoSeparation(conf, UL_("Sound Settings"), UL_("StereoSeparation"), MixerSettings().m_nStereoSeparation) + , MixerVolumeRampUpMicroseconds(conf, UL_("Sound Settings"), UL_("VolumeRampUpMicroseconds"), MixerSettings().GetVolumeRampUpMicroseconds()) + , MixerVolumeRampDownMicroseconds(conf, UL_("Sound Settings"), UL_("VolumeRampDownMicroseconds"), MixerSettings().GetVolumeRampDownMicroseconds()) + , MixerNumInputChannels(conf, UL_("Sound Settings"), UL_("NumInputChannels"), static_cast<uint32>(MixerSettings().NumInputChannels)) + , ResamplerMode(conf, UL_("Sound Settings"), UL_("SrcMode"), CResamplerSettings().SrcMode) + , ResamplerSubMode(conf, UL_("Sound Settings"), UL_("XMMSModplugResamplerWFIRType"), CResamplerSettings().gbWFIRType) + , ResamplerCutoffPercent(conf, UL_("Sound Settings"), UL_("ResamplerWFIRCutoff"), mpt::saturate_round<int32>(CResamplerSettings().gdWFIRCutoff * 100.0)) + , ResamplerEmulateAmiga(conf, UL_("Sound Settings"), UL_("ResamplerEmulateAmiga"), Resampling::AmigaFilter::A1200) + , SoundBoostedThreadPriority(conf, UL_("Sound Settings"), UL_("BoostedThreadPriority"), SoundDevice::AppInfo().BoostedThreadPriorityXP) + , SoundBoostedThreadMMCSSClass(conf, UL_("Sound Settings"), UL_("BoostedThreadMMCSSClass"), SoundDevice::AppInfo().BoostedThreadMMCSSClassVista) + , SoundBoostedThreadRealtimePosix(conf, UL_("Sound Settings"), UL_("BoostedThreadRealtimeLinux"), SoundDevice::AppInfo().BoostedThreadRealtimePosix) + , SoundBoostedThreadNicenessPosix(conf, UL_("Sound Settings"), UL_("BoostedThreadNicenessPosix"), SoundDevice::AppInfo().BoostedThreadNicenessPosix) + , SoundBoostedThreadRtprioPosix(conf, UL_("Sound Settings"), UL_("BoostedThreadRtprioLinux"), SoundDevice::AppInfo().BoostedThreadRtprioPosix) + , SoundMaskDriverCrashes(conf, UL_("Sound Settings"), UL_("MaskDriverCrashes"), SoundDevice::AppInfo().MaskDriverCrashes) + , SoundAllowDeferredProcessing(conf, UL_("Sound Settings"), UL_("AllowDeferredProcessing"), SoundDevice::AppInfo().AllowDeferredProcessing) // MIDI Settings - , m_nMidiDevice(conf, U_("MIDI Settings"), U_("MidiDevice"), 0) - , midiDeviceName(conf, U_("MIDI Settings"), U_("MidiDeviceName"), _T("")) - , m_dwMidiSetup(conf, U_("MIDI Settings"), U_("MidiSetup"), MIDISETUP_RECORDVELOCITY | MIDISETUP_RECORDNOTEOFF | MIDISETUP_TRANSPOSEKEYBOARD | MIDISETUP_MIDITOPLUG) - , aftertouchBehaviour(conf, U_("MIDI Settings"), U_("AftertouchBehaviour"), atDoNotRecord) - , midiVelocityAmp(conf, U_("MIDI Settings"), U_("MidiVelocityAmp"), 100) - , midiIgnoreCCs(conf, U_("MIDI Settings"), U_("IgnoredCCs"), std::bitset<128>()) - , midiImportPatternLen(conf, U_("MIDI Settings"), U_("MidiImportPatLen"), 128) - , midiImportQuantize(conf, U_("MIDI Settings"), U_("MidiImportQuantize"), 32) - , midiImportTicks(conf, U_("MIDI Settings"), U_("MidiImportTicks"), 6) + , m_nMidiDevice(conf, UL_("MIDI Settings"), UL_("MidiDevice"), 0) + , midiDeviceName(conf, UL_("MIDI Settings"), UL_("MidiDeviceName"), _T("")) + , m_dwMidiSetup(conf, UL_("MIDI Settings"), UL_("MidiSetup"), MIDISETUP_RECORDVELOCITY | MIDISETUP_RECORDNOTEOFF | MIDISETUP_TRANSPOSEKEYBOARD | MIDISETUP_MIDITOPLUG) + , aftertouchBehaviour(conf, UL_("MIDI Settings"), UL_("AftertouchBehaviour"), atDoNotRecord) + , midiVelocityAmp(conf, UL_("MIDI Settings"), UL_("MidiVelocityAmp"), 100) + , midiIgnoreCCs(conf, UL_("MIDI Settings"), UL_("IgnoredCCs"), std::bitset<128>()) + , midiImportPatternLen(conf, UL_("MIDI Settings"), UL_("MidiImportPatLen"), 128) + , midiImportQuantize(conf, UL_("MIDI Settings"), UL_("MidiImportQuantize"), 32) + , midiImportTicks(conf, UL_("MIDI Settings"), UL_("MidiImportTicks"), 6) // Pattern Editor - , gbLoopSong(conf, U_("Pattern Editor"), U_("LoopSong"), true) - , gnPatternSpacing(conf, U_("Pattern Editor"), U_("Spacing"), 0) - , gbPatternVUMeters(conf, U_("Pattern Editor"), U_("VU-Meters"), true) - , gbPatternPluginNames(conf, U_("Pattern Editor"), U_("Plugin-Names"), true) - , gbPatternRecord(conf, U_("Pattern Editor"), U_("Record"), true) - , patternNoEditPopup(conf, U_("Pattern Editor"), U_("NoEditPopup"), false) - , patternStepCommands(conf, U_("Pattern Editor"), U_("EditStepAppliesToCommands"), false) - , m_dwPatternSetup(conf, U_("Pattern Editor"), U_("PatternSetup"), GetDefaultPatternSetup()) - , m_nRowHighlightMeasures(conf, U_("Pattern Editor"), U_("RowSpacing"), 16) - , m_nRowHighlightBeats(conf, U_("Pattern Editor"), U_("RowSpacing2"), 4) - , patternIgnoreSongTimeSignature(conf, U_("Pattern Editor"), U_("IgnoreSongTimeSignature"), false) - , recordQuantizeRows(conf, U_("Pattern Editor"), U_("RecordQuantize"), 0) - , gnAutoChordWaitTime(conf, U_("Pattern Editor"), U_("AutoChordWaitTime"), 60) - , orderlistMargins(conf, U_("Pattern Editor"), U_("DefaultSequenceMargins"), 0) - , rowDisplayOffset(conf, U_("Pattern Editor"), U_("RowDisplayOffset"), 0) - , patternFont(conf, U_("Pattern Editor"), U_("Font"), FontSetting(PATTERNFONT_SMALL, 0)) - , patternFontDot(conf, U_("Pattern Editor"), U_("FontDot"), U_(".")) - , effectVisWidth(conf, U_("Pattern Editor"), U_("EffectVisWidth"), -1) - , effectVisHeight(conf, U_("Pattern Editor"), U_("EffectVisHeight"), -1) - , effectVisX(conf, U_("Pattern Editor"), U_("EffectVisX"), int32_min) - , effectVisY(conf, U_("Pattern Editor"), U_("EffectVisY"), int32_min) - , patternAccessibilityFormat(conf, U_("Pattern Editor"), U_("AccessibilityFormat"), _T("Row %row%, Channel %channel%, %column_type%: %column_description%")) - , patternAlwaysDrawWholePatternOnScrollSlow(conf, U_("Pattern Editor"), U_("AlwaysDrawWholePatternOnScrollSlow"), false) - , orderListOldDropBehaviour(conf, U_("Pattern Editor"), U_("OrderListOldDropBehaviour"), false) + , gbLoopSong(conf, UL_("Pattern Editor"), UL_("LoopSong"), true) + , gnPatternSpacing(conf, UL_("Pattern Editor"), UL_("Spacing"), 0) + , gbPatternVUMeters(conf, UL_("Pattern Editor"), UL_("VU-Meters"), true) + , gbPatternPluginNames(conf, UL_("Pattern Editor"), UL_("Plugin-Names"), true) + , gbPatternRecord(conf, UL_("Pattern Editor"), UL_("Record"), true) + , patternNoEditPopup(conf, UL_("Pattern Editor"), UL_("NoEditPopup"), false) + , patternStepCommands(conf, UL_("Pattern Editor"), UL_("EditStepAppliesToCommands"), false) + , m_dwPatternSetup(conf, UL_("Pattern Editor"), UL_("PatternSetup"), GetDefaultPatternSetup()) + , m_nRowHighlightMeasures(conf, UL_("Pattern Editor"), UL_("RowSpacing"), 16) + , m_nRowHighlightBeats(conf, UL_("Pattern Editor"), UL_("RowSpacing2"), 4) + , patternIgnoreSongTimeSignature(conf, UL_("Pattern Editor"), UL_("IgnoreSongTimeSignature"), false) + , recordQuantizeRows(conf, UL_("Pattern Editor"), UL_("RecordQuantize"), 0) + , gnAutoChordWaitTime(conf, UL_("Pattern Editor"), UL_("AutoChordWaitTime"), 60) + , orderlistMargins(conf, UL_("Pattern Editor"), UL_("DefaultSequenceMargins"), 0) + , rowDisplayOffset(conf, UL_("Pattern Editor"), UL_("RowDisplayOffset"), 0) + , patternFont(conf, UL_("Pattern Editor"), UL_("Font"), FontSetting(PATTERNFONT_SMALL, 0)) + , patternFontDot(conf, UL_("Pattern Editor"), UL_("FontDot"), UL_(".")) + , effectVisWidth(conf, UL_("Pattern Editor"), UL_("EffectVisWidth"), -1) + , effectVisHeight(conf, UL_("Pattern Editor"), UL_("EffectVisHeight"), -1) + , effectVisX(conf, UL_("Pattern Editor"), UL_("EffectVisX"), int32_min) + , effectVisY(conf, UL_("Pattern Editor"), UL_("EffectVisY"), int32_min) + , patternAccessibilityFormat(conf, UL_("Pattern Editor"), UL_("AccessibilityFormat"), _T("Row %row%, Channel %channel%, %column_type%: %column_description%")) + , patternAlwaysDrawWholePatternOnScrollSlow(conf, UL_("Pattern Editor"), UL_("AlwaysDrawWholePatternOnScrollSlow"), false) + , orderListOldDropBehaviour(conf, UL_("Pattern Editor"), UL_("OrderListOldDropBehaviour"), false) // Sample Editor - , m_SampleUndoBufferSize(conf, U_("Sample Editor"), U_("UndoBufferSize"), SampleUndoBufferSize()) - , sampleEditorKeyBehaviour(conf, U_("Sample Editor"), U_("KeyBehaviour"), seNoteOffOnNewKey) - , m_defaultSampleFormat(conf, U_("Sample Editor"), U_("DefaultFormat"), dfFLAC) - , m_followSamplePlayCursor(conf, U_("Sample Editor"), U_("FollowSamplePlayCursor"), FollowSamplePlayCursor::DoNotFollow) - , sampleEditorTimelineFormat(conf, U_("Sample Editor"), U_("TimelineFormat"), TimelineFormat::Seconds) - , sampleEditorDefaultResampler(conf, U_("Sample Editor"), U_("DefaultResampler"), SRCMODE_DEFAULT) - , m_nFinetuneStep(conf, U_("Sample Editor"), U_("FinetuneStep"), 10) - , m_FLACCompressionLevel(conf, U_("Sample Editor"), U_("FLACCompressionLevel"), 5) - , compressITI(conf, U_("Sample Editor"), U_("CompressITI"), true) - , m_MayNormalizeSamplesOnLoad(conf, U_("Sample Editor"), U_("MayNormalizeSamplesOnLoad"), true) - , previewInFileDialogs(conf, U_("Sample Editor"), U_("PreviewInFileDialogs"), false) - , cursorPositionInHex(conf, U_("Sample Editor"), U_("CursorPositionInHex"), false) + , m_SampleUndoBufferSize(conf, UL_("Sample Editor"), UL_("UndoBufferSize"), SampleUndoBufferSize()) + , sampleEditorKeyBehaviour(conf, UL_("Sample Editor"), UL_("KeyBehaviour"), seNoteOffOnNewKey) + , m_defaultSampleFormat(conf, UL_("Sample Editor"), UL_("DefaultFormat"), dfFLAC) + , m_followSamplePlayCursor(conf, UL_("Sample Editor"), UL_("FollowSamplePlayCursor"), FollowSamplePlayCursor::DoNotFollow) + , sampleEditorTimelineFormat(conf, UL_("Sample Editor"), UL_("TimelineFormat"), TimelineFormat::Seconds) + , sampleEditorDefaultResampler(conf, UL_("Sample Editor"), UL_("DefaultResampler"), SRCMODE_DEFAULT) + , m_nFinetuneStep(conf, UL_("Sample Editor"), UL_("FinetuneStep"), 10) + , m_FLACCompressionLevel(conf, UL_("Sample Editor"), UL_("FLACCompressionLevel"), 5) + , compressITI(conf, UL_("Sample Editor"), UL_("CompressITI"), true) + , m_MayNormalizeSamplesOnLoad(conf, UL_("Sample Editor"), UL_("MayNormalizeSamplesOnLoad"), true) + , previewInFileDialogs(conf, UL_("Sample Editor"), UL_("PreviewInFileDialogs"), false) + , cursorPositionInHex(conf, UL_("Sample Editor"), UL_("CursorPositionInHex"), false) // Export - , ExportDefaultToSoundcardSamplerate(conf, U_("Export"), U_("DefaultToSoundcardSamplerate"), true) - , ExportStreamEncoderSettings(conf, U_("Export")) - , ExportNormalize(conf, U_("Export"), U_("Normalize"), false) - , ExportClearPluginBuffers(conf, U_("Export"), U_("ClearPluginBuffers"), true) + , ExportDefaultToSoundcardSamplerate(conf, UL_("Export"), UL_("DefaultToSoundcardSamplerate"), true) + , ExportStreamEncoderSettings(conf, UL_("Export")) + , ExportNormalize(conf, UL_("Export"), UL_("Normalize"), false) + , ExportClearPluginBuffers(conf, UL_("Export"), UL_("ClearPluginBuffers"), true) // Components - , ComponentsLoadOnStartup(conf, U_("Components"), U_("LoadOnStartup"), ComponentManagerSettingsDefault().LoadOnStartup()) - , ComponentsKeepLoaded(conf, U_("Components"), U_("KeepLoaded"), ComponentManagerSettingsDefault().KeepLoaded()) + , ComponentsLoadOnStartup(conf, UL_("Components"), UL_("LoadOnStartup"), ComponentManagerSettingsDefault().LoadOnStartup()) + , ComponentsKeepLoaded(conf, UL_("Components"), UL_("KeepLoaded"), ComponentManagerSettingsDefault().KeepLoaded()) // AutoSave - , CreateBackupFiles(conf, U_("AutoSave"), U_("CreateBackupFiles"), true) - , AutosaveEnabled(conf, U_("AutoSave"), U_("Enabled"), true) - , AutosaveIntervalMinutes(conf, U_("AutoSave"), U_("IntervalMinutes"), 10) - , AutosaveHistoryDepth(conf, U_("AutoSave"), U_("BackupHistory"), 3) - , AutosaveUseOriginalPath(conf, U_("AutoSave"), U_("UseOriginalPath"), true) - , AutosavePath(conf, U_("AutoSave"), U_("Path"), mpt::common_directories::get_temp_directory()) + , CreateBackupFiles(conf, UL_("AutoSave"), UL_("CreateBackupFiles"), true) + , AutosaveEnabled(conf, UL_("AutoSave"), UL_("Enabled"), true) + , AutosaveIntervalMinutes(conf, UL_("AutoSave"), UL_("IntervalMinutes"), 10) + , AutosaveHistoryDepth(conf, UL_("AutoSave"), UL_("BackupHistory"), 3) + , AutosaveUseOriginalPath(conf, UL_("AutoSave"), UL_("UseOriginalPath"), true) + , AutosavePath(conf, UL_("AutoSave"), UL_("Path"), mpt::common_directories::get_temp_directory()) // Paths - , PathSongs(conf, U_("Paths"), U_("Songs_Directory"), mpt::PathString()) - , PathSamples(conf, U_("Paths"), U_("Samples_Directory"), mpt::PathString()) - , PathInstruments(conf, U_("Paths"), U_("Instruments_Directory"), mpt::PathString()) - , PathPlugins(conf, U_("Paths"), U_("Plugins_Directory"), mpt::PathString()) - , PathPluginPresets(conf, U_("Paths"), U_("Plugin_Presets_Directory"), mpt::PathString()) - , PathExport(conf, U_("Paths"), U_("Export_Directory"), mpt::PathString()) + , PathSongs(conf, UL_("Paths"), UL_("Songs_Directory"), mpt::PathString()) + , PathSamples(conf, UL_("Paths"), UL_("Samples_Directory"), mpt::PathString()) + , PathInstruments(conf, UL_("Paths"), UL_("Instruments_Directory"), mpt::PathString()) + , PathPlugins(conf, UL_("Paths"), UL_("Plugins_Directory"), mpt::PathString()) + , PathPluginPresets(conf, UL_("Paths"), UL_("Plugin_Presets_Directory"), mpt::PathString()) + , PathExport(conf, UL_("Paths"), UL_("Export_Directory"), mpt::PathString()) , PathTunings(theApp.GetConfigPath() + P_("tunings\\")) , PathUserTemplates(theApp.GetConfigPath() + P_("TemplateModules\\")) // Default template - , defaultTemplateFile(conf, U_("Paths"), U_("DefaultTemplate"), mpt::PathString()) - , defaultArtist(conf, U_("Misc"), U_("DefaultArtist"), mpt::getenv(U_("USERNAME")).value_or(U_(""))) + , defaultTemplateFile(conf, UL_("Paths"), UL_("DefaultTemplate"), mpt::PathString()) + , defaultArtist(conf, UL_("Misc"), UL_("DefaultArtist"), mpt::getenv(UL_("USERNAME")).value_or(UL_(""))) // MRU List - , mruListLength(conf, U_("Misc"), U_("MRUListLength"), 10) + , mruListLength(conf, UL_("Misc"), UL_("MRUListLength"), 10) // Plugins - , bridgeAllPlugins(conf, U_("VST Plugins"), U_("BridgeAllPlugins"), false) - , enableAutoSuspend(conf, U_("VST Plugins"), U_("EnableAutoSuspend"), false) - , midiMappingInPluginEditor(conf, U_("VST Plugins"), U_("EnableMidiMappingInEditor"), true) - , pluginProjectPath(conf, U_("VST Plugins"), U_("ProjectPath"), mpt::ustring()) - , vstHostProductString(conf, U_("VST Plugins"), U_("HostProductString"), "OpenMPT") - , vstHostVendorString(conf, U_("VST Plugins"), U_("HostVendorString"), "OpenMPT project") - , vstHostVendorVersion(conf, U_("VST Plugins"), U_("HostVendorVersion"), Version::Current().GetRawVersion()) + , bridgeAllPlugins(conf, UL_("VST Plugins"), UL_("BridgeAllPlugins"), false) + , enableAutoSuspend(conf, UL_("VST Plugins"), UL_("EnableAutoSuspend"), false) + , midiMappingInPluginEditor(conf, UL_("VST Plugins"), UL_("EnableMidiMappingInEditor"), true) + , pluginProjectPath(conf, UL_("VST Plugins"), UL_("ProjectPath"), mpt::ustring()) + , vstHostProductString(conf, UL_("VST Plugins"), UL_("HostProductString"), "OpenMPT") + , vstHostVendorString(conf, UL_("VST Plugins"), UL_("HostVendorString"), "OpenMPT project") + , vstHostVendorVersion(conf, UL_("VST Plugins"), UL_("HostVendorVersion"), Version::Current().GetRawVersion()) // Broken Plugins Workarounds - , BrokenPluginsWorkaroundVSTMaskAllCrashes(conf, U_("Broken Plugins Workarounds"), U_("VSTMaskAllCrashes"), true) // TODO: really should be false - , BrokenPluginsWorkaroundVSTNeverUnloadAnyPlugin(conf, U_("Broken Plugins Workarounds"), U_("VSTNeverUnloadAnyPlugin"), false) + , BrokenPluginsWorkaroundVSTMaskAllCrashes(conf, UL_("Broken Plugins Workarounds"), UL_("VSTMaskAllCrashes"), true) // TODO: really should be false + , BrokenPluginsWorkaroundVSTNeverUnloadAnyPlugin(conf, UL_("Broken Plugins Workarounds"), UL_("VSTNeverUnloadAnyPlugin"), false) #if defined(MPT_ENABLE_UPDATE) // Update - , UpdateEnabled(conf, U_("Update"), U_("Enabled"), true) - , UpdateInstallAutomatically(conf, U_("Update"), U_("InstallAutomatically"), false) - , UpdateLastUpdateCheck(conf, U_("Update"), U_("LastUpdateCheck"), mpt::Date::Unix{}) - , UpdateUpdateCheckPeriod_DEPRECATED(conf, U_("Update"), U_("UpdateCheckPeriod"), 7) - , UpdateIntervalDays(conf, U_("Update"), U_("UpdateCheckIntervalDays"), 7) - , UpdateChannel(conf, U_("Update"), U_("Channel"), UpdateChannelRelease) - , UpdateUpdateURL_DEPRECATED(conf, U_("Update"), U_("UpdateURL"), U_("https://update.openmpt.org/check/$VERSION/$GUID")) - , UpdateAPIURL(conf, U_("Update"), U_("APIURL"), CUpdateCheck::GetDefaultAPIURL()) - , UpdateStatisticsConsentAsked(conf, U_("Update"), U_("StatistisConsentAsked"), false) - , UpdateStatistics(conf, U_("Update"), U_("Statistis"), false) - , UpdateSendGUID_DEPRECATED(conf, U_("Update"), U_("SendGUID"), false) - , UpdateShowUpdateHint(conf, U_("Update"), U_("ShowUpdateHint"), true) - , UpdateIgnoreVersion(conf, U_("Update"), U_("IgnoreVersion"), _T("")) - , UpdateSkipSignatureVerificationUNSECURE(conf, U_("Update"), U_("SkipSignatureVerification"), false) - , UpdateSigningKeysRootAnchors(conf, U_("Update"), U_("SigningKeysRootAnchors"), CUpdateCheck::GetDefaultUpdateSigningKeysRootAnchors()) + , UpdateEnabled(conf, UL_("Update"), UL_("Enabled"), true) + , UpdateInstallAutomatically(conf, UL_("Update"), UL_("InstallAutomatically"), false) + , UpdateLastUpdateCheck(conf, UL_("Update"), UL_("LastUpdateCheck"), mpt::Date::Unix{}) + , UpdateUpdateCheckPeriod_DEPRECATED(conf, UL_("Update"), UL_("UpdateCheckPeriod"), 7) + , UpdateIntervalDays(conf, UL_("Update"), UL_("UpdateCheckIntervalDays"), 7) + , UpdateChannel(conf, UL_("Update"), UL_("Channel"), UpdateChannelRelease) + , UpdateUpdateURL_DEPRECATED(conf, UL_("Update"), UL_("UpdateURL"), UL_("https://update.openmpt.org/check/$VERSION/$GUID")) + , UpdateAPIURL(conf, UL_("Update"), UL_("APIURL"), CUpdateCheck::GetDefaultAPIURL()) + , UpdateStatisticsConsentAsked(conf, UL_("Update"), UL_("StatistisConsentAsked"), false) + , UpdateStatistics(conf, UL_("Update"), UL_("Statistis"), false) + , UpdateSendGUID_DEPRECATED(conf, UL_("Update"), UL_("SendGUID"), false) + , UpdateShowUpdateHint(conf, UL_("Update"), UL_("ShowUpdateHint"), true) + , UpdateIgnoreVersion(conf, UL_("Update"), UL_("IgnoreVersion"), _T("")) + , UpdateSkipSignatureVerificationUNSECURE(conf, UL_("Update"), UL_("SkipSignatureVerification"), false) + , UpdateSigningKeysRootAnchors(conf, UL_("Update"), UL_("SigningKeysRootAnchors"), CUpdateCheck::GetDefaultUpdateSigningKeysRootAnchors()) #endif // MPT_ENABLE_UPDATE // Wine suppport - , WineSupportEnabled(conf, U_("WineSupport"), U_("Enabled"), false) - , WineSupportAlwaysRecompile(conf, U_("WineSupport"), U_("AlwaysRecompile"), false) - , WineSupportAskCompile(conf, U_("WineSupport"), U_("AskCompile"), false) - , WineSupportCompileVerbosity(conf, U_("WineSupport"), U_("CompileVerbosity"), 2) // 0=silent 1=silentmake 2=progresswindow 3=standard 4=verbosemake 5=veryverbosemake 6=msgboxes - , WineSupportForeignOpenMPT(conf, U_("WineSupport"), U_("ForeignOpenMPT"), false) - , WineSupportAllowUnknownHost(conf, U_("WineSupport"), U_("AllowUnknownHost"), false) - , WineSupportEnablePulseAudio(conf, U_("WineSupport"), U_("EnablePulseAudio"), 1) - , WineSupportEnablePortAudio(conf, U_("WineSupport"), U_("EnablePortAudio"), 1) - , WineSupportEnableRtAudio(conf, U_("WineSupport"), U_("EnableRtAudio"), 1) + , WineSupportEnabled(conf, UL_("WineSupport"), UL_("Enabled"), false) + , WineSupportAlwaysRecompile(conf, UL_("WineSupport"), UL_("AlwaysRecompile"), false) + , WineSupportAskCompile(conf, UL_("WineSupport"), UL_("AskCompile"), false) + , WineSupportCompileVerbosity(conf, UL_("WineSupport"), UL_("CompileVerbosity"), 2) // 0=silent 1=silentmake 2=progresswindow 3=standard 4=verbosemake 5=veryverbosemake 6=msgboxes + , WineSupportForeignOpenMPT(conf, UL_("WineSupport"), UL_("ForeignOpenMPT"), false) + , WineSupportAllowUnknownHost(conf, UL_("WineSupport"), UL_("AllowUnknownHost"), false) + , WineSupportEnablePulseAudio(conf, UL_("WineSupport"), UL_("EnablePulseAudio"), 1) + , WineSupportEnablePortAudio(conf, UL_("WineSupport"), UL_("EnablePortAudio"), 1) + , WineSupportEnableRtAudio(conf, UL_("WineSupport"), UL_("EnableRtAudio"), 1) { // Effects #ifndef NO_DSP - m_MegaBassSettings.m_nXBassDepth = conf.Read<int32>(U_("Effects"), U_("XBassDepth"), m_MegaBassSettings.m_nXBassDepth); - m_MegaBassSettings.m_nXBassRange = conf.Read<int32>(U_("Effects"), U_("XBassRange"), m_MegaBassSettings.m_nXBassRange); + m_MegaBassSettings.m_nXBassDepth = conf.Read<int32>(UL_("Effects"), UL_("XBassDepth"), m_MegaBassSettings.m_nXBassDepth); + m_MegaBassSettings.m_nXBassRange = conf.Read<int32>(UL_("Effects"), UL_("XBassRange"), m_MegaBassSettings.m_nXBassRange); #endif #ifndef NO_REVERB - m_ReverbSettings.m_nReverbDepth = conf.Read<int32>(U_("Effects"), U_("ReverbDepth"), m_ReverbSettings.m_nReverbDepth); - m_ReverbSettings.m_nReverbType = conf.Read<int32>(U_("Effects"), U_("ReverbType"), m_ReverbSettings.m_nReverbType); + m_ReverbSettings.m_nReverbDepth = conf.Read<int32>(UL_("Effects"), UL_("ReverbDepth"), m_ReverbSettings.m_nReverbDepth); + m_ReverbSettings.m_nReverbType = conf.Read<int32>(UL_("Effects"), UL_("ReverbType"), m_ReverbSettings.m_nReverbType); #endif #ifndef NO_DSP - m_SurroundSettings.m_nProLogicDepth = conf.Read<int32>(U_("Effects"), U_("ProLogicDepth"), m_SurroundSettings.m_nProLogicDepth); - m_SurroundSettings.m_nProLogicDelay = conf.Read<int32>(U_("Effects"), U_("ProLogicDelay"), m_SurroundSettings.m_nProLogicDelay); + m_SurroundSettings.m_nProLogicDepth = conf.Read<int32>(UL_("Effects"), UL_("ProLogicDepth"), m_SurroundSettings.m_nProLogicDepth); + m_SurroundSettings.m_nProLogicDelay = conf.Read<int32>(UL_("Effects"), UL_("ProLogicDelay"), m_SurroundSettings.m_nProLogicDelay); #endif #ifndef NO_EQ - m_EqSettings = conf.Read<EQPreset>(U_("Effects"), U_("EQ_Settings"), FlatEQPreset); + m_EqSettings = conf.Read<EQPreset>(UL_("Effects"), UL_("EQ_Settings"), FlatEQPreset); const EQPreset userPresets[] = { FlatEQPreset, @@ -386,24 +386,24 @@ { "User 3", {16,16,16,16,16,16}, { 250, 450, 900, 2000, 5000, 10000 } } }; - m_EqUserPresets[0] = conf.Read<EQPreset>(U_("Effects"), U_("EQ_User1"), userPresets[0]); - m_EqUserPresets[1] = conf.Read<EQPreset>(U_("Effects"), U_("EQ_User2"), userPresets[1]); - m_EqUserPresets[2] = conf.Read<EQPreset>(U_("Effects"), U_("EQ_User3"), userPresets[2]); - m_EqUserPresets[3] = conf.Read<EQPreset>(U_("Effects"), U_("EQ_User4"), userPresets[3]); + m_EqUserPresets[0] = conf.Read<EQPreset>(UL_("Effects"), UL_("EQ_User1"), userPresets[0]); + m_EqUserPresets[1] = conf.Read<EQPreset>(UL_("Effects"), UL_("EQ_User2"), userPresets[1]); + m_EqUserPresets[2] = conf.Read<EQPreset>(UL_("Effects"), UL_("EQ_User3"), userPresets[2]); + m_EqUserPresets[3] = conf.Read<EQPreset>(UL_("Effects"), UL_("EQ_User4"), userPresets[3]); #endif #ifndef NO_DSP - m_BitCrushSettings.m_Bits = conf.Read<int32>(U_("Effects"), U_("BitCrushBits"), m_BitCrushSettings.m_Bits); + m_BitCrushSettings.m_Bits = conf.Read<int32>(UL_("Effects"), UL_("BitCrushBits"), m_BitCrushSettings.m_Bits); #endif // Display (Colors) GetDefaultColourScheme(rgbCustomColors); for(int ncol = 0; ncol < MAX_MODCOLORS; ncol++) { const mpt::ustring colorName = MPT_UFORMAT("Color{}")(mpt::ufmt::dec0<2>(ncol)); - rgbCustomColors[ncol] = conf.Read<uint32>(U_("Display"), colorName, rgbCustomColors[ncol]); + rgbCustomColors[ncol] = conf.Read<uint32>(UL_("Display"), colorName, rgbCustomColors[ncol]); } // Paths - m_szKbdFile = conf.Read<mpt::PathString>(U_("Paths"), U_("Key_Config_File"), mpt::PathString()); - conf.Forget(U_("Paths"), U_("Key_Config_File")); + m_szKbdFile = conf.Read<mpt::PathString>(UL_("Paths"), UL_("Key_Config_File"), mpt::PathString()); + conf.Forget(UL_("Paths"), UL_("Key_Config_File")); // init old and messy stuff: @@ -434,7 +434,7 @@ // load old and messy stuff: - PatternClipboard::SetClipboardSize(conf.Read<int32>(U_("Pattern Editor"), U_("NumClipboards"), mpt::saturate_cast<int32>(PatternClipboard::GetClipboardSize()))); + PatternClipboard::SetClipboardSize(conf.Read<int32>(UL_("Pattern Editor"), UL_("NumClipboards"), mpt::saturate_cast<int32>(PatternClipboard::GetClipboardSize()))); // Chords LoadChords(Chords); @@ -444,11 +444,11 @@ theApp.GetDefaultMidiMacro(macros); for(int i = 0; i < kSFxMacros; i++) { - macros.SFx[i] = conf.Read<std::string>(U_("Zxx Macros"), MPT_UFORMAT("SF{}")(mpt::ufmt::HEX(i)), macros.SFx[i]); + macros.SFx[i] = conf.Read<std::string>(UL_("Zxx Macros"), MPT_UFORMAT("SF{}")(mpt::ufmt::HEX(i)), macros.SFx[i]); } for(int i = 0; i < kZxxMacros; i++) { - macros.Zxx[i] = conf.Read<std::string>(U_("Zxx Macros"), MPT_UFORMAT("Z{}")(mpt::ufmt::HEX0<2>(i | 0x80)), macros.Zxx[i]); + macros.Zxx[i] = conf.Read<std::string>(UL_("Zxx Macros"), MPT_UFORMAT("Z{}")(mpt::ufmt::HEX0<2>(i | 0x80)), macros.Zxx[i]); } @@ -459,7 +459,7 @@ { mpt::ustring key = MPT_UFORMAT("File{}")(i); - mpt::PathString path = theApp.PathInstallRelativeToAbsolute(conf.Read<mpt::PathString>(U_("Recent File List"), key, mpt::PathString())); + mpt::PathString path = theApp.PathInstallRelativeToAbsolute(conf.Read<mpt::PathString>(UL_("Recent File List"), key, mpt::PathString())); if(!path.empty()) { mruFiles.push_back(path); @@ -485,14 +485,14 @@ } if(storedVersion < MPT_V("1.30.00.24")) { - BrokenPluginsWorkaroundVSTNeverUnloadAnyPlugin = !conf.Read<bool>(U_("VST Plugins"), U_("FullyUnloadPlugins"), true); - conf.Remove(U_("VST Plugins"), U_("FullyUnloadPlugins")); + BrokenPluginsWorkaroundVSTNeverUnloadAnyPlugin = !conf.Read<bool>(UL_("VST Plugins"), UL_("FullyUnloadPlugins"), true); + conf.Remove(UL_("VST Plugins"), UL_("FullyUnloadPlugins")); } // Sound Settings if(storedVersion < MPT_V("1.22.07.30")) { - if(conf.Read<bool>(U_("Sound Settings"), U_("KeepDeviceOpen"), false)) + if(conf.Read<bool>(UL_("Sound Settings"), UL_("KeepDeviceOpen"), false)) { m_SoundSettingsStopMode = SoundDeviceStopModePlaying; } else @@ -513,15 +513,15 @@ } if(storedVersion < MPT_V("1.22.07.04")) { - m_SoundDeviceID_DEPRECATED = conf.Read<SoundDevice::Legacy::ID>(U_("Sound Settings"), U_("WaveDevice"), SoundDevice::Legacy::ID()); - Setting<uint32> m_BufferLength_DEPRECATED(conf, U_("Sound Settings"), U_("BufferLength"), 50); - Setting<uint32> m_LatencyMS(conf, U_("Sound Settings"), U_("Latency"), mpt::saturate_round<int32>(SoundDevice::Settings().Latency * 1000.0)); - Setting<uint32> m_UpdateIntervalMS(conf, U_("Sound Settings"), U_("UpdateInterval"), mpt::saturate_round<int32>(SoundDevice::Settings().UpdateInterval * 1000.0)); - Setting<SampleFormat> m_SampleFormat(conf, U_("Sound Settings"), U_("BitsPerSample"), SoundDevice::Settings().sampleFormat); - Setting<bool> m_SoundDeviceExclusiveMode(conf, U_("Sound Settings"), U_("ExclusiveMode"), SoundDevice::Settings().ExclusiveMode); - Setting<bool> m_SoundDeviceBoostThreadPriority(conf, U_("Sound Settings"), U_("BoostThreadPriority"), SoundDevice::Settings().BoostThreadPriority); - Setting<bool> m_SoundDeviceUseHardwareTiming(conf, U_("Sound Settings"), U_("UseHardwareTiming"), SoundDevice::Settings().UseHardwareTiming); - Setting<SoundDevice::ChannelMapping> m_SoundDeviceChannelMapping(conf, U_("Sound Settings"), U_("ChannelMapping"), SoundDevice::Settings().Channels); + m_SoundDeviceID_DEPRECATED = conf.Read<SoundDevice::Legacy::ID>(UL_("Sound Settings"), UL_("WaveDevice"), SoundDevice::Legacy::ID()); + Setting<uint32> m_BufferLength_DEPRECATED(conf, UL_("Sound Settings"), UL_("BufferLength"), 50); + Setting<uint32> m_LatencyMS(conf, UL_("Sound Settings"), UL_("Latency"), mpt::saturate_round<int32>(SoundDevice::Settings().Latency * 1000.0)); + Setting<uint32> m_UpdateIntervalMS(conf, UL_("Sound Settings"), UL_("UpdateInterval"), mpt::saturate_round<int32>(SoundDevice::Settings().UpdateInterval * 1000.0)); + Setting<SampleFormat> m_SampleFormat(conf, UL_("Sound Settings"), UL_("BitsPerSample"), SoundDevice::Settings().sampleFormat); + Setting<bool> m_SoundDeviceExclusiveMode(conf, UL_("Sound Settings"), UL_("ExclusiveMode"), SoundDevice::Settings().ExclusiveMode); + Setting<bool> m_SoundDeviceBoostThreadPriority(conf, UL_("Sound Settings"), UL_("BoostThreadPriority"), SoundDevice::Settings().BoostThreadPriority); + Setting<bool> m_SoundDeviceUseHardwareTiming(conf, UL_("Sound Settings"), UL_("UseHardwareTiming"), SoundDevice::Settings().UseHardwareTiming); + Setting<SoundDevice::ChannelMapping> m_SoundDeviceChannelMapping(conf, UL_("Sound Settings"), UL_("ChannelMapping"), SoundDevice::Settings().Channels); if(storedVersion < MPT_V("1.21.01.26")) { if(m_BufferLength_DEPRECATED != 0) @@ -551,7 +551,7 @@ } if(storedVersion < MPT_V("1.22.07.03")) { - m_SoundDeviceChannelMapping = SoundDevice::ChannelMapping::BaseChannel(MixerOutputChannels, conf.Read<int>(U_("Sound Settings"), U_("ASIOBaseChannel"), 0)); + m_SoundDeviceChannelMapping = SoundDevice::ChannelMapping::BaseChannel(MixerOutputChannels, conf.Read<int>(UL_("Sound Settings"), UL_("ASIOBaseChannel"), 0)); } m_SoundDeviceSettingsDefaults.Latency = m_LatencyMS / 1000.0; m_SoundDeviceSettingsDefaults.UpdateInterval = m_UpdateIntervalMS / 1000.0; @@ -595,15 +595,15 @@ if(storedVersion < MPT_V("1.20.00.22")) { MixerSettings settings = GetMixerSettings(); - settings.SetVolumeRampUpSamples(conf.Read<int32>(U_("Sound Settings"), U_("VolumeRampSamples"), 42)); - settings.SetVolumeRampDownSamples(conf.Read<int32>(U_("Sound Settings"), U_("VolumeRampSamples"), 42)); + settings.SetVolumeRampUpSamples(conf.Read<int32>(UL_("Sound Settings"), UL_("VolumeRampSamples"), 42)); + settings.SetVolumeRampDownSamples(conf.Read<int32>(UL_("Sound Settings"), UL_("VolumeRampSamples"), 42)); SetMixerSettings(settings); - conf.Remove(U_("Sound Settings"), U_("VolumeRampSamples")); + conf.Remove(UL_("Sound Settings"), UL_("VolumeRampSamples")); } else if(storedVersion < MPT_V("1.22.07.18")) { MixerSettings settings = GetMixerSettings(); - settings.SetVolumeRampUpSamples(conf.Read<int32>(U_("Sound Settings"), U_("VolumeRampUpSamples"), MixerSettings().GetVolumeRampUpSamples())); - settings.SetVolumeRampDownSamples(conf.Read<int32>(U_("Sound Settings"), U_("VolumeRampDownSamples"), MixerSettings().GetVolumeRampDownSamples())); + settings.SetVolumeRampUpSamples(conf.Read<int32>(UL_("Sound Settings"), UL_("VolumeRampUpSamples"), MixerSettings().GetVolumeRampUpSamples())); + settings.SetVolumeRampDownSamples(conf.Read<int32>(UL_("Sound Settings"), UL_("VolumeRampDownSamples"), MixerSettings().GetVolumeRampDownSamples())); SetMixerSettings(settings); } Limit(ResamplerCutoffPercent, 0, 100); @@ -657,7 +657,7 @@ } if(storedVersion < MPT_V("1.24.01.04")) { - commentsFont = FontSetting(U_("Courier New"), (m_dwPatternSetup & 0x02) ? 120 : 90); + commentsFont = FontSetting(UL_("Courier New"), (m_dwPatternSetup & 0x02) ? 120 : 90); patternFont = FontSetting((m_dwPatternSetup & 0x08) ? PATTERNFONT_SMALL : PATTERNFONT_LARGE, 0); m_dwPatternSetup &= ~(0x08 | 0x02); } @@ -682,8 +682,8 @@ if(storedVersion < MPT_V("1.30.00.38")) { { - conf.Write<Encoder::Mode>(U_("Export"), U_("FLAC_Mode"), Encoder::ModeLossless); - const int oldformat = conf.Read<int>(U_("Export"), U_("FLAC_Format"), 1); + conf.Write<Encoder::Mode>(UL_("Export"), UL_("FLAC_Mode"), Encoder::ModeLossless); + const int oldformat = conf.Read<int>(UL_("Export"), UL_("FLAC_Format"), 1); Encoder::Format newformat = { Encoder::Format::Encoding::Integer, 24, mpt::get_endian() }; if (oldformat >= 0) { @@ -700,12 +700,12 @@ break; } } - conf.Write<Encoder::Format>(U_("Export"), U_("FLAC_Format2"), newformat); - conf.Forget(U_("Export"), U_("FLAC_Format")); + conf.Write<Encoder::Format>(UL_("Export"), UL_("FLAC_Format2"), newformat); + conf.Forget(UL_("Export"), UL_("FLAC_Format")); } { - conf.Write<Encoder::Mode>(U_("Export"), U_("Wave_Mode"), Encoder::ModeLossless); - const int oldformat = conf.Read<int>(U_("Export"), U_("Wave_Format"), 1); + conf.Write<Encoder::Mode>(UL_("Export"), UL_("Wave_Mode"), Encoder::ModeLossless); + const int oldformat = conf.Read<int>(UL_("Export"), UL_("Wave_Format"), 1); Encoder::Format newformat = { Encoder::Format::Encoding::Float, 32, mpt::endian::little }; if (oldformat >= 0) { @@ -731,12 +731,12 @@ break; } } - conf.Write<Encoder::Format>(U_("Export"), U_("Wave_Format2"), newformat); - conf.Forget(U_("Export"), U_("Wave_Format")); + conf.Write<Encoder::Format>(UL_("Export"), UL_("Wave_Format2"), newformat); + conf.Forget(UL_("Export"), UL_("Wave_Format")); } { - conf.Write<Encoder::Mode>(U_("Export"), U_("AU_Mode"), Encoder::ModeLossless); - const int oldformat = conf.Read<int>(U_("Export"), U_("AU_Format"), 1); + conf.Write<Encoder::Mode>(UL_("Export"), UL_("AU_Mode"), Encoder::ModeLossless); + const int oldformat = conf.Read<int>(UL_("Export"), UL_("AU_Format"), 1); Encoder::Format newformat = { Encoder::Format::Encoding::Float, 32, mpt::endian::big }; if(oldformat >= 0) { @@ -762,12 +762,12 @@ break; } } - conf.Write<Encoder::Format>(U_("Export"), U_("AU_Format2"), newformat); - conf.Forget(U_("Export"), U_("AU_Format")); + conf.Write<Encoder::Format>(UL_("Export"), UL_("AU_Format2"), newformat); + conf.Forget(UL_("Export"), UL_("AU_Format")); } { - conf.Write<Encoder::Mode>(U_("Export"), U_("RAW_Mode"), Encoder::ModeLossless); - const int oldformat = conf.Read<int>(U_("Export"), U_("RAW_Format"), 1); + conf.Write<Encoder::Mode>(UL_("Export"), UL_("RAW_Mode"), Encoder::ModeLossless); + const int oldformat = conf.Read<int>(UL_("Export"), UL_("RAW_Format"), 1); Encoder::Format newformat = { Encoder::Format::Encoding::Float, 32, mpt::get_endian() }; if(oldformat >= 0) { @@ -796,8 +796,8 @@ break; } } - conf.Write<Encoder::Format>(U_("Export"), U_("RAW_Format2"), newformat); - conf.Forget(U_("Export"), U_("RAW_Format")); + conf.Write<Encoder::Format>(UL_("Export"), UL_("RAW_Format2"), newformat); + conf.Forget(UL_("Export"), UL_("RAW_Format")); } } @@ -1011,7 +1011,7 @@ mpt::PathString fn = PathTunings.GetDefaultDir() + P_("Built-in\\12TET.tun"); if(!mpt::native_fs{}.exists(fn)) { - std::unique_ptr<CTuning> pT = CSoundFile::CreateTuning12TET(U_("12TET")); + std::unique_ptr<CTuning> pT = CSoundFile::CreateTuning12TET(UL_("12TET")); mpt::IO::SafeOutputFile sf(fn, std::ios::binary, mpt::IO::FlushMode::Full); pT->Serialize(sf); } @@ -1020,7 +1020... [truncated message content] |
From: <sv...@op...> - 2024-11-01 22:47:54
|
Author: sagamusix Date: Fri Nov 1 23:47:42 2024 New Revision: 22058 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22058 Log: Merged revision(s) 22055-22056 from trunk/OpenMPT: [Fix] MOD: Also enable ProTracker-compatible tremolo ramp waveform for M!K! modules. ........ [Imp] Warn when Startrekker AM companion file for synthesized instruments is most likely missing. ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/soundlib/Load_mod.cpp Modified: branches/OpenMPT-1.31/soundlib/Load_mod.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/Load_mod.cpp Fri Nov 1 23:42:41 2024 (r22057) +++ branches/OpenMPT-1.31/soundlib/Load_mod.cpp Fri Nov 1 23:47:42 2024 (r22058) @@ -1072,6 +1072,7 @@ // Reading patterns Patterns.ResizeArray(numPatterns); + std::bitset<32> referencedSamples; for(PATTERNINDEX pat = 0; pat < numPatterns; pat++) { ModCommand *rowBase = nullptr; @@ -1179,6 +1180,8 @@ if(m.instr != 0) { lastInstrument[chn] = m.instr; + if(isStartrekker) + referencedSamples.set(m.instr & 0x1F); } } if(hasSpeedOnRow && hasTempoOnRow) @@ -1215,7 +1218,7 @@ { m_SongFlags.set(SONG_ISAMIGA); } - if(isGenericMultiChannel || isMdKd) + if(isGenericMultiChannel || isMdKd || IsMagic(magic, "M!K!")) { m_playBehaviour.set(kFT2MODTremoloRampWaveform); } @@ -1316,7 +1319,7 @@ m_nInstruments = 31; #endif - for(SAMPLEINDEX smp = 1; smp <= m_nInstruments; smp++) + for(SAMPLEINDEX smp = 1; smp <= GetNumInstruments(); smp++) { // For Startrekker AM synthesis, we need instrument envelopes. ModInstrument *ins = AllocateInstrument(smp, smp); @@ -1336,6 +1339,28 @@ // This extra padding is probably present to have identical block sizes for AM and FM instruments. amData.Skip(120 - sizeof(AMInstrument)); } + + if(!m_nInstruments) + { + uint8 emptySampleReferences = 0; + for(SAMPLEINDEX smp = 1; smp <= 31; smp++) + { + if(referencedSamples[smp] && !Samples[smp].nLength) + { + if(++emptySampleReferences > 1) + { + mpt::ustring filenameHint; + if(file.GetOptionalFileName()) + { + const auto filename = file.GetOptionalFileName()->GetFilename().ToUnicode(); + filenameHint = MPT_UFORMAT(" ({}.nt or {}.as)")(filename, filename); + } + AddToLog(LogWarning, MPT_UFORMAT("This Startrekker AM file is most likely missing its companion file{}. Synthesized instruments will not play.")(filenameHint)); + break; + } + } + } + } } #endif // MPT_EXTERNAL_SAMPLES || MPT_BUILD_FUZZER |
From: <sv...@op...> - 2024-11-01 22:42:54
|
Author: sagamusix Date: Fri Nov 1 23:42:41 2024 New Revision: 22057 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22057 Log: [Ref] ICE: Simplify alternating tempo implementation. Modified: trunk/OpenMPT/soundlib/Load_ice.cpp Modified: trunk/OpenMPT/soundlib/Load_ice.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_ice.cpp Fri Nov 1 23:25:40 2024 (r22056) +++ trunk/OpenMPT/soundlib/Load_ice.cpp Fri Nov 1 23:42:41 2024 (r22057) @@ -125,7 +125,7 @@ // Reading patterns Order().resize(numOrders); - uint8 speed[2] = {0, 0}, speedPos = 0; + uint8 speed = 0; if(loadFlags & loadPatternData) Patterns.ResizeArray(numOrders); for(PATTERNINDEX pat = 0; pat < numOrders; pat++) @@ -164,26 +164,21 @@ if(m->command == CMD_SPEED || m->command == CMD_TEMPO) { m->command = CMD_SPEED; - speedPos = 0; if(m->param & 0xF0) { if((m->param >> 4) != (m->param & 0x0F) && (m->param & 0x0F) != 0) { // Both nibbles set - speed[0] = m->param >> 4; - speed[1] = m->param & 0x0F; - speedPos = 1; + speed = m->param; } m->param >>= 4; } } } - if(speedPos) + if(speed) { - Patterns[pat].WriteEffect(EffectWriter(CMD_SPEED, speed[speedPos - 1]).Row(row)); - speedPos++; - if(speedPos == 3) - speedPos = 1; + speed = mpt::rotr(speed, 4); + Patterns[pat].WriteEffect(EffectWriter(CMD_SPEED, speed & 0x0F).Row(row)); } } } |
From: <sv...@op...> - 2024-11-01 22:25:52
|
Author: sagamusix Date: Fri Nov 1 23:25:40 2024 New Revision: 22056 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22056 Log: [Imp] Warn when Startrekker AM companion file for synthesized instruments is most likely missing. Modified: trunk/OpenMPT/soundlib/Load_mod.cpp Modified: trunk/OpenMPT/soundlib/Load_mod.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_mod.cpp Fri Nov 1 22:17:31 2024 (r22055) +++ trunk/OpenMPT/soundlib/Load_mod.cpp Fri Nov 1 23:25:40 2024 (r22056) @@ -498,6 +498,7 @@ // Reading patterns Patterns.ResizeArray(numPatterns); + std::bitset<32> referencedSamples; for(PATTERNINDEX pat = 0; pat < numPatterns; pat++) { ModCommand *rowBase = nullptr; @@ -608,6 +609,8 @@ if(m.instr != 0) { lastInstrument[chn] = m.instr; + if(isStartrekker) + referencedSamples.set(m.instr & 0x1F); } } if(hasSpeedOnRow && hasTempoOnRow) @@ -747,7 +750,7 @@ mpt::deterministic_random_device rd; auto prng = mpt::make_prng<mpt::deterministic_fast_engine>(rd); - for(SAMPLEINDEX smp = 1; smp <= m_nInstruments; smp++) + for(SAMPLEINDEX smp = 1; smp <= GetNumInstruments(); smp++) { // For Startrekker AM synthesis, we need instrument envelopes. ModInstrument *ins = AllocateInstrument(smp, smp); @@ -767,6 +770,28 @@ // This extra padding is probably present to have identical block sizes for AM and FM instruments. amData.Skip(120 - sizeof(AMInstrument)); } + + if(!m_nInstruments) + { + uint8 emptySampleReferences = 0; + for(SAMPLEINDEX smp = 1; smp <= 31; smp++) + { + if(referencedSamples[smp] && !Samples[smp].nLength) + { + if(++emptySampleReferences > 1) + { + mpt::ustring filenameHint; + if(file.GetOptionalFileName()) + { + const auto filename = file.GetOptionalFileName()->GetFilename().ToUnicode(); + filenameHint = MPT_UFORMAT(" ({}.nt or {}.as)")(filename, filename); + } + AddToLog(LogWarning, MPT_UFORMAT("This Startrekker AM file is most likely missing its companion file{}. Synthesized instruments will not play.")(filenameHint)); + break; + } + } + } + } } #endif // MPT_EXTERNAL_SAMPLES || MPT_BUILD_FUZZER |
From: <sv...@op...> - 2024-11-01 21:17:41
|
Author: sagamusix Date: Fri Nov 1 22:17:31 2024 New Revision: 22055 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22055 Log: [Fix] MOD: Also enable ProTracker-compatible tremolo ramp waveform for M!K! modules. Modified: trunk/OpenMPT/soundlib/Load_mod.cpp Modified: trunk/OpenMPT/soundlib/Load_mod.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_mod.cpp Fri Nov 1 21:51:14 2024 (r22054) +++ trunk/OpenMPT/soundlib/Load_mod.cpp Fri Nov 1 22:17:31 2024 (r22055) @@ -644,7 +644,7 @@ { m_SongFlags.set(SONG_ISAMIGA); } - if(isGenericMultiChannel || isMdKd) + if(isGenericMultiChannel || isMdKd || IsMagic(magic, "M!K!")) { m_playBehaviour.set(kFT2MODTremoloRampWaveform); } |
From: <sv...@op...> - 2024-11-01 20:51:22
|
Author: sagamusix Date: Fri Nov 1 21:51:14 2024 New Revision: 22054 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22054 Log: [Mod] Use deterministic PRNG for random sample creation in Startrekker files. This way we can have consistent playback tests. Modified: trunk/OpenMPT/soundlib/Load_mod.cpp Modified: trunk/OpenMPT/soundlib/Load_mod.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_mod.cpp Fri Nov 1 21:41:13 2024 (r22053) +++ trunk/OpenMPT/soundlib/Load_mod.cpp Fri Nov 1 21:51:14 2024 (r22054) @@ -745,6 +745,8 @@ m_nInstruments = 31; #endif + mpt::deterministic_random_device rd; + auto prng = mpt::make_prng<mpt::deterministic_fast_engine>(rd); for(SAMPLEINDEX smp = 1; smp <= m_nInstruments; smp++) { // For Startrekker AM synthesis, we need instrument envelopes. @@ -759,7 +761,7 @@ // Allow partial reads for fa.worse face.mod if(amData.ReadStructPartial(am) && !memcmp(am.am, "AM", 2) && am.waveform < 4) { - am.ConvertToMPT(Samples[smp], *ins, AccessPRNG()); + am.ConvertToMPT(Samples[smp], *ins, prng); } // This extra padding is probably present to have identical block sizes for AM and FM instruments. |
From: <sv...@op...> - 2024-11-01 20:41:25
|
Author: sagamusix Date: Fri Nov 1 21:41:13 2024 New Revision: 22053 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22053 Log: [Imp] Instrument tab: If there are any instruments in a format that does not formally support them (e.g. after importing a Future Composer file), keep a basic set of edit controls enabled (everything supported by XM). Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp Fri Nov 1 21:18:45 2024 (r22052) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp Fri Nov 1 21:41:13 2024 (r22053) @@ -1328,21 +1328,21 @@ m_EditName.SetLimitText(specs.instrNameLengthMax); m_EditFileName.SetLimitText(specs.instrFilenameLengthMax); - const BOOL bITandMPT = ((m_sndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) && (m_sndFile.GetNumInstruments())) ? TRUE : FALSE; - const BOOL bITandXM = ((m_sndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT | MOD_TYPE_XM)) && (m_sndFile.GetNumInstruments())) ? TRUE : FALSE; - const BOOL bMPTOnly = ((m_sndFile.GetType() == MOD_TYPE_MPT) && (m_sndFile.GetNumInstruments())) ? TRUE : FALSE; - ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT10), bITandXM); - ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT11), bITandXM); - ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT7), bITandXM); - m_EditName.EnableWindow(bITandXM); - m_EditFileName.EnableWindow(bITandMPT); - m_CbnMidiCh.EnableWindow(bITandXM); - m_CbnMixPlug.EnableWindow(bITandXM); - m_SpinMidiPR.EnableWindow(bITandXM); - m_SpinMidiBK.EnableWindow(bITandXM); + const BOOL onlyITandMPT = ((m_sndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) && (m_sndFile.GetNumInstruments())) ? TRUE : FALSE; + const BOOL anyFormat = m_sndFile.GetNumInstruments() ? TRUE : FALSE; + const BOOL onlyMPT = ((m_sndFile.GetType() == MOD_TYPE_MPT) && (m_sndFile.GetNumInstruments())) ? TRUE : FALSE; + ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT10), anyFormat); + ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT11), anyFormat); + ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT7), anyFormat); + m_EditName.EnableWindow(anyFormat); + m_EditFileName.EnableWindow(onlyITandMPT); + m_CbnMidiCh.EnableWindow(anyFormat); + m_CbnMixPlug.EnableWindow(anyFormat); + m_SpinMidiPR.EnableWindow(anyFormat); + m_SpinMidiBK.EnableWindow(anyFormat); const bool extendedFadeoutRange = !(m_sndFile.GetType() & MOD_TYPE_IT); - m_SpinFadeOut.EnableWindow(bITandXM); + m_SpinFadeOut.EnableWindow(anyFormat); m_SpinFadeOut.SetRange(0, extendedFadeoutRange ? 32767 : 8192); m_EditFadeOut.SetLimitText(extendedFadeoutRange ? 5 : 4); // XM-style fade-out is 32 times more precise than IT @@ -1361,36 +1361,36 @@ m_SpinPWD.SetRange(0, 36); else m_SpinPWD.SetRange(-128, 127); - m_EditPWD.EnableWindow(bITandXM); - m_SpinPWD.EnableWindow(bITandXM); + m_EditPWD.EnableWindow(anyFormat); + m_SpinPWD.EnableWindow(anyFormat); - m_NoteMap.EnableWindow(bITandXM); + m_NoteMap.EnableWindow(anyFormat); - m_ComboNNA.EnableWindow(bITandMPT); - m_SliderVolSwing.EnableWindow(bITandMPT); - m_SliderPanSwing.EnableWindow(bITandMPT); - m_ComboDCT.EnableWindow(bITandMPT); - m_ComboDCA.EnableWindow(bITandMPT); - m_ComboPPC.EnableWindow(bITandMPT); - m_SpinPPS.EnableWindow(bITandMPT); - m_EditGlobalVol.EnableWindow(bITandMPT); - m_SpinGlobalVol.EnableWindow(bITandMPT); - m_EditPanning.EnableWindow(bITandMPT); - m_SpinPanning.EnableWindow(bITandMPT); - m_CheckPanning.EnableWindow(bITandMPT); - m_EditPPS.EnableWindow(bITandMPT); - m_CheckCutOff.EnableWindow(bITandMPT); - m_CheckResonance.EnableWindow(bITandMPT); - m_SliderCutOff.EnableWindow(bITandMPT); - m_SliderResonance.EnableWindow(bITandMPT); - m_ComboTuning.EnableWindow(bMPTOnly); - m_EditPitchTempoLock.EnableWindow(bMPTOnly); - m_CheckPitchTempoLock.EnableWindow(bMPTOnly); + m_ComboNNA.EnableWindow(onlyITandMPT); + m_SliderVolSwing.EnableWindow(onlyITandMPT); + m_SliderPanSwing.EnableWindow(onlyITandMPT); + m_ComboDCT.EnableWindow(onlyITandMPT); + m_ComboDCA.EnableWindow(onlyITandMPT); + m_ComboPPC.EnableWindow(onlyITandMPT); + m_SpinPPS.EnableWindow(onlyITandMPT); + m_EditGlobalVol.EnableWindow(onlyITandMPT); + m_SpinGlobalVol.EnableWindow(onlyITandMPT); + m_EditPanning.EnableWindow(onlyITandMPT); + m_SpinPanning.EnableWindow(onlyITandMPT); + m_CheckPanning.EnableWindow(onlyITandMPT); + m_EditPPS.EnableWindow(onlyITandMPT); + m_CheckCutOff.EnableWindow(onlyITandMPT); + m_CheckResonance.EnableWindow(onlyITandMPT); + m_SliderCutOff.EnableWindow(onlyITandMPT); + m_SliderResonance.EnableWindow(onlyITandMPT); + m_ComboTuning.EnableWindow(onlyMPT); + m_EditPitchTempoLock.EnableWindow(onlyMPT); + m_CheckPitchTempoLock.EnableWindow(onlyMPT); // MIDI Channel // XM has no "mapped" MIDI channels. m_CbnMidiCh.ResetContent(); - for(int ich = MidiNoChannel; ich <= (bITandMPT ? MidiMappedChannel : MidiLastChannel); ich++) + for(int ich = MidiNoChannel; ich <= (onlyITandMPT ? MidiMappedChannel : MidiLastChannel); ich++) { CString s; if (ich == MidiNoChannel) |
From: <sv...@op...> - 2024-11-01 20:18:53
|
Author: sagamusix Date: Fri Nov 1 21:18:45 2024 New Revision: 22052 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22052 Log: [Var] Clarify comment about which formats VBlank detection is applied to. Modified: trunk/OpenMPT/soundlib/Load_mod.cpp Modified: trunk/OpenMPT/soundlib/Load_mod.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_mod.cpp Fri Nov 1 21:00:41 2024 (r22051) +++ trunk/OpenMPT/soundlib/Load_mod.cpp Fri Nov 1 21:18:45 2024 (r22052) @@ -849,7 +849,7 @@ // (as this would indicate that e.g. a F30 command was really meant to set // the ticks per row to 48, and not the tempo to 48 BPM). // In the pattern loader above, a second condition is used: Only tempo commands - // below 100 BPM are taken into account. Furthermore, only M.K. (ProTracker) + // below 100 BPM are taken into account. Furthermore, only ProTracker (M.K. / M!K!) // modules are checked. if((isMdKd || IsMagic(magic, "M!K!")) && hasTempoCommands && !definitelyCIA) { |
From: <sv...@op...> - 2024-11-01 20:00:49
|
Author: sagamusix Date: Fri Nov 1 21:00:41 2024 New Revision: 22051 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22051 Log: [Fix] Avoid using ModChannel::nNewIns as sample index, as it may have been misinterpreted in some situations when sample swapping was going to happen at at time where nNewIns was pointing to a new pattern instrument index. [Mod] Use tone poratmento with duration command to achieve instant portamentos in various imported formats. Modified: trunk/OpenMPT/soundlib/Fastmix.cpp trunk/OpenMPT/soundlib/InstrumentSynth.cpp trunk/OpenMPT/soundlib/Load_fc.cpp trunk/OpenMPT/soundlib/Load_gt2.cpp trunk/OpenMPT/soundlib/Load_symmod.cpp trunk/OpenMPT/soundlib/ModChannel.cpp trunk/OpenMPT/soundlib/ModChannel.h trunk/OpenMPT/soundlib/Snd_fx.cpp Modified: trunk/OpenMPT/soundlib/Fastmix.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Fastmix.cpp Fri Nov 1 18:32:05 2024 (r22050) +++ trunk/OpenMPT/soundlib/Fastmix.cpp Fri Nov 1 21:00:41 2024 (r22051) @@ -482,7 +482,7 @@ const bool pastLoopEnd = chn.position.GetUInt() >= chn.nLoopEnd && chn.dwFlags[CHN_LOOP]; const bool pastSampleEnd = chn.position.GetUInt() >= chn.nLength && !chn.dwFlags[CHN_LOOP] && chn.nLength && !chn.nMasterChn; - const bool doSampleSwap = m_playBehaviour[kMODSampleSwap] && chn.nNewIns && chn.nNewIns <= GetNumSamples() && chn.pModSample != &Samples[chn.nNewIns]; + const bool doSampleSwap = m_playBehaviour[kMODSampleSwap] && chn.swapSampleIndex && chn.swapSampleIndex <= GetNumSamples() && chn.pModSample != &Samples[chn.swapSampleIndex]; if((pastLoopEnd || pastSampleEnd) && doSampleSwap) { // ProTracker compatibility: Instrument changes without a note do not happen instantly, but rather when the sample loop has finished playing. @@ -498,7 +498,7 @@ } } #endif - const ModSample &smp = Samples[chn.nNewIns]; + const ModSample &smp = Samples[chn.swapSampleIndex]; chn.pModSample = &smp; chn.pCurrentSample = smp.samplev(); chn.dwFlags = (chn.dwFlags & CHN_CHANNELFLAGS) | smp.uFlags; @@ -511,11 +511,10 @@ chn.nLoopStart = smp.nLoopStart; chn.nLoopEnd = smp.nLoopEnd; chn.position.SetInt(chn.nLoopStart); + chn.swapSampleIndex = 0; mixLoopState.UpdateLookaheadPointers(chn); if(!chn.pCurrentSample) - { break; - } } else if(pastLoopEnd && !doSampleSwap && m_playBehaviour[kMODOneShotLoops] && chn.nLoopStart == 0) { // ProTracker "oneshot" loops (if loop start is 0, play the whole sample once and then repeat until loop end) Modified: trunk/OpenMPT/soundlib/InstrumentSynth.cpp ============================================================================== --- trunk/OpenMPT/soundlib/InstrumentSynth.cpp Fri Nov 1 18:32:05 2024 (r22050) +++ trunk/OpenMPT/soundlib/InstrumentSynth.cpp Fri Nov 1 21:00:41 2024 (r22051) @@ -160,7 +160,7 @@ const bool channelIsActive = chn.pCurrentSample && chn.nLength; if(sndFile.m_playBehaviour[kMODSampleSwap] && smp <= uint8_max && swapAtEnd && channelIsActive) { - chn.nNewIns = static_cast<uint8>(smp); + chn.swapSampleIndex = smp; return; } const ModSample &sample = sndFile.GetSample(smp); @@ -790,7 +790,7 @@ chn.nGlobalVol = static_cast<uint8>(std::clamp(chn.nGlobalVol + event.i16, 0, 64)); return false; case Event::Type::FTM_SetSample: - chn.nNewIns = event.u8 + 1; + chn.swapSampleIndex = event.u8 + 1; return false; case Event::Type::FTM_SetSampleStart: // Documentation says this should be in words, but it really appears to work with bytes. @@ -848,6 +848,7 @@ if(event.Byte1() & (0x04 | 0x08)) { chn.nNewIns = srcChn.nNewIns; + chn.swapSampleIndex = srcChn.swapSampleIndex; chn.pModSample = srcChn.pModSample; chn.position = srcChn.position; chn.dwFlags = (chn.dwFlags & CHN_CHANNELFLAGS) | (srcChn.dwFlags & CHN_SAMPLEFLAGS); Modified: trunk/OpenMPT/soundlib/Load_fc.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_fc.cpp Fri Nov 1 18:32:05 2024 (r22050) +++ trunk/OpenMPT/soundlib/Load_fc.cpp Fri Nov 1 21:00:41 2024 (r22051) @@ -338,7 +338,7 @@ Order().resize(numOrders); if(loadFlags & loadPatternData) Patterns.ResizeArray(numOrders); - std::array<std::array<uint8, 2>, 4> prevNote = {{}}; + std::array<uint8, 4> prevNote = {{}}; for(ORDERINDEX ord = 0; ord < numOrders; ord++) { Order()[ord] = ord; @@ -364,20 +364,21 @@ if(p[0] > 0 && p[0] != 0x49) { + prevNote[chn] = p[0]; m->note = NOTE_MIN + ((chnInfo.noteTranspose + p[0]) & 0x7F); if(int instr = (p[1] & 0x3F) + chnInfo.instrTranspose + 1; instr >= 1 && instr <= m_nInstruments) m->instr = static_cast<ModCommand::INSTR>(instr); else m->instr = static_cast<ModCommand::INSTR>(m_nInstruments); - - prevNote[chn] = {p[0], static_cast<uint8>(m->instr)}; - } else if(row == 0 && ord > 0 && orderData[ord - 1].channels[chn].noteTranspose != chnInfo.noteTranspose && prevNote[chn][0] > 0) + } else if(row == 0 && ord > 0 && orderData[ord - 1].channels[chn].noteTranspose != chnInfo.noteTranspose && prevNote[chn] > 0) { - m->note = NOTE_MIN + ((chnInfo.noteTranspose + prevNote[chn][0]) & 0x7F); - m->instr = prevNote[chn][1]; - m->SetVolumeCommand(VOLCMD_TONEPORTAMENTO, 9); + m->note = NOTE_MIN + ((chnInfo.noteTranspose + prevNote[chn]) & 0x7F); + if(p[1] & 0xC0) + m->SetVolumeCommand(VOLCMD_TONEPORTAMENTO, 9); + else + m->SetEffectCommand(CMD_TONEPORTA_DURATION, 0); } - if((p[1] & 0xC0)) + if(p[1] & 0xC0) m->SetEffectCommand(CMD_AUTO_PORTAMENTO_FC, 0); if(p[1] & 0x80) { Modified: trunk/OpenMPT/soundlib/Load_gt2.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_gt2.cpp Fri Nov 1 18:32:05 2024 (r22050) +++ trunk/OpenMPT/soundlib/Load_gt2.cpp Fri Nov 1 21:00:41 2024 (r22051) @@ -460,8 +460,8 @@ m.vol = 9; } else { - m.command = CMD_TONEPORTAMENTO; - m.param = 0xFF; + m.command = CMD_TONEPORTA_DURATION; + m.param = 0; } } } Modified: trunk/OpenMPT/soundlib/Load_symmod.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_symmod.cpp Fri Nov 1 18:32:05 2024 (r22050) +++ trunk/OpenMPT/soundlib/Load_symmod.cpp Fri Nov 1 21:00:41 2024 (r22051) @@ -1503,7 +1503,7 @@ if(mappedInst != chnState.lastInst) break; m.note = note; - m.SetEffectCommand(CMD_TONEPORTAMENTO, 0xFF); + m.SetEffectCommand(CMD_TONEPORTA_DURATION, 0); chnState.curPitchSlide = 0; chnState.tonePortaRemain = 0; chnState.retrigVibrato = chnState.retrigTremolo = true; @@ -1654,7 +1654,7 @@ break; case SymEvent::AddHalfTone: m.note = chnState.lastNote = Clamp(static_cast<uint8>(chnState.lastNote + event.param), NOTE_MIN, NOTE_MAX); - m.SetEffectCommand(CMD_TONEPORTAMENTO, 0xFF); + m.SetEffectCommand(CMD_TONEPORTA_DURATION, 0); chnState.tonePortaRemain = 0; break; Modified: trunk/OpenMPT/soundlib/ModChannel.cpp ============================================================================== --- trunk/OpenMPT/soundlib/ModChannel.cpp Fri Nov 1 18:32:05 2024 (r22050) +++ trunk/OpenMPT/soundlib/ModChannel.cpp Fri Nov 1 21:00:41 2024 (r22051) @@ -27,6 +27,7 @@ nNote = nNewNote = (sndFile.m_playBehaviour[kITInitialNoteMemory] ? NOTE_MIN : NOTE_NONE); nArpeggioLastNote = lastMidiNoteWithoutArp = NOTE_NONE; nNewIns = nOldIns = 0; + swapSampleIndex = 0; pModSample = defaultSample; pModInstrument = nullptr; nPortamentoDest = 0; Modified: trunk/OpenMPT/soundlib/ModChannel.h ============================================================================== --- trunk/OpenMPT/soundlib/ModChannel.h Fri Nov 1 18:32:05 2024 (r22050) +++ trunk/OpenMPT/soundlib/ModChannel.h Fri Nov 1 21:00:41 2024 (r22051) @@ -112,6 +112,7 @@ uint16 nRestorePanOnNewNote; // If > 0, nPan should be set to nRestorePanOnNewNote - 1 on new note. Used to recover from pan swing and IT sample / instrument panning. High bit set = surround uint16 nnaGeneration; // For PlaybackTest implementation CHANNELINDEX nMasterChn; + SAMPLEINDEX swapSampleIndex; // Sample to swap to when current sample (loop) has finished playing ModCommand rowCommand; // 8-bit members uint8 nGlobalVol; // Channel volume (CV in ITTECH.TXT) 0...64 Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp Fri Nov 1 18:32:05 2024 (r22050) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp Fri Nov 1 21:00:41 2024 (r22051) @@ -601,7 +601,7 @@ if (ModCommand::IsNote(note) && Instruments[p->instr]->Keyboard[note - NOTE_MIN] == 0) { chn.nNewNote = chn.nLastNote = note; - chn.nNewIns = static_cast<ModCommand::INSTR>(p->instr); + chn.nNewIns = p->instr; chn.rowCommand.Clear(); continue; } @@ -679,7 +679,7 @@ { if(chn.rowCommand.instr) { - chn.nNewIns = chn.rowCommand.instr; + chn.swapSampleIndex = chn.nNewIns = chn.rowCommand.instr; memory.chnSettings[nChn].vol = 0xFF; } if(chn.rowCommand.IsNote()) @@ -1486,7 +1486,7 @@ // We won't ignore them if a plugin is assigned to this slot, so that VSTis still work as intended. // Test case: emptyslot.it, PortaInsNum.it, gxsmp.it, gxsmp2.it chn.pModInstrument = nullptr; - chn.nNewIns = 0; + chn.swapSampleIndex = chn.nNewIns = 0; return; } pSmp = nullptr; @@ -1595,7 +1595,7 @@ if(returnAfterVolumeAdjust) return; // Instrument adjust - chn.nNewIns = 0; + chn.swapSampleIndex = chn.nNewIns = 0; // IT Compatiblity: NNA is reset on every note change, not every instrument change (fixes s7xinsnum.it). if (pIns && ((!m_playBehaviour[kITNNAReset] && pSmp) || pIns->nMixPlug || instrumentChanged)) @@ -1961,7 +1961,7 @@ chn.isPaused = false; if ((!bPorta) || (GetType() & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT))) - chn.nNewIns = 0; + chn.swapSampleIndex = chn.nNewIns = 0; uint32 period = GetPeriodFromNote(note, chn.nFineTune, chn.nC5Speed); chn.nPanbrelloOffset = 0; @@ -2779,6 +2779,7 @@ if(!triggerNote && chn.IsSamplePlaying()) { chn.nNewIns = static_cast<ModCommand::INSTR>(instr); + chn.swapSampleIndex = GetSampleIndex(chn.nLastNote, instr); if(instr <= GetNumSamples()) { chn.nVolume = Samples[instr].nVolume; @@ -2791,7 +2792,11 @@ if(triggerNote) { ModCommand::NOTE note = chn.rowCommand.note; - if(instr) chn.nNewIns = static_cast<ModCommand::INSTR>(instr); + if(instr) + { + chn.nNewIns = static_cast<ModCommand::INSTR>(instr); + chn.swapSampleIndex = GetSampleIndex(ModCommand::IsNote(note) ? note : chn.nLastNote, instr); + } if(ModCommand::IsNote(note) && m_playBehaviour[kFT2Transpose]) { @@ -3084,7 +3089,7 @@ InstrumentChange(chn, chn.nNewIns, bPorta, chn.pModSample == nullptr && chn.pModInstrument == nullptr, !(GetType() & (MOD_TYPE_XM|MOD_TYPE_MT2))); chn.nNewNote = note; - chn.nNewIns = 0; + chn.swapSampleIndex = chn.nNewIns = 0; } if(!chn.dwFlags[CHN_MUTE | CHN_SYNCMUTE] && chn.pModSample != nullptr && chn.pModSample->uFlags[CHN_ADLIB] && m_opl && (instrChange || !m_opl->IsActive(nChn))) { |
From: <sv...@op...> - 2024-11-01 17:32:26
|
Author: sagamusix Date: Fri Nov 1 18:32:05 2024 New Revision: 22050 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22050 Log: [Fix] Previous commit contained accidentally commented-out code, not actually completely fixing toki5.puma as a result. Modified: trunk/OpenMPT/soundlib/InstrumentSynth.cpp Modified: trunk/OpenMPT/soundlib/InstrumentSynth.cpp ============================================================================== --- trunk/OpenMPT/soundlib/InstrumentSynth.cpp Fri Nov 1 18:19:01 2024 (r22049) +++ trunk/OpenMPT/soundlib/InstrumentSynth.cpp Fri Nov 1 18:32:05 2024 (r22050) @@ -157,7 +157,7 @@ { if(smp < 1 || smp > sndFile.GetNumSamples()) return; - const bool channelIsActive = chn.pCurrentSample;// && chn.nLength; + const bool channelIsActive = chn.pCurrentSample && chn.nLength; if(sndFile.m_playBehaviour[kMODSampleSwap] && smp <= uint8_max && swapAtEnd && channelIsActive) { chn.nNewIns = static_cast<uint8>(smp); |
From: <sv...@op...> - 2024-11-01 17:19:10
|
Author: sagamusix Date: Fri Nov 1 18:19:01 2024 New Revision: 22049 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22049 Log: [Fix] Keep running synth scripts after sample playback has stopped. Fixes the snare echoes in toki5.puma. Modified: trunk/OpenMPT/soundlib/InstrumentSynth.cpp trunk/OpenMPT/soundlib/InstrumentSynth.h trunk/OpenMPT/soundlib/Sndmix.cpp Modified: trunk/OpenMPT/soundlib/InstrumentSynth.cpp ============================================================================== --- trunk/OpenMPT/soundlib/InstrumentSynth.cpp Fri Nov 1 16:38:20 2024 (r22048) +++ trunk/OpenMPT/soundlib/InstrumentSynth.cpp Fri Nov 1 18:19:01 2024 (r22049) @@ -24,6 +24,7 @@ { kJumpConditionSet, kGTKTremorEnabled, + kGTKTremorMute, kGTKTremoloEnabled, kGTKVibratoEnabled, kFCVibratoDelaySet, @@ -60,6 +61,7 @@ int8 m_pumaWaveformStep = 0; uint8 m_medVibratoEnvelope = uint8_max, m_medVibratoSpeed = 0, m_medVibratoDepth = 0; + int8 m_medVibratoValue = 0; uint16 m_medVibratoPos = 0; int16 m_medVolumeStep = 0; int16 m_medPeriodStep = 0; @@ -91,7 +93,7 @@ uint8 m_fcVolumeBendRemain = 0, m_fcPitchBendRemain = 0; void JumpToPosition(const Events &events, uint16 position); - void NextTick(const Events &events, PlayState &playState, CHANNELINDEX channel, int32 &period, const CSoundFile &sndFile, States &states); + void NextTick(const Events &events, PlayState &playState, CHANNELINDEX channel, const CSoundFile &sndFile, States &states); void ApplyChannelState(ModChannel &chn, int32 &period, const CSoundFile &sndFile); bool EvaluateEvent(const Event &event, PlayState &playState, CHANNELINDEX channel, const CSoundFile &sndFile, States &states); void EvaluateRunningEvent(const Event &event); @@ -155,13 +157,14 @@ { if(smp < 1 || smp > sndFile.GetNumSamples()) return; - if(sndFile.m_playBehaviour[kMODSampleSwap] && smp <= uint8_max && swapAtEnd && chn.pCurrentSample) + const bool channelIsActive = chn.pCurrentSample;// && chn.nLength; + if(sndFile.m_playBehaviour[kMODSampleSwap] && smp <= uint8_max && swapAtEnd && channelIsActive) { chn.nNewIns = static_cast<uint8>(smp); return; } const ModSample &sample = sndFile.GetSample(smp); - if(chn.pModSample == &sample && chn.pCurrentSample) + if(chn.pModSample == &sample && channelIsActive) return; chn.pModSample = &sample; chn.pCurrentSample = sample.samplev(); @@ -190,7 +193,7 @@ } -void InstrumentSynth::States::NextTick(PlayState &playState, CHANNELINDEX channel, int32 &period, const CSoundFile &sndFile) +void InstrumentSynth::States::NextTick(PlayState &playState, CHANNELINDEX channel, const CSoundFile &sndFile) { ModChannel &chn = playState.Chn[channel]; if(!chn.pModInstrument || !chn.pModInstrument->synth.HasScripts()) @@ -206,7 +209,18 @@ if(i == 1 && chn.rowCommand.command == CMD_MED_SYNTH_JUMP && chn.isFirstTick) state.JumpToPosition(scripts[i], chn.rowCommand.param); - state.NextTick(scripts[i], playState, channel, period, sndFile, *this); + state.NextTick(scripts[i], playState, channel, sndFile, *this); + } +} + + +void InstrumentSynth::States::ApplyChannelState(ModChannel &chn, int32 &period, const CSoundFile &sndFile) +{ + if(!chn.pModInstrument || !chn.pModInstrument->synth.HasScripts()) + return; + + for(auto &state : states) + { state.ApplyChannelState(chn, period, sndFile); } } @@ -226,7 +240,7 @@ } -void InstrumentSynth::States::State::NextTick(const Events &events, PlayState &playState, CHANNELINDEX channel, int32 &period, const CSoundFile &sndFile, States &states) +void InstrumentSynth::States::State::NextTick(const Events &events, PlayState &playState, CHANNELINDEX channel, const CSoundFile &sndFile, States &states) { if(events.empty()) return; @@ -322,9 +336,9 @@ static_assert(std::size(ModSinusTable) == 64); uint16 offset = m_medVibratoPos / 16u; if(m_medVibratoEnvelope == uint8_max) - period += ModSinusTable[(offset * 2) % std::size(ModSinusTable)] * m_medVibratoDepth / 64; + m_medVibratoValue = ModSinusTable[(offset * 2) % std::size(ModSinusTable)]; else if(chn->pModInstrument) - period += MEDEnvelopeFromSample(*chn->pModInstrument, sndFile, m_medVibratoEnvelope, offset) * m_medVibratoDepth / 64; + m_medVibratoValue = MEDEnvelopeFromSample(*chn->pModInstrument, sndFile, m_medVibratoEnvelope, offset); m_medVibratoPos = (m_medVibratoPos + m_medVibratoSpeed) % (32u * 16u); } @@ -346,8 +360,7 @@ { if(m_gtkTremorPos >= m_gtkTremorOnTime + m_gtkTremorOffTime) m_gtkTremorPos = 0; - else if(m_gtkTremorPos >= m_gtkTremorOnTime) - chn->nRealVolume = 0; + m_flags.set(kGTKTremorMute, m_gtkTremorPos >= m_gtkTremorOnTime); m_gtkTremorPos++; } if(m_flags[kGTKTremoloEnabled]) @@ -357,7 +370,7 @@ } if(m_flags[kGTKVibratoEnabled]) { - sndFile.DoFreqSlide(*chn, period, -ModSinusTable[(m_gtkVibratoPos / 4u) % std::size(ModSinusTable)] * m_gtkVibratoWidth / 96, false); + m_periodFreqSlide = static_cast<int16>(-ModSinusTable[(m_gtkVibratoPos / 4u) % std::size(ModSinusTable)] * m_gtkVibratoWidth / 96); m_gtkVibratoPos += m_gtkVibratoSpeed; } @@ -448,13 +461,12 @@ void InstrumentSynth::States::State::ApplyChannelState(ModChannel &chn, int32 &period, const CSoundFile &sndFile) { if(m_volumeFactor != 16384) - { chn.nRealVolume = Util::muldivr(chn.nRealVolume, m_volumeFactor, 16384); - } if(m_volumeAdd != int16_min) - { chn.nRealVolume = std::clamp(chn.nRealVolume + m_volumeAdd, int32(0), int32(16384)); - } + if(m_flags[kGTKTremorEnabled] && m_flags[kGTKTremorMute]) + chn.nRealVolume = 0; + if(m_panning != 2048) { if(chn.nRealPan >= 128) @@ -462,6 +474,7 @@ else chn.nRealPan += ((m_panning - 2048) * (chn.nRealPan)) / 2048; } + const bool periodsAreFrequencies = sndFile.PeriodsAreFrequencies(); if(m_linearPitchFactor != 0) period = ApplyLinearPitchSlide(period, m_linearPitchFactor, periodsAreFrequencies); @@ -471,6 +484,8 @@ period -= m_periodAdd; else period += m_periodAdd; + if(m_medVibratoDepth) + period += m_medVibratoValue * m_medVibratoDepth / 64; int16 vibratoFC = m_fcVibratoValue - m_fcVibratoDepth; const bool doVibratoFC = vibratoFC != 0 && m_fcVibratoDelay < 1; @@ -610,6 +625,7 @@ return false; case Event::Type::GTK_EnableVibrato: m_flags.set(kGTKVibratoEnabled, event.u8 != 0); + m_periodFreqSlide = 0; m_gtkVibratoPos = 0; if(!m_gtkVibratoWidth) m_gtkVibratoWidth = 3; @@ -641,7 +657,6 @@ chn.dwFlags.set(CHN_FASTVOLRAMP); return true; case Event::Type::Puma_StopVoice: - chn.nRealVolume = 0; chn.Stop(); m_nextRow = STOP_ROW; return true; @@ -1009,8 +1024,7 @@ auto &modChn = playState.Chn[chn]; if(modChn.rowCommand.command == CMD_MED_SYNTH_JUMP && !playState.m_nTickCount) states[chn].JumpToPosition(sndFile.m_globalScript, modChn.rowCommand.param); - int32 period = 0; - state.NextTick(sndFile.m_globalScript, playState, chn, period, sndFile, *this); + state.NextTick(sndFile.m_globalScript, playState, chn, sndFile, *this); } } Modified: trunk/OpenMPT/soundlib/InstrumentSynth.h ============================================================================== --- trunk/OpenMPT/soundlib/InstrumentSynth.h Fri Nov 1 16:38:20 2024 (r22048) +++ trunk/OpenMPT/soundlib/InstrumentSynth.h Fri Nov 1 18:19:01 2024 (r22049) @@ -18,6 +18,7 @@ OPENMPT_NAMESPACE_BEGIN class CSoundFile; +struct ModChannel; struct PlayState; struct InstrumentSynth @@ -254,7 +255,8 @@ States& operator=(States &&other) noexcept; void Stop(); - void NextTick(PlayState &playState, CHANNELINDEX channel, int32 &period, const CSoundFile &sndFile); + void NextTick(PlayState &playState, CHANNELINDEX channel, const CSoundFile &sndFile); + void ApplyChannelState(ModChannel &chn, int32 &period, const CSoundFile& sndFile); protected: std::vector<State> states; Modified: trunk/OpenMPT/soundlib/Sndmix.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp Fri Nov 1 16:38:20 2024 (r22048) +++ trunk/OpenMPT/soundlib/Sndmix.cpp Fri Nov 1 18:19:01 2024 (r22049) @@ -2188,6 +2188,8 @@ // Calc Frequency int32 period = 0; + chn.synthState.NextTick(m_PlayState, nChn, *this); + // Also process envelopes etc. when there's a plugin on this channel, for possible fake automation using volume and pan data. // We only care about master channels, though, since automation only "happens" on them. const bool samplePlaying = (chn.nPeriod && chn.nLength); @@ -2360,7 +2362,7 @@ if(samplePlaying) { - chn.synthState.NextTick(m_PlayState, nChn, period, *this); + chn.synthState.ApplyChannelState(chn, period, *this); m_PlayState.m_globalScriptState.ApplyChannelState(m_PlayState, nChn, period, *this); int nPeriodFrac = 0; |
From: <sv...@op...> - 2024-11-01 15:38:33
|
Author: sagamusix Date: Fri Nov 1 16:38:20 2024 New Revision: 22048 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22048 Log: [Fix] GT2: Tremolo and Vibrato could not be disabled. Modified: trunk/OpenMPT/soundlib/Load_gt2.cpp Modified: trunk/OpenMPT/soundlib/Load_gt2.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_gt2.cpp Fri Nov 1 16:03:06 2024 (r22047) +++ trunk/OpenMPT/soundlib/Load_gt2.cpp Fri Nov 1 16:38:20 2024 (r22048) @@ -1123,7 +1123,7 @@ events.push_back(InstrumentSynth::Event::GTK_EnableTremolo(true)); break; case 0x84: // 84: Tremolo Off - events.push_back(InstrumentSynth::Event::GTK_EnableTremolo(true)); + events.push_back(InstrumentSynth::Event::GTK_EnableTremolo(false)); break; case 0x85: // 85: Set Tremolo Width events.push_back(InstrumentSynth::Event::GTK_SetVibratoParams(std::max(chunk.ReadUint8(), uint8(1)), 0)); @@ -1136,7 +1136,7 @@ events.push_back(InstrumentSynth::Event::GTK_EnableVibrato(true)); break; case 0xA4: // A4: Vibrato Off - events.push_back(InstrumentSynth::Event::GTK_EnableVibrato(true)); + events.push_back(InstrumentSynth::Event::GTK_EnableVibrato(false)); break; case 0xA5: // A5: Set Vibrato Width events.push_back(InstrumentSynth::Event::GTK_SetVibratoParams(std::max(chunk.ReadUint8(), uint8(1)), 0)); |
From: <sv...@op...> - 2024-11-01 15:03:18
|
Author: sagamusix Date: Fri Nov 1 16:03:06 2024 New Revision: 22047 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22047 Log: [Fix] Instrument synth: Enable fast volume ramping on various volume commands. Modified: trunk/OpenMPT/soundlib/InstrumentSynth.cpp Modified: trunk/OpenMPT/soundlib/InstrumentSynth.cpp ============================================================================== --- trunk/OpenMPT/soundlib/InstrumentSynth.cpp Fri Nov 1 14:26:33 2024 (r22046) +++ trunk/OpenMPT/soundlib/InstrumentSynth.cpp Fri Nov 1 16:03:06 2024 (r22047) @@ -568,6 +568,7 @@ return false; case Event::Type::GTK_SetVolume: m_volumeFactor = event.u16; + chn.dwFlags.set(CHN_FASTVOLRAMP); return false; case Event::Type::GTK_SetPitch: m_gtkPitch = event.u16; @@ -637,6 +638,7 @@ case Event::Type::Puma_VolumeRamp: m_ticksRemain = event.Byte2(); m_volumeAdd = static_cast<int16>(event.Byte0() * 256 - 16384); + chn.dwFlags.set(CHN_FASTVOLRAMP); return true; case Event::Type::Puma_StopVoice: chn.nRealVolume = 0; @@ -657,6 +659,7 @@ case Event::Type::Mupp_SetWaveform: ChannelSetSample(chn, sndFile, static_cast<SAMPLEINDEX>(32 + event.Byte0() * 28 + event.Byte1())); m_volumeFactor = static_cast<uint16>(std::min(event.Byte2() & 0x7F, 64) * 256u); + chn.dwFlags.set(CHN_FASTVOLRAMP); return true; case Event::Type::MED_DefineArpeggio: @@ -683,6 +686,7 @@ return false; case Event::Type::MED_SetVolume: m_volumeFactor = event.u8 * 256u; + chn.dwFlags.set(CHN_FASTVOLRAMP); return true; case Event::Type::MED_SetWaveform: if(chn.pModInstrument) @@ -765,6 +769,7 @@ return false; case Event::Type::FTM_SetVolume: chn.nGlobalVol = std::min(event.u8, uint8(64)); + chn.dwFlags.set(CHN_FASTVOLRAMP); return false; case Event::Type::FTM_AddVolume: chn.nGlobalVol = static_cast<uint8>(std::clamp(chn.nGlobalVol + event.i16, 0, 64)); |
From: <sv...@op...> - 2024-11-01 13:26:46
|
Author: sagamusix Date: Fri Nov 1 14:26:33 2024 New Revision: 22046 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22046 Log: [Mod] FC: Always have all 256 frequency sequences available to have more predictable results when trying to jump to a sequence that wasn't stored in the file. Modified: trunk/OpenMPT/soundlib/Load_fc.cpp Modified: trunk/OpenMPT/soundlib/Load_fc.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_fc.cpp Fri Nov 1 13:23:03 2024 (r22045) +++ trunk/OpenMPT/soundlib/Load_fc.cpp Fri Nov 1 14:26:33 2024 (r22046) @@ -398,8 +398,10 @@ } std::vector<uint8> freqSequences, volSequences; + freqSequences.reserve(64 * 256); if(!file.Seek(fileHeader.freqSequenceOffset) || !file.ReadVector(freqSequences, fileHeader.freqSequenceSize)) return false; + freqSequences.resize(64 * 256); volSequences.reserve(fileHeader.volSequenceSize + 8); if(!file.Seek(fileHeader.volSequenceOffset) || !file.ReadVector(volSequences, fileHeader.volSequenceSize)) return false; @@ -411,7 +413,7 @@ for(INSTRUMENTINDEX ins = 1; ins <= m_nInstruments; ins++) { const auto volSeq = mpt::as_span(volSequences).subspan((ins - 1) * 64u); - const auto freqSeq = mpt::as_span(freqSequences).subspan((volSeq[1] * 64u) % freqSequences.size()); + const auto freqSeq = mpt::as_span(freqSequences).subspan(volSeq[1] * 64u); uint8 defaultSample = freqSeq[1]; if(freqSeq[0] == 0xE9) defaultSample = static_cast<uint8>(90 + defaultSample * 10 + freqSeq[2]); |
From: <sv...@op...> - 2024-11-01 12:23:15
|
Author: sagamusix Date: Fri Nov 1 13:23:03 2024 New Revision: 22045 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22045 Log: [Ref] Silence various gcc warnings. Modified: trunk/OpenMPT/soundlib/InstrumentSynth.cpp trunk/OpenMPT/soundlib/Load_fc.cpp Modified: trunk/OpenMPT/soundlib/InstrumentSynth.cpp ============================================================================== --- trunk/OpenMPT/soundlib/InstrumentSynth.cpp Thu Oct 31 21:50:32 2024 (r22044) +++ trunk/OpenMPT/soundlib/InstrumentSynth.cpp Fri Nov 1 13:23:03 2024 (r22045) @@ -439,7 +439,7 @@ if(m_flags[kFCPitchBendStep]) { m_fcPitchBendRemain--; - m_periodAdd -= m_fcPitchBendSpeed * 4; + m_periodAdd -= static_cast<int16>(m_fcPitchBendSpeed * 4); } } } @@ -483,7 +483,7 @@ if(doVibratoFC) { - uint16 note = (fcNote * 2) + 160; + int note = (fcNote * 2) + 160; while(note < 256) { vibratoFC *= 2; @@ -906,7 +906,7 @@ { uint8 waveform = event.Byte1() + 1; if(event.Byte0() == 0xE9) - waveform += event.Byte2() * 10 + 90; + waveform += static_cast<uint8>(event.Byte2() * 10 + 90); ChannelSetSample(chn, sndFile, waveform, event.Byte0() == 0xE4); } return false; Modified: trunk/OpenMPT/soundlib/Load_fc.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_fc.cpp Thu Oct 31 21:50:32 2024 (r22044) +++ trunk/OpenMPT/soundlib/Load_fc.cpp Fri Nov 1 13:23:03 2024 (r22045) @@ -138,7 +138,7 @@ // Luckily this is not possible with frequency sequences - as multiple frequency sequences can be chained using command E7, // not having to care for that bug there makes the book-keeping a bit easier for us, as jumps will always be "local" within the currently selected sequence, // and a jump target address cannot belong to two parsed sequences. - const uint16 maxScriptJumpPos = currentSequenceOffset + (isVolume ? 260 : 63); + const uint16 maxScriptJumpPos = static_cast<uint16>(currentSequenceOffset + (isVolume ? 260 : 63)); uint16 maxJump = 0; bool nextByteIsPitch = false; while(file.CanRead(1)) @@ -224,7 +224,7 @@ if(isVolume && script[0] > 1) { events.push_back(InstrumentSynth::Event::SetStepSpeed(1, true)); - events.push_back(InstrumentSynth::Event::Delay(delay + script[0] - 2)); + events.push_back(InstrumentSynth::Event::Delay(static_cast<uint16>(delay + script[0] - 2))); events.push_back(InstrumentSynth::Event::SetStepSpeed(script[0], true)); } else if(delay) { @@ -414,7 +414,7 @@ const auto freqSeq = mpt::as_span(freqSequences).subspan((volSeq[1] * 64u) % freqSequences.size()); uint8 defaultSample = freqSeq[1]; if(freqSeq[0] == 0xE9) - defaultSample = 90 + defaultSample * 10 + freqSeq[2]; + defaultSample = static_cast<uint8>(90 + defaultSample * 10 + freqSeq[2]); ModInstrument *instr = AllocateInstrument(ins, defaultSample + 1); if(!instr) |
From: <sv...@op...> - 2024-10-31 20:50:48
|
Author: sagamusix Date: Thu Oct 31 21:50:32 2024 New Revision: 22044 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22044 Log: Merged revision(s) 22004 from trunk/OpenMPT: [Imp] S3M: Fingerprint early Schism Tracker versions, as found in some 2007-ish S3Ms by Platonist. ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/soundlib/Load_s3m.cpp Modified: branches/OpenMPT-1.31/soundlib/Load_s3m.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/Load_s3m.cpp Thu Oct 31 21:23:03 2024 (r22043) +++ branches/OpenMPT-1.31/soundlib/Load_s3m.cpp Thu Oct 31 21:50:32 2024 (r22044) @@ -232,6 +232,15 @@ m_nMinPeriod = 64; m_nMaxPeriod = 32767; + ReadOrderFromFile<uint8>(Order(), file, fileHeader.ordNum, 0xFF, 0xFE); + + // Read sample header offsets + std::vector<uint16le> sampleOffsets; + file.ReadVector(sampleOffsets, fileHeader.smpNum); + // Read pattern offsets + std::vector<uint16le> patternOffsets; + file.ReadVector(patternOffsets, fileHeader.patNum); + // ST3 ignored Zxx commands, so if we find that a file was made with ST3, we should erase all MIDI macros. bool keepMidiMacros = false; @@ -241,6 +250,7 @@ bool isST3 = false; bool isSchism = false; const bool usePanningTable = fileHeader.usePanningTable == S3MFileHeader::idPanning; + const bool offsetsAreCanonical = !patternOffsets.empty() && !sampleOffsets.empty() && patternOffsets[0] > sampleOffsets[0]; const int32 schismDateVersion = SchismTrackerEpoch + ((fileHeader.cwtv == 0x4FFF) ? fileHeader.reserved2 : (fileHeader.cwtv - 0x4050)); switch(fileHeader.cwtv & S3MFileHeader::trackerMask) { @@ -252,18 +262,25 @@ if(!memcmp(&fileHeader.reserved2, "SCLUB2.0", 8)) { madeWithTracker = UL_("Sound Club 2"); - } else if(fileHeader.cwtv == S3MFileHeader::trkST3_20 && fileHeader.special == 0 && (fileHeader.ordNum & 0x0F) == 0 && fileHeader.ultraClicks == 0 && (fileHeader.flags & ~0x50) == 0 && usePanningTable) + } else if(fileHeader.cwtv == S3MFileHeader::trkST3_20 && fileHeader.special == 0 && (fileHeader.ordNum & 0x01) == 0 && fileHeader.ultraClicks == 0 && (fileHeader.flags & ~0x50) == 0 && usePanningTable && offsetsAreCanonical) { - // MPT and OpenMPT before 1.17.03.02 - Simply keep default (filter) MIDI macros - if((fileHeader.masterVolume & 0x80) != 0) + // Canonical offset check avoids mis-detection of an automatic conversion of Vic's "Paper" demo track + if((fileHeader.ordNum & 0x0F) == 0) { - m_dwLastSavedWithVersion = MPT_V("1.16"); - madeWithTracker = UL_("ModPlug Tracker / OpenMPT 1.17"); - } else + // MPT and OpenMPT before 1.17.03.02 - Simply keep default (filter) MIDI macros + if((fileHeader.masterVolume & 0x80) != 0) + { + m_dwLastSavedWithVersion = MPT_V("1.16"); + madeWithTracker = UL_("ModPlug Tracker / OpenMPT 1.17"); + } else + { + // MPT 1.0 alpha5 doesn't set the stereo flag, but MPT 1.0 alpha6 does. + m_dwLastSavedWithVersion = MPT_V("1.00.00.A0"); + madeWithTracker = UL_("ModPlug Tracker 1.0 alpha"); + } + } else if((fileHeader.masterVolume & 0x80) != 0) { - // MPT 1.0 alpha5 doesn't set the stereo flag, but MPT 1.0 alpha6 does. - m_dwLastSavedWithVersion = MPT_V("1.00.00.A0"); - madeWithTracker = UL_("ModPlug Tracker 1.0 alpha"); + madeWithTracker = UL_("Schism Tracker"); } keepMidiMacros = true; nonCompatTracker = true; @@ -511,15 +528,6 @@ m_nChannels = 1; } - ReadOrderFromFile<uint8>(Order(), file, fileHeader.ordNum, 0xFF, 0xFE); - - // Read sample header offsets - std::vector<uint16le> sampleOffsets; - file.ReadVector(sampleOffsets, fileHeader.smpNum); - // Read pattern offsets - std::vector<uint16le> patternOffsets; - file.ReadVector(patternOffsets, fileHeader.patNum); - // Read extended channel panning if(usePanningTable) { @@ -538,6 +546,7 @@ if(m_nChannels < 32 && m_dwLastSavedWithVersion == MPT_V("1.16")) { // MPT 1.0 alpha 6 up to 1.16.203 set ths panning bit for all channels, regardless of whether they are used or not. + // Note: Schism Tracker fixed the same bug in git commit f21fe8bcae8b6dde2df27ede4ac9fe563f91baff if(hasChannelsWithoutPanning) m_modFormat.madeWithTracker = UL_("ModPlug Tracker 1.16 / OpenMPT 1.17"); else |