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
(56) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <sv...@op...> - 2025-05-31 14:07:35
|
Author: manx Date: Sat May 31 16:07:23 2025 New Revision: 23254 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23254 Log: [Doc] libopenmpt: Update changelog. Modified: trunk/OpenMPT/doc/libopenmpt/changelog.md Modified: trunk/OpenMPT/doc/libopenmpt/changelog.md ============================================================================== --- trunk/OpenMPT/doc/libopenmpt/changelog.md Sat May 31 16:03:11 2025 (r23253) +++ trunk/OpenMPT/doc/libopenmpt/changelog.md Sat May 31 16:07:23 2025 (r23254) @@ -7,7 +7,7 @@ ### libopenmpt 0.9.0-pre -### libopenmpt 0.8.0-pre +### libopenmpt 0.8.0 (2025-05-31) * [**New**] Can now read PumaTracker (`PUMA`) modules. * [**New**] Can now read Face The Music (`FTM`) modules. |
From: <sv...@op...> - 2025-05-31 14:03:23
|
Author: manx Date: Sat May 31 16:03:11 2025 New Revision: 23253 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23253 Log: Merged revision(s) 23252 from trunk/OpenMPT: [Doc] libopenmpt 0.3 is EOL since a long time. ........ Modified: branches/OpenMPT-1.32/ (props changed) branches/OpenMPT-1.32/doc/libopenmpt_release.md Modified: branches/OpenMPT-1.32/doc/libopenmpt_release.md ============================================================================== --- branches/OpenMPT-1.32/doc/libopenmpt_release.md Sat May 31 16:02:49 2025 (r23252) +++ branches/OpenMPT-1.32/doc/libopenmpt_release.md Sat May 31 16:03:11 2025 (r23253) @@ -1,13 +1,6 @@ libopenmpt release process ========================== -0.3 ---- - -For libopenmpt 0.3, see -https://source.openmpt.org/svn/openmpt/branches/OpenMPT-1.27/doc/libopenmpt_release.md -. - 0.4 --- |
From: <sv...@op...> - 2025-05-31 14:03:00
|
Author: manx Date: Sat May 31 16:02:49 2025 New Revision: 23252 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23252 Log: [Doc] libopenmpt 0.3 is EOL since a long time. Modified: trunk/OpenMPT/doc/libopenmpt_release.md Modified: trunk/OpenMPT/doc/libopenmpt_release.md ============================================================================== --- trunk/OpenMPT/doc/libopenmpt_release.md Sat May 31 16:02:14 2025 (r23251) +++ trunk/OpenMPT/doc/libopenmpt_release.md Sat May 31 16:02:49 2025 (r23252) @@ -1,13 +1,6 @@ libopenmpt release process ========================== -0.3 ---- - -For libopenmpt 0.3, see -https://source.openmpt.org/svn/openmpt/branches/OpenMPT-1.27/doc/libopenmpt_release.md -. - 0.4 --- |
From: <sv...@op...> - 2025-05-31 14:02:21
|
Author: manx Date: Sat May 31 16:02:14 2025 New Revision: 23251 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23251 Log: Merged revision(s) 23250 from trunk/OpenMPT: [Doc] Update libopenmpt_release.md. ........ Modified: branches/OpenMPT-1.32/ (props changed) branches/OpenMPT-1.32/doc/libopenmpt_release.md Modified: branches/OpenMPT-1.32/doc/libopenmpt_release.md ============================================================================== --- branches/OpenMPT-1.32/doc/libopenmpt_release.md Sat May 31 16:01:00 2025 (r23250) +++ branches/OpenMPT-1.32/doc/libopenmpt_release.md Sat May 31 16:02:14 2025 (r23251) @@ -32,6 +32,13 @@ 0.7 --- +For libopenmpt 0.7, see +https://source.openmpt.org/svn/openmpt/branches/OpenMPT-1.31/doc/libopenmpt_release.md +. + +0.8 +--- + 1. ensure that the OpenMPT version is preferrably at a aa.bb.cc.00 version, otherwise increment the minorminor part to a new value used specifically for the libopenmpt release @@ -41,7 +48,7 @@ 4. website: update download links 5. wait for buildbot 6. in a website checkout, run (as printed by the release script) - ./release-0.7.sh $NEWVER +release + ./release-0.8.sh $NEWVER +release 7. increment OpenMPT version minorminor in `common/versionNumber.h` when all releases are done on the svn side (either libopenmpt only, or both libopenmpt and OpenMPT) |
From: <sv...@op...> - 2025-05-31 14:01:13
|
Author: manx Date: Sat May 31 16:01:00 2025 New Revision: 23250 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23250 Log: [Doc] Update libopenmpt_release.md. Modified: trunk/OpenMPT/doc/libopenmpt_release.md Modified: trunk/OpenMPT/doc/libopenmpt_release.md ============================================================================== --- trunk/OpenMPT/doc/libopenmpt_release.md Sat May 31 15:59:33 2025 (r23249) +++ trunk/OpenMPT/doc/libopenmpt_release.md Sat May 31 16:01:00 2025 (r23250) @@ -32,6 +32,13 @@ 0.7 --- +For libopenmpt 0.7, see +https://source.openmpt.org/svn/openmpt/branches/OpenMPT-1.31/doc/libopenmpt_release.md +. + +0.8 +--- + 1. ensure that the OpenMPT version is preferrably at a aa.bb.cc.00 version, otherwise increment the minorminor part to a new value used specifically for the libopenmpt release @@ -41,7 +48,7 @@ 4. website: update download links 5. wait for buildbot 6. in a website checkout, run (as printed by the release script) - ./release-0.7.sh $NEWVER +release + ./release-0.8.sh $NEWVER +release 7. increment OpenMPT version minorminor in `common/versionNumber.h` when all releases are done on the svn side (either libopenmpt only, or both libopenmpt and OpenMPT) |
From: <sv...@op...> - 2025-05-31 13:59:40
|
Author: manx Date: Sat May 31 15:59:33 2025 New Revision: 23249 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23249 Log: Merged revision(s) 23247 from trunk/OpenMPT: [Doc] Update release_branches.md. ........ Modified: branches/OpenMPT-1.32/ (props changed) branches/OpenMPT-1.32/doc/release_branches.md Modified: branches/OpenMPT-1.32/doc/release_branches.md ============================================================================== --- branches/OpenMPT-1.32/doc/release_branches.md Sat May 31 15:59:12 2025 (r23248) +++ branches/OpenMPT-1.32/doc/release_branches.md Sat May 31 15:59:33 2025 (r23249) @@ -38,11 +38,13 @@ 4. update version numbers in `build/svn/do_libopenmpt_release.sh` and `build/svn/do_libopenmpt_release_rc.sh` 5. update version number in `.appveyor.yml` + 6. update `doc/libopenmpt_release.md` 9. update versions in branch `https://source.openmpt.org/svn/openmpt/branches/OpenMPT-$VER`: 1. set OpenMPT version in `common/versionNumber.h` to `1.$VER.00.$MINORMINOR+1` 2. run `build/update_libopenmpt_version.sh bumpprerel` + 4. update `doc/libopenmpt_release.md` 10. update old stable branch 1. uncomment updating OpenMPT version in `build/svn/do_libopenmpt_release.sh` @@ -53,6 +55,3 @@ 13. update https://builds.openmpt.org/builds/ 14. update buildbot scripts that copy OpenMPT update information into place 15. update branch release date on libopenmpt trunk changelog - -unclear: - * adjust buildbot update management script |
From: <sv...@op...> - 2025-05-31 13:59:18
|
Author: manx Date: Sat May 31 15:59:12 2025 New Revision: 23248 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23248 Log: [Mod] OpenMPT: Version is now 1.32.01.01 Modified: branches/OpenMPT-1.32/common/versionNumber.h Modified: branches/OpenMPT-1.32/common/versionNumber.h ============================================================================== --- branches/OpenMPT-1.32/common/versionNumber.h Sat May 31 15:58:42 2025 (r23247) +++ branches/OpenMPT-1.32/common/versionNumber.h Sat May 31 15:59:12 2025 (r23248) @@ -16,4 +16,4 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 32 #define VER_MINOR 01 -#define VER_MINORMINOR 00 +#define VER_MINORMINOR 01 |
From: <sv...@op...> - 2025-05-31 13:58:58
|
Author: manx Date: Sat May 31 15:58:42 2025 New Revision: 23247 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23247 Log: [Doc] Update release_branches.md. Modified: trunk/OpenMPT/doc/release_branches.md Modified: trunk/OpenMPT/doc/release_branches.md ============================================================================== --- trunk/OpenMPT/doc/release_branches.md Sat May 31 15:56:16 2025 (r23246) +++ trunk/OpenMPT/doc/release_branches.md Sat May 31 15:58:42 2025 (r23247) @@ -38,11 +38,13 @@ 4. update version numbers in `build/svn/do_libopenmpt_release.sh` and `build/svn/do_libopenmpt_release_rc.sh` 5. update version number in `.appveyor.yml` + 6. update `doc/libopenmpt_release.md` 9. update versions in branch `https://source.openmpt.org/svn/openmpt/branches/OpenMPT-$VER`: 1. set OpenMPT version in `common/versionNumber.h` to `1.$VER.00.$MINORMINOR+1` 2. run `build/update_libopenmpt_version.sh bumpprerel` + 4. update `doc/libopenmpt_release.md` 10. update old stable branch 1. uncomment updating OpenMPT version in `build/svn/do_libopenmpt_release.sh` @@ -53,6 +55,3 @@ 13. update https://builds.openmpt.org/builds/ 14. update buildbot scripts that copy OpenMPT update information into place 15. update branch release date on libopenmpt trunk changelog - -unclear: - * adjust buildbot update management script |
From: <sv...@op...> - 2025-05-31 13:56:26
|
Author: manx Date: Sat May 31 15:56:14 2025 New Revision: 23245 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23245 Log: tag libopenmpt-0.8.0 Added: tags/libopenmpt-0.8.0/ - copied from r23244, branches/OpenMPT-1.32/ |
From: <sv...@op...> - 2025-05-31 13:56:22
|
Author: manx Date: Sat May 31 15:56:16 2025 New Revision: 23246 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23246 Log: [Mod] libopenmpt: Bump patch version. Modified: branches/OpenMPT-1.32/doc/libopenmpt/changelog.md branches/OpenMPT-1.32/libopenmpt/libopenmpt_version.h branches/OpenMPT-1.32/libopenmpt/libopenmpt_version.mk Modified: branches/OpenMPT-1.32/doc/libopenmpt/changelog.md ============================================================================== --- branches/OpenMPT-1.32/doc/libopenmpt/changelog.md Sat May 31 15:56:14 2025 (r23245) +++ branches/OpenMPT-1.32/doc/libopenmpt/changelog.md Sat May 31 15:56:16 2025 (r23246) @@ -5,6 +5,8 @@ For fully detailed change log, please see the source repository directly. This is just a high-level summary. +### libopenmpt 0.8.1-pre + ### libopenmpt 0.8.0 (2025-05-31) * [**New**] Can now read PumaTracker (`PUMA`) modules. Modified: branches/OpenMPT-1.32/libopenmpt/libopenmpt_version.h ============================================================================== --- branches/OpenMPT-1.32/libopenmpt/libopenmpt_version.h Sat May 31 15:56:14 2025 (r23245) +++ branches/OpenMPT-1.32/libopenmpt/libopenmpt_version.h Sat May 31 15:56:16 2025 (r23246) @@ -21,11 +21,11 @@ /*! \brief libopenmpt minor version number */ #define OPENMPT_API_VERSION_MINOR 8 /*! \brief libopenmpt patch version number */ -#define OPENMPT_API_VERSION_PATCH 0 +#define OPENMPT_API_VERSION_PATCH 1 /*! \brief libopenmpt pre-release tag */ -#define OPENMPT_API_VERSION_PREREL "" +#define OPENMPT_API_VERSION_PREREL "-pre.0" /*! \brief libopenmpt pre-release flag */ -#define OPENMPT_API_VERSION_IS_PREREL 0 +#define OPENMPT_API_VERSION_IS_PREREL 1 /*! \brief libopenmpt version number as a single integer value * \since 0.3 Modified: branches/OpenMPT-1.32/libopenmpt/libopenmpt_version.mk ============================================================================== --- branches/OpenMPT-1.32/libopenmpt/libopenmpt_version.mk Sat May 31 15:56:14 2025 (r23245) +++ branches/OpenMPT-1.32/libopenmpt/libopenmpt_version.mk Sat May 31 15:56:16 2025 (r23246) @@ -1,8 +1,8 @@ LIBOPENMPT_VERSION_MAJOR=0 LIBOPENMPT_VERSION_MINOR=8 -LIBOPENMPT_VERSION_PATCH=0 -LIBOPENMPT_VERSION_PREREL= +LIBOPENMPT_VERSION_PATCH=1 +LIBOPENMPT_VERSION_PREREL=-pre.0 LIBOPENMPT_LTVER_CURRENT=5 -LIBOPENMPT_LTVER_REVISION=0 +LIBOPENMPT_LTVER_REVISION=1 LIBOPENMPT_LTVER_AGE=5 |
From: <sv...@op...> - 2025-05-31 13:56:21
|
Author: manx Date: Sat May 31 15:56:12 2025 New Revision: 23244 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23244 Log: [Mod] libopenmpt: Prepare for release. Modified: branches/OpenMPT-1.32/doc/libopenmpt/changelog.md branches/OpenMPT-1.32/libopenmpt/libopenmpt_version.h branches/OpenMPT-1.32/libopenmpt/libopenmpt_version.mk Modified: branches/OpenMPT-1.32/doc/libopenmpt/changelog.md ============================================================================== --- branches/OpenMPT-1.32/doc/libopenmpt/changelog.md Sat May 31 15:44:33 2025 (r23243) +++ branches/OpenMPT-1.32/doc/libopenmpt/changelog.md Sat May 31 15:56:12 2025 (r23244) @@ -5,7 +5,7 @@ For fully detailed change log, please see the source repository directly. This is just a high-level summary. -### libopenmpt 0.8.0-rc +### libopenmpt 0.8.0 (2025-05-31) * [**New**] Can now read PumaTracker (`PUMA`) modules. * [**New**] Can now read Face The Music (`FTM`) modules. Modified: branches/OpenMPT-1.32/libopenmpt/libopenmpt_version.h ============================================================================== --- branches/OpenMPT-1.32/libopenmpt/libopenmpt_version.h Sat May 31 15:44:33 2025 (r23243) +++ branches/OpenMPT-1.32/libopenmpt/libopenmpt_version.h Sat May 31 15:56:12 2025 (r23244) @@ -23,9 +23,9 @@ /*! \brief libopenmpt patch version number */ #define OPENMPT_API_VERSION_PATCH 0 /*! \brief libopenmpt pre-release tag */ -#define OPENMPT_API_VERSION_PREREL "-rc.1" +#define OPENMPT_API_VERSION_PREREL "" /*! \brief libopenmpt pre-release flag */ -#define OPENMPT_API_VERSION_IS_PREREL 1 +#define OPENMPT_API_VERSION_IS_PREREL 0 /*! \brief libopenmpt version number as a single integer value * \since 0.3 Modified: branches/OpenMPT-1.32/libopenmpt/libopenmpt_version.mk ============================================================================== --- branches/OpenMPT-1.32/libopenmpt/libopenmpt_version.mk Sat May 31 15:44:33 2025 (r23243) +++ branches/OpenMPT-1.32/libopenmpt/libopenmpt_version.mk Sat May 31 15:56:12 2025 (r23244) @@ -1,7 +1,7 @@ LIBOPENMPT_VERSION_MAJOR=0 LIBOPENMPT_VERSION_MINOR=8 LIBOPENMPT_VERSION_PATCH=0 -LIBOPENMPT_VERSION_PREREL=-rc.1 +LIBOPENMPT_VERSION_PREREL= LIBOPENMPT_LTVER_CURRENT=5 LIBOPENMPT_LTVER_REVISION=0 |
From: <sv...@op...> - 2025-05-31 13:44:44
|
Author: sagamusix Date: Sat May 31 15:44:33 2025 New Revision: 23243 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23243 Log: Created tag for OpenMPT 1.32.01.00 Added: tags/1.32.01.00/ - copied from r23242, branches/OpenMPT-1.32/ |
From: <sv...@op...> - 2025-05-31 13:41:15
|
Author: sagamusix Date: Sat May 31 15:41:02 2025 New Revision: 23242 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23242 Log: [Mod] OpenMPT: Version is now 1.32.01.00 Modified: branches/OpenMPT-1.32/common/versionNumber.h Modified: branches/OpenMPT-1.32/common/versionNumber.h ============================================================================== --- branches/OpenMPT-1.32/common/versionNumber.h Sat May 31 15:40:41 2025 (r23241) +++ branches/OpenMPT-1.32/common/versionNumber.h Sat May 31 15:41:02 2025 (r23242) @@ -15,5 +15,5 @@ // Version definitions. The only thing that needs to be changed when changing version number. #define VER_MAJORMAJOR 1 #define VER_MAJOR 32 -#define VER_MINOR 00 -#define VER_MINORMINOR 43 +#define VER_MINOR 01 +#define VER_MINORMINOR 00 |
From: <sv...@op...> - 2025-05-31 13:40:48
|
Author: sagamusix Date: Sat May 31 15:40:41 2025 New Revision: 23241 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23241 Log: Merged revision(s) 23240 from trunk/OpenMPT: [Doc] Update release notes. ........ Modified: branches/OpenMPT-1.32/ (props changed) branches/OpenMPT-1.32/packageTemplate/History.txt branches/OpenMPT-1.32/packageTemplate/Release Notes.html Modified: branches/OpenMPT-1.32/packageTemplate/History.txt ============================================================================== --- branches/OpenMPT-1.32/packageTemplate/History.txt Sat May 31 15:40:19 2025 (r23240) +++ branches/OpenMPT-1.32/packageTemplate/History.txt Sat May 31 15:40:41 2025 (r23241) @@ -33,8 +33,8 @@ find our issue tracker and forums. -v1.32.01.00 (? May 2025, revision 23230) ----------------------------------------- +v1.32.01.00 (31 May 2025, revision 23242) +----------------------------------------- Tree view - [New] <js> The tree view can now also be placed on the right side of the window (View -> Toolbars). - [Imp] <js> The Instrument Library now shows size information for samples in modules as well, and uses cached information for displaying file size and modification time of on-disk files instead of querying this information from the operating system every time a file is selected. @@ -151,9 +151,10 @@ - [Fix] <js> MED: Tempo parameters > 255 BPM were not imported properly if the files was imported as MOD instead of XM (http://www.un4seen.com/forum/?msg=143478). - [Fix] <js> MED: Import notes that exceed OpenMPT's note range. - [Fix] <js> MED: Better handling of high octaves for non-MIDI instruments (http://www.un4seen.com/forum/?msg=144154). -- [Fix] <js> MED: Improve handling of low tempos in BPM mode (https://www.un4seen.com/forum/?msg=144160). +- [Fix] <js> MED: Improve handling of low tempos in BPM mode (http://www.un4seen.com/forum/?msg=144160). - [Fix] <js> MED: For IFFOCT instruments with extra sample loop information, the loop length was not correct. Sample transpose was also not applied correctly for IFFOCT instruments. - [Fix] <js> MED: Command FFF should not stop a note if it is triggered on the same row (http://www.un4seen.com/forum/?msg=144691). +- [Fix] <js> MED: Set Pitch command (FFD) was not implemented (http://www.un4seen.com/forum/?msg=145039). Stream Export - [New] <js> Can now export all sub songs to individual files (http://bugs.openmpt.org/view.php?id=1515). @@ -196,7 +197,8 @@ - [Mod] <js> Special key interception (Windows / Caps Lock / Scroll Lock / Num Lock) is now only active in contexts where a shortcut using that key is present (so e.g. having Note Off assigned to Caps Lock will now allow Caps Lock to be used as normal in another text edit field). - [Fix] <js> Various keyboard handling issues on Wine should be fixed (http://bugs.openmpt.org/view.php?id=713). - [Fix] <js> The "Previous Order" and "Next Order" shortcuts now also work when the pattern editor isn't focussed (http://bugs.openmpt.org/view.php?id=1489). -- [Fix] <js> Fix various keyboard focus issues when switching between upper and lower half of editor views or switching to another application and back (http://bugs.openmpt.org/view.php?id=1799, http://bugs.openmpt.org/view.php?id=1800). +- [Fix] <js> Fixed various keyboard focus issues when switching between upper and lower half of editor views or switching to another application and back (http://bugs.openmpt.org/view.php?id=1799, http://bugs.openmpt.org/view.php?id=1800). +- [Fix] <js> Fixed accessibility issues in the Chord Editor (http://bugs.openmpt.org/view.php?id=1886). - [Reg] <js> Global keyboard shortcuts can no longer be triggered while a menu or context menu is open. - [Reg] <js> On Windows XP and Wine 3.12 and older, messages with "don't show again" option are now always shown at most once (the checkbox is no longer visible). @@ -646,7 +648,7 @@ - [Mod] <js> Fixed volume and envelope position issues when seeking with sample sync and the target row contained a note without instrument number. Sample tab -- [Fix] <js> IFF: The workaround for 8SVX files with claimed zero-length body chunks (to accomodate for http://bugs.openmpt.org/view.php?id=117) was too aggressive, causing also files with empty NAME chunks to not load properly (http://bugs.openmpt.org/view.php?id=1715). +- [Fix] <js> IFF: The workaround for 8SVX files with claimed zero-length body chunks (to accommodate for http://bugs.openmpt.org/view.php?id=117) was too aggressive, causing also files with empty NAME chunks to not load properly (http://bugs.openmpt.org/view.php?id=1715). - [Fix] <js> IFF: 16-bit mono samples were saved as little-endian instead of big-endian. - [Fix] <js> Remove cue points from newly-created samples after slicing at cue points. The old cue points no longer make sense in the context of the new sample. Modified: branches/OpenMPT-1.32/packageTemplate/Release Notes.html ============================================================================== --- branches/OpenMPT-1.32/packageTemplate/Release Notes.html Sat May 31 15:40:19 2025 (r23240) +++ branches/OpenMPT-1.32/packageTemplate/Release Notes.html Sat May 31 15:40:41 2025 (r23241) @@ -111,19 +111,13 @@ </div> <ul> <li>There is now a quick start "<strong>project assistant</strong>" view that is shown whenever there is no module loaded.</li> - <li>OpenMPT is now fully DPI-aware by default, so it will look crisp and clean on all screen configurations. DPI-awareness can be changed in OpenMPT's Display settings to accomodate for older VST plugin editors that are not DPI-aware.</li> + <li>OpenMPT is now fully DPI-aware by default, so it will look crisp and clean on all screen configurations. DPI-awareness can be changed in OpenMPT's Display settings to accommodate for older VST plugin editors that are not DPI-aware.</li> <li><strong>Stream Export</strong> and <strong>MIDI Export</strong> have been updated to allow all sub songs of a module to be exported to separate files, the same way as it was already possible with VGM export.</li> <li>When <strong>auto-save</strong> is set to save files to a specific folder, this folder is now cleaned regularly and auto-save files older than 30 days are removed by default. Auto-saves are now moved to the recycling bin instead of deleting them permanently by default.</li> <li>The <strong>main toolbar</strong> is now more flexible, allowing you to hide individual readouts, adding a new <strong>global volume readout</strong>, and it wraps to multiple rows when it becomes wider than the main window. Readouts can now be edited using the keyboard during module playback.</li> <li>The <strong>keyboard settings</strong> have been considerably revamped and cleaned up. Assigning keyboard shortcuts and keeping track of current key assignments and conflicts should be much easier now. Two new built-in default keyboard maps, matching the note entry of Fasttracker 2 and Impulse Tracker more closely, are now available.</li> </ul> - <h3>Instrument Library</h3> - <ul> - <li>The tree view can now also be placed on the right side of the window (View → Toolbars).</li> - <li>The Instrument Library now shows size information for samples in modules as well.</li> - </ul> - <h3>Pattern Editor</h3> <ul> <li>OpenMPT now has a <strong>metronome</strong> that can be enabled from the pattern toolbar or via a keyboard shortcut.</li> @@ -145,7 +139,7 @@ <li>The output device list of the MIDI Input / Output Plugin now contains a new <strong>virtual MIDI output device</strong> that allows MIDI messages to be forwarded to the configured output plugin, thus allowing the aforementioned extended MIDI macros system to work with other plugins beyond just MIDI output devices.</strong> </ul> - <h3>Sample / Instrument Editor</h3> + <h3>Sample Editor</h3> <ul> <li>Greatly improved <strong>pitch shifting and time stretching</strong> with new high-quality algorithms. Using the Signalsmith Stretch library for both operations, pitch and duration can now be changed at the same time in high quality, with an optional "Akai"-like lo-fi mode available.</li> <li>When <strong>resampling samples in MOD</strong> files, there's now an option to automatically adjust pattern data accordingly.</li> @@ -158,9 +152,16 @@ <li>Sample and instrument names and filenames are now drawn using the same font that is used for Comments text.</li> </ul> + <h3>Instrument Library</h3> + <ul> + <li>The tree view can now also be placed on the right side of the window (View → Toolbars).</li> + <li>The Instrument Library now shows size information for samples in modules as well.</li> + </ul> + <h3>Playback and File Format Support</h3> <ul> - <li>In the MPTM format, every sequence now has its own <strong>default tempo and speed</strong>.</li> + <li>In the <strong>MPTM</strong> format, every sequence now has its own <strong>default tempo and speed</strong>.</li> + <li>When <strong>creating MOD files</strong>, you can now choose if you would like to create a MOD file compatible with ProTracker (4 channels, various ProTracker-specific quirks and the Amiga resampler are enabled) or if you want to use the MOD format with PC extensions (8 channels, bigger octave range, various ProTracker-specific quirks and the Amiga resampler are disabled).</li> <li>OpenMPT 1.32 adds support for eleven new module formats: <strong>PumaTracker</strong> (PUMA), <strong>Game Music Creator</strong> (GMC), |
From: <sv...@op...> - 2025-05-31 13:40:26
|
Author: sagamusix Date: Sat May 31 15:40:19 2025 New Revision: 23240 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23240 Log: [Doc] Update release notes. Modified: trunk/OpenMPT/packageTemplate/History.txt trunk/OpenMPT/packageTemplate/Release Notes.html Modified: trunk/OpenMPT/packageTemplate/History.txt ============================================================================== --- trunk/OpenMPT/packageTemplate/History.txt Sat May 31 12:11:47 2025 (r23239) +++ trunk/OpenMPT/packageTemplate/History.txt Sat May 31 15:40:19 2025 (r23240) @@ -33,8 +33,8 @@ find our issue tracker and forums. -v1.32.01.00 (? May 2025, revision 23230) ----------------------------------------- +v1.32.01.00 (31 May 2025, revision 23242) +----------------------------------------- Tree view - [New] <js> The tree view can now also be placed on the right side of the window (View -> Toolbars). - [Imp] <js> The Instrument Library now shows size information for samples in modules as well, and uses cached information for displaying file size and modification time of on-disk files instead of querying this information from the operating system every time a file is selected. @@ -151,9 +151,10 @@ - [Fix] <js> MED: Tempo parameters > 255 BPM were not imported properly if the files was imported as MOD instead of XM (http://www.un4seen.com/forum/?msg=143478). - [Fix] <js> MED: Import notes that exceed OpenMPT's note range. - [Fix] <js> MED: Better handling of high octaves for non-MIDI instruments (http://www.un4seen.com/forum/?msg=144154). -- [Fix] <js> MED: Improve handling of low tempos in BPM mode (https://www.un4seen.com/forum/?msg=144160). +- [Fix] <js> MED: Improve handling of low tempos in BPM mode (http://www.un4seen.com/forum/?msg=144160). - [Fix] <js> MED: For IFFOCT instruments with extra sample loop information, the loop length was not correct. Sample transpose was also not applied correctly for IFFOCT instruments. - [Fix] <js> MED: Command FFF should not stop a note if it is triggered on the same row (http://www.un4seen.com/forum/?msg=144691). +- [Fix] <js> MED: Set Pitch command (FFD) was not implemented (http://www.un4seen.com/forum/?msg=145039). Stream Export - [New] <js> Can now export all sub songs to individual files (http://bugs.openmpt.org/view.php?id=1515). @@ -196,7 +197,8 @@ - [Mod] <js> Special key interception (Windows / Caps Lock / Scroll Lock / Num Lock) is now only active in contexts where a shortcut using that key is present (so e.g. having Note Off assigned to Caps Lock will now allow Caps Lock to be used as normal in another text edit field). - [Fix] <js> Various keyboard handling issues on Wine should be fixed (http://bugs.openmpt.org/view.php?id=713). - [Fix] <js> The "Previous Order" and "Next Order" shortcuts now also work when the pattern editor isn't focussed (http://bugs.openmpt.org/view.php?id=1489). -- [Fix] <js> Fix various keyboard focus issues when switching between upper and lower half of editor views or switching to another application and back (http://bugs.openmpt.org/view.php?id=1799, http://bugs.openmpt.org/view.php?id=1800). +- [Fix] <js> Fixed various keyboard focus issues when switching between upper and lower half of editor views or switching to another application and back (http://bugs.openmpt.org/view.php?id=1799, http://bugs.openmpt.org/view.php?id=1800). +- [Fix] <js> Fixed accessibility issues in the Chord Editor (http://bugs.openmpt.org/view.php?id=1886). - [Reg] <js> Global keyboard shortcuts can no longer be triggered while a menu or context menu is open. - [Reg] <js> On Windows XP and Wine 3.12 and older, messages with "don't show again" option are now always shown at most once (the checkbox is no longer visible). @@ -646,7 +648,7 @@ - [Mod] <js> Fixed volume and envelope position issues when seeking with sample sync and the target row contained a note without instrument number. Sample tab -- [Fix] <js> IFF: The workaround for 8SVX files with claimed zero-length body chunks (to accomodate for http://bugs.openmpt.org/view.php?id=117) was too aggressive, causing also files with empty NAME chunks to not load properly (http://bugs.openmpt.org/view.php?id=1715). +- [Fix] <js> IFF: The workaround for 8SVX files with claimed zero-length body chunks (to accommodate for http://bugs.openmpt.org/view.php?id=117) was too aggressive, causing also files with empty NAME chunks to not load properly (http://bugs.openmpt.org/view.php?id=1715). - [Fix] <js> IFF: 16-bit mono samples were saved as little-endian instead of big-endian. - [Fix] <js> Remove cue points from newly-created samples after slicing at cue points. The old cue points no longer make sense in the context of the new sample. Modified: trunk/OpenMPT/packageTemplate/Release Notes.html ============================================================================== --- trunk/OpenMPT/packageTemplate/Release Notes.html Sat May 31 12:11:47 2025 (r23239) +++ trunk/OpenMPT/packageTemplate/Release Notes.html Sat May 31 15:40:19 2025 (r23240) @@ -111,19 +111,13 @@ </div> <ul> <li>There is now a quick start "<strong>project assistant</strong>" view that is shown whenever there is no module loaded.</li> - <li>OpenMPT is now fully DPI-aware by default, so it will look crisp and clean on all screen configurations. DPI-awareness can be changed in OpenMPT's Display settings to accomodate for older VST plugin editors that are not DPI-aware.</li> + <li>OpenMPT is now fully DPI-aware by default, so it will look crisp and clean on all screen configurations. DPI-awareness can be changed in OpenMPT's Display settings to accommodate for older VST plugin editors that are not DPI-aware.</li> <li><strong>Stream Export</strong> and <strong>MIDI Export</strong> have been updated to allow all sub songs of a module to be exported to separate files, the same way as it was already possible with VGM export.</li> <li>When <strong>auto-save</strong> is set to save files to a specific folder, this folder is now cleaned regularly and auto-save files older than 30 days are removed by default. Auto-saves are now moved to the recycling bin instead of deleting them permanently by default.</li> <li>The <strong>main toolbar</strong> is now more flexible, allowing you to hide individual readouts, adding a new <strong>global volume readout</strong>, and it wraps to multiple rows when it becomes wider than the main window. Readouts can now be edited using the keyboard during module playback.</li> <li>The <strong>keyboard settings</strong> have been considerably revamped and cleaned up. Assigning keyboard shortcuts and keeping track of current key assignments and conflicts should be much easier now. Two new built-in default keyboard maps, matching the note entry of Fasttracker 2 and Impulse Tracker more closely, are now available.</li> </ul> - <h3>Instrument Library</h3> - <ul> - <li>The tree view can now also be placed on the right side of the window (View → Toolbars).</li> - <li>The Instrument Library now shows size information for samples in modules as well.</li> - </ul> - <h3>Pattern Editor</h3> <ul> <li>OpenMPT now has a <strong>metronome</strong> that can be enabled from the pattern toolbar or via a keyboard shortcut.</li> @@ -145,7 +139,7 @@ <li>The output device list of the MIDI Input / Output Plugin now contains a new <strong>virtual MIDI output device</strong> that allows MIDI messages to be forwarded to the configured output plugin, thus allowing the aforementioned extended MIDI macros system to work with other plugins beyond just MIDI output devices.</strong> </ul> - <h3>Sample / Instrument Editor</h3> + <h3>Sample Editor</h3> <ul> <li>Greatly improved <strong>pitch shifting and time stretching</strong> with new high-quality algorithms. Using the Signalsmith Stretch library for both operations, pitch and duration can now be changed at the same time in high quality, with an optional "Akai"-like lo-fi mode available.</li> <li>When <strong>resampling samples in MOD</strong> files, there's now an option to automatically adjust pattern data accordingly.</li> @@ -158,9 +152,16 @@ <li>Sample and instrument names and filenames are now drawn using the same font that is used for Comments text.</li> </ul> + <h3>Instrument Library</h3> + <ul> + <li>The tree view can now also be placed on the right side of the window (View → Toolbars).</li> + <li>The Instrument Library now shows size information for samples in modules as well.</li> + </ul> + <h3>Playback and File Format Support</h3> <ul> - <li>In the MPTM format, every sequence now has its own <strong>default tempo and speed</strong>.</li> + <li>In the <strong>MPTM</strong> format, every sequence now has its own <strong>default tempo and speed</strong>.</li> + <li>When <strong>creating MOD files</strong>, you can now choose if you would like to create a MOD file compatible with ProTracker (4 channels, various ProTracker-specific quirks and the Amiga resampler are enabled) or if you want to use the MOD format with PC extensions (8 channels, bigger octave range, various ProTracker-specific quirks and the Amiga resampler are disabled).</li> <li>OpenMPT 1.32 adds support for eleven new module formats: <strong>PumaTracker</strong> (PUMA), <strong>Game Music Creator</strong> (GMC), |
From: <sv...@op...> - 2025-05-31 10:11:58
|
Author: sagamusix Date: Sat May 31 12:11:47 2025 New Revision: 23239 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23239 Log: Merged revision(s) 23238 from trunk/OpenMPT: [Imp] MED: Implement command FFD (Set Pitch). ........ Modified: branches/OpenMPT-1.32/ (props changed) branches/OpenMPT-1.32/soundlib/Load_med.cpp Modified: branches/OpenMPT-1.32/soundlib/Load_med.cpp ============================================================================== --- branches/OpenMPT-1.32/soundlib/Load_med.cpp Sat May 31 12:11:23 2025 (r23238) +++ branches/OpenMPT-1.32/soundlib/Load_med.cpp Sat May 31 12:11:47 2025 (r23239) @@ -524,9 +524,11 @@ case 0xF9: // Turn filter on m.SetEffectCommand(CMD_MODCMDEX, 0xF9 - param); break; + case 0xFD: // Set pitch + m.SetEffectCommand(CMD_TONEPORTA_DURATION, 0); + break; case 0xFA: // MIDI pedal on case 0xFB: // MIDI pedal off - case 0xFD: // Set pitch case 0xFE: // End of song break; case 0xFF: // Turn note off |
From: <sv...@op...> - 2025-05-31 10:11:36
|
Author: sagamusix Date: Sat May 31 12:11:23 2025 New Revision: 23238 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23238 Log: [Imp] MED: Implement command FFD (Set Pitch). Modified: trunk/OpenMPT/soundlib/Load_med.cpp Modified: trunk/OpenMPT/soundlib/Load_med.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_med.cpp Fri May 30 22:28:52 2025 (r23237) +++ trunk/OpenMPT/soundlib/Load_med.cpp Sat May 31 12:11:23 2025 (r23238) @@ -524,9 +524,11 @@ case 0xF9: // Turn filter on m.SetEffectCommand(CMD_MODCMDEX, 0xF9 - param); break; + case 0xFD: // Set pitch + m.SetEffectCommand(CMD_TONEPORTA_DURATION, 0); + break; case 0xFA: // MIDI pedal on case 0xFB: // MIDI pedal off - case 0xFD: // Set pitch case 0xFE: // End of song break; case 0xFF: // Turn note off |
From: <sv...@op...> - 2025-05-30 20:29:05
|
Author: sagamusix Date: Fri May 30 22:28:52 2025 New Revision: 23237 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23237 Log: Merged revision(s) 23236 from trunk/OpenMPT: [Fix] Installer didn't include version-specific release note images. ........ Modified: branches/OpenMPT-1.32/ (props changed) branches/OpenMPT-1.32/installer/install-multi-arch-retro.iss branches/OpenMPT-1.32/installer/install-multi-arch.iss Modified: branches/OpenMPT-1.32/installer/install-multi-arch-retro.iss ============================================================================== --- branches/OpenMPT-1.32/installer/install-multi-arch-retro.iss Fri May 30 22:28:28 2025 (r23236) +++ branches/OpenMPT-1.32/installer/install-multi-arch-retro.iss Fri May 30 22:28:52 2025 (r23237) @@ -103,7 +103,7 @@ Source: ..\packageTemplate\History.txt; DestDir: {app}; Flags: ignoreversion Source: ..\packageTemplate\OpenMPT Manual.chm; DestDir: {app}; Flags: ignoreversion -Source: ..\packageTemplate\ReleaseNotesImages\*.*; DestDir: {app}\ReleaseNotesImages\; Flags: ignoreversion +Source: ..\packageTemplate\ReleaseNotesImages\*.*; DestDir: {app}\ReleaseNotesImages\; Flags: ignoreversion recursesubdirs Source: ..\packageTemplate\Release Notes.html; DestDir: {app}; Flags: ignoreversion Source: ..\packageTemplate\OpenMPT Support and Community Forum.url; DestDir: {app}; Flags: ignoreversion Modified: branches/OpenMPT-1.32/installer/install-multi-arch.iss ============================================================================== --- branches/OpenMPT-1.32/installer/install-multi-arch.iss Fri May 30 22:28:28 2025 (r23236) +++ branches/OpenMPT-1.32/installer/install-multi-arch.iss Fri May 30 22:28:52 2025 (r23237) @@ -131,7 +131,7 @@ Source: ..\packageTemplate\History.txt; DestDir: {app}; Flags: ignoreversion Source: ..\packageTemplate\OpenMPT Manual.chm; DestDir: {app}; Flags: ignoreversion -Source: ..\packageTemplate\ReleaseNotesImages\*.*; DestDir: {app}\ReleaseNotesImages\; Flags: ignoreversion +Source: ..\packageTemplate\ReleaseNotesImages\*.*; DestDir: {app}\ReleaseNotesImages\; Flags: ignoreversion recursesubdirs Source: ..\packageTemplate\Release Notes.html; DestDir: {app}; Flags: ignoreversion Source: ..\packageTemplate\OpenMPT Support and Community Forum.url; DestDir: {app}; Flags: ignoreversion |
From: <sv...@op...> - 2025-05-30 20:28:39
|
Author: sagamusix Date: Fri May 30 22:28:28 2025 New Revision: 23236 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23236 Log: [Fix] Installer didn't include version-specific release note images. Modified: trunk/OpenMPT/installer/install-multi-arch-retro.iss trunk/OpenMPT/installer/install-multi-arch.iss Modified: trunk/OpenMPT/installer/install-multi-arch-retro.iss ============================================================================== --- trunk/OpenMPT/installer/install-multi-arch-retro.iss Fri May 30 18:42:20 2025 (r23235) +++ trunk/OpenMPT/installer/install-multi-arch-retro.iss Fri May 30 22:28:28 2025 (r23236) @@ -103,7 +103,7 @@ Source: ..\packageTemplate\History.txt; DestDir: {app}; Flags: ignoreversion Source: ..\packageTemplate\OpenMPT Manual.chm; DestDir: {app}; Flags: ignoreversion -Source: ..\packageTemplate\ReleaseNotesImages\*.*; DestDir: {app}\ReleaseNotesImages\; Flags: ignoreversion +Source: ..\packageTemplate\ReleaseNotesImages\*.*; DestDir: {app}\ReleaseNotesImages\; Flags: ignoreversion recursesubdirs Source: ..\packageTemplate\Release Notes.html; DestDir: {app}; Flags: ignoreversion Source: ..\packageTemplate\OpenMPT Support and Community Forum.url; DestDir: {app}; Flags: ignoreversion Modified: trunk/OpenMPT/installer/install-multi-arch.iss ============================================================================== --- trunk/OpenMPT/installer/install-multi-arch.iss Fri May 30 18:42:20 2025 (r23235) +++ trunk/OpenMPT/installer/install-multi-arch.iss Fri May 30 22:28:28 2025 (r23236) @@ -131,7 +131,7 @@ Source: ..\packageTemplate\History.txt; DestDir: {app}; Flags: ignoreversion Source: ..\packageTemplate\OpenMPT Manual.chm; DestDir: {app}; Flags: ignoreversion -Source: ..\packageTemplate\ReleaseNotesImages\*.*; DestDir: {app}\ReleaseNotesImages\; Flags: ignoreversion +Source: ..\packageTemplate\ReleaseNotesImages\*.*; DestDir: {app}\ReleaseNotesImages\; Flags: ignoreversion recursesubdirs Source: ..\packageTemplate\Release Notes.html; DestDir: {app}; Flags: ignoreversion Source: ..\packageTemplate\OpenMPT Support and Community Forum.url; DestDir: {app}; Flags: ignoreversion |
From: <sv...@op...> - 2025-05-30 16:42:34
|
Author: sagamusix Date: Fri May 30 18:42:20 2025 New Revision: 23235 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23235 Log: Merged revision(s) 23234 from trunk/OpenMPT: [Fix] Chord Editor: Put labels in correct tab order to improve accessibility (https://bugs.openmpt.org/view.php?id=1886). ........ Modified: branches/OpenMPT-1.32/ (props changed) branches/OpenMPT-1.32/mptrack/mptrack.rc Modified: branches/OpenMPT-1.32/mptrack/mptrack.rc ============================================================================== --- branches/OpenMPT-1.32/mptrack/mptrack.rc Fri May 30 18:41:35 2025 (r23234) +++ branches/OpenMPT-1.32/mptrack/mptrack.rc Fri May 30 18:42:20 2025 (r23235) @@ -1623,18 +1623,18 @@ BEGIN DEFPUSHBUTTON "Close",IDOK,264,102,50,14 CONTROL "",IDC_KEYBOARD1,"Static",SS_WHITERECT | SS_NOTIFY,6,36,306,56,WS_EX_CLIENTEDGE - COMBOBOX IDC_COMBO1,6,18,52,114,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "Shortcut Key:",IDC_STATIC,6,6,57,8 + COMBOBOX IDC_COMBO1,6,18,52,114,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,66,6,1,25 LTEXT "Base Key:",IDC_STATIC,78,6,40,8 COMBOBOX IDC_COMBO2,78,18,52,89,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_COMBO3,138,19,52,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "Note #1",IDC_STATIC,138,6,39,8 - COMBOBOX IDC_COMBO4,198,19,52,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO3,138,19,52,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "Note #2",IDC_STATIC,198,6,39,8 - COMBOBOX IDC_COMBO5,258,19,52,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO4,198,19,52,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "Note #3",IDC_STATIC,258,6,39,8 + COMBOBOX IDC_COMBO5,258,19,52,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "In ""Relative"" Base Key mode, all notes are relative to a previously entered note in the pattern cell where the chord is entered.",IDC_STATIC,6,102,252,18 - CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,66,6,1,25 END IDD_SPLASHSCREEN DIALOGEX 0, 0, 266, 188 @@ -2186,6 +2186,10 @@ IDD_PATTERN_PROPERTIES, DIALOG BEGIN END + + IDD_CHORDEDIT, DIALOG + BEGIN + END END #endif // APSTUDIO_INVOKED @@ -2453,8 +2457,8 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 100, 0, 0, - 0, 0, 0, 0 + 0, 0, 0, 0, + 0, 100, 0, 0 END IDD_SELECTMIXPLUGIN AFX_DIALOG_LAYOUT |
From: <sv...@op...> - 2025-05-30 16:41:48
|
Author: sagamusix Date: Fri May 30 18:41:35 2025 New Revision: 23234 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23234 Log: [Fix] Chord Editor: Put labels in correct tab order to improve accessibility (https://bugs.openmpt.org/view.php?id=1886). Modified: trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/mptrack.rc ============================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc Fri May 30 14:15:00 2025 (r23233) +++ trunk/OpenMPT/mptrack/mptrack.rc Fri May 30 18:41:35 2025 (r23234) @@ -1623,18 +1623,18 @@ BEGIN DEFPUSHBUTTON "Close",IDOK,264,102,50,14 CONTROL "",IDC_KEYBOARD1,"Static",SS_WHITERECT | SS_NOTIFY,6,36,306,56,WS_EX_CLIENTEDGE - COMBOBOX IDC_COMBO1,6,18,52,114,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "Shortcut Key:",IDC_STATIC,6,6,57,8 + COMBOBOX IDC_COMBO1,6,18,52,114,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,66,6,1,25 LTEXT "Base Key:",IDC_STATIC,78,6,40,8 COMBOBOX IDC_COMBO2,78,18,52,89,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_COMBO3,138,19,52,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "Note #1",IDC_STATIC,138,6,39,8 - COMBOBOX IDC_COMBO4,198,19,52,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO3,138,19,52,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "Note #2",IDC_STATIC,198,6,39,8 - COMBOBOX IDC_COMBO5,258,19,52,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO4,198,19,52,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "Note #3",IDC_STATIC,258,6,39,8 + COMBOBOX IDC_COMBO5,258,19,52,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "In ""Relative"" Base Key mode, all notes are relative to a previously entered note in the pattern cell where the chord is entered.",IDC_STATIC,6,102,252,18 - CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,66,6,1,25 END IDD_SPLASHSCREEN DIALOGEX 0, 0, 266, 188 @@ -2186,6 +2186,10 @@ IDD_PATTERN_PROPERTIES, DIALOG BEGIN END + + IDD_CHORDEDIT, DIALOG + BEGIN + END END #endif // APSTUDIO_INVOKED @@ -2453,8 +2457,8 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 100, 0, 0, - 0, 0, 0, 0 + 0, 0, 0, 0, + 0, 100, 0, 0 END IDD_SELECTMIXPLUGIN AFX_DIALOG_LAYOUT |
From: <sv...@op...> - 2025-05-30 12:15:13
|
Author: sagamusix Date: Fri May 30 14:15:00 2025 New Revision: 23233 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23233 Log: Merged revision(s) 23232 from trunk/OpenMPT: [Doc] libopenmpt: Update changelog. [Doc] Update preliminary OpenMPT 1.32 changelog and release notes. ........ Added: branches/OpenMPT-1.32/packageTemplate/ReleaseNotesImages/1.32/ - copied from r23232, trunk/OpenMPT/packageTemplate/ReleaseNotesImages/1.32/ Modified: branches/OpenMPT-1.32/ (props changed) branches/OpenMPT-1.32/doc/libopenmpt/changelog.md branches/OpenMPT-1.32/packageTemplate/History.txt branches/OpenMPT-1.32/packageTemplate/Release Notes.html Modified: branches/OpenMPT-1.32/doc/libopenmpt/changelog.md ============================================================================== --- branches/OpenMPT-1.32/doc/libopenmpt/changelog.md Fri May 30 14:14:38 2025 (r23232) +++ branches/OpenMPT-1.32/doc/libopenmpt/changelog.md Fri May 30 14:15:00 2025 (r23233) @@ -68,6 +68,8 @@ * [**Regression**] Using `EMSCRIPTEN_PORTS=1` with Emscripten older than 3.1.54 now requires additionally specifying `ANCIENT=1`. + * When formatting pattern data, effect letters in the volume column are now + always formatted correctly, regardless of the module format. * IT: Various playback fixes. * IT: When using tone portamento to another sample after the previous sample's sustain loop has been released, the new sample should also not play its Modified: branches/OpenMPT-1.32/packageTemplate/History.txt ============================================================================== --- branches/OpenMPT-1.32/packageTemplate/History.txt Fri May 30 14:14:38 2025 (r23232) +++ branches/OpenMPT-1.32/packageTemplate/History.txt Fri May 30 14:15:00 2025 (r23233) @@ -33,8 +33,8 @@ find our issue tracker and forums. -v1.32.01.00 (? April 2025, revision 23094) ------------------------------------------- +v1.32.01.00 (? May 2025, revision 23230) +---------------------------------------- Tree view - [New] <js> The tree view can now also be placed on the right side of the window (View -> Toolbars). - [Imp] <js> The Instrument Library now shows size information for samples in modules as well, and uses cached information for displaying file size and modification time of on-disk files instead of querying this information from the operating system every time a file is selected. @@ -57,20 +57,28 @@ - [New] <js> Can now set a separate background color for the active row when recording is enabled (http://bugs.openmpt.org/view.php?id=856). - [Imp] <js> Shortcuts that toggle settings with no immediate visual feedback now show the new setting value in the status bar (http://bugs.openmpt.org/view.php?id=500). - [Imp] <js> It is now possible to solo a group of channels at once. The solo shortcut applies to all channels in the current pattern selection. +- [Imp] <js> It is now possible in the Pattern Properties dialog to edit the properties of multiple patterns without having to close and re-open the dialog every time, and also change their names (http://forum.openmpt.org/index.php?topic=3454.0). - [Imp] <js> Global S9x commands are now applied while seeking as well. - [Imp] <js> Added hidden setting "Pattern Editor.AutoHideVolumeColumnForMOD" to disable the volume column by default for MOD and MOD-like formats (http://bugs.openmpt.org/view.php?id=1836). - [Imp] <js> The built-in pattern font is now automatically scaled according to DPI settings. From 150% onward it is upscaled 2x, from 250% onward it's 3x, etc... - [Imp] <js> "Continue song as soon as MIDI notes are being received" can now optionally start playback from the start of pattern, rather than from the current row (http://bugs.openmpt.org/view.php?id=445). +- [Imp] <js> Allow MIDI Pitch Bend messages to not be recorded at all, always record them as macros, always as finetune, or both (http://bugs.openmpt.org/view.php?id=1874). - [Imp] <js> In sample mode, show default volume also for note-less instruments (http://github.com/OpenMPT/openmpt/pull/29). - [Imp] <js> Reduced flickering text when updating channel and row headers. +- [Imp] <js> "Display rows / orders in hex" setting is now also applied to accessible announcements (http://bugs.openmpt.org/view.php?id=1876). - [Fix] <js> When inserting or duplicating multiple patterns, it was possible that patterns at the end of the order list disappeared. - [Fix] <js> Using the Toggle Overflow Paste shortcut didn't update the corresponding toolbar button. - [Fix] <js> Checking or unchecking Overflow Paste in one pattern editor didn't update the button in other pattern editors. +- [Fix] <js> It wasn't possible to toggle the record / VU meters / Plugin Display icons using the space bar. +- [Fix] <js> Fixed various accessibility issues in Quick Channel Settings dialog (http://bugs.openmpt.org/view.php?id=1880). +- [Fix] <js> After inserting patterns in the order list, the status bar and accessible announcement text were not updated. Sample tab - [Imp] <js> Replaced pitch shifting and time stretching components. By default, Signalsmith Stretch is now used for both high-quality shifting and stretching, and a custom "Akai"-like implementation can be used alternatively in "Lo-Fi Mode". Both implementations can handle any pitch shifting and time stretching amounts, and apply both changes simultaneously (http://bugs.openmpt.org/view.php?id=1808). - [Imp] <js> When resampling samples in MOD files, there is now an option to adjust pattern data accordingly (http://forum.openmpt.org/index.php?topic=7245.0). - [Imp] <js> The default / global volume tooltips now also show the effective amplification based on the sample / synth volume specified in the General tab (http://forum.openmpt.org/index.php?topic=7308.0). +- [Mod] <js> Loop information is now saved in FLAC metadata similar to how it is saved in WAV metadata when only a sustain loop is present. This way, it is possible to distinguish it from a normal sample loop. +- [Mod] <js> When resampling, sample offset command parameters are now rounded and parameters are never set to 0, as that would just recall the previous offset. Instrument tab - [New] <js> Last edited instrument is now remembered per-module if "Remember song window positions" is enabled. @@ -78,18 +86,20 @@ Comments tab - [New] <js> In addition to copying sample / instrument texts, they can now be pasted as well. - [Imp] <js> Sample and instrument names and filenames are now drawn using the Comments font (so typically a fixed-width font; http://bugs.openmpt.org/view.php?id=1758). +- [Imp] <js> Allow to click anywhere in the sample / instrument list to select or open the corresponding editor (http://bugs.openmpt.org/view.php?id=1883). VST / DMO Plugins - [New] <js> Can now load shell VST plugins (http://bugs.openmpt.org/view.php?id=1551). - [Imp] <js> VST: Improve correctness of PPQ position reporting. The PPQ is now also correct when the tempo changes, and when breaking to the next pattern, the position is rounded to the next start of measure (partially fixes https://bugs.openmpt.org/view.php?id=1731). - [Mod] <js> After seeking, plugins are informed immediately about the new playback position if playback is stopped (http://bugs.openmpt.org/view.php?id=1731). - [Fix] <js> Before OpenMPT 1.26, it was possible to send MIDI notes to channel plugins if the current instrument had a valid MIDI channel but no plugin assigned. The old behaviour is now re-enabled for old modules that rely on it. -- [Reg] <js> When a plugin referenced by a module isn't found, it is no longer added to the plugin library if it can be automatically found in the root of the VST plugin path specified in the OpenMPT settings. +- [Reg] <js> When a plugin referenced by a module isn't found, it is no longer added to the plugin library if it can be automatically found in the root of the VST plugin path specified in the OpenMPT settings. Playback - [Fix] <js> The retrigger command could behave differently when a MIDI channel was assigned to the active instrument (http://bugs.openmpt.org/view.php?id=1587). - [Fix] <js> NNA channels associated with VST plugins or the MIDI I/O plugin will no longer cause channel starvation with NNA set to "Continue". - [Fix] <js> Some plugin notes could keep playing forever when previewing samples or instruments while all NNA channels were in use. +- [Fix] <js> Avoid clicks on sample transition when applying a portamento effect between two different samples. MPTM - [New] <js> Every sequence has its own default tempo and speed now (http://bugs.openmpt.org/view.php?id=1322). @@ -101,10 +111,12 @@ - [Fix] <js> Offset with instrument number but no note should play offset effect with previous note (http://bugs.openmpt.org/view.php?id=1785). - [Fix] <js> Fixed various combinations of volume column and effect column portamento effects (http://bugs.openmpt.org/view.php?id=1827). - [Fix] <js> Implemented a quirk in command Lxx that always executes a portamento down when no tone portamento has been set up before, sometimes causing the target note to be reached immediately, or sliding the note down very subtly. -- [Fix] <js> Envelope Carry should not be influenced by a previous note-off (fixes bridge.it by rs3, http://www.un4seen.com/forum/?topic=15448.msg144272#msg144272). +- [Fix] <js> Envelope Carry should not be influenced by a previous note-off (fixes bridge.it by rs3, http://www.un4seen.com/forum/?msg=144272). XM +- [Mod] <js> Increased maximum channel count from 127 to 128, as MilkyTracker can write such files as well (http://bugs.openmpt.org/view.php?id=1877). - [Fix] <js> When a key-off is encountered before auto-vibrato sweep reaches full depth, the vibrato depth is reset. +- [Fix] <js> Offset effect memory should only be updated when the command is next to a note (tx cyrb). S3M - [Mod] <js> Impulse Tracker style edit timer is now stored, and also read from files made with Schism Tracker. @@ -112,6 +124,8 @@ MOD - [Imp] <js> Groo's "The Ultimate Beeper" now plays like in ProTracker. +- [Imp] <js> Modules saved with TakeTracker can now be identified. +- [Imp] <js> Improved Tetramed detection. Other formats - [New] <js> Can now read PumaTracker (PUMA) modules (http://bugs.openmpt.org/view.php?id=1327). @@ -130,15 +144,16 @@ - [New] <js> NST: His Master's Noise "Mupp" instruments are now supported, as well as command 7 "mega-arp". - [New] <js> Better support for automatic slide commands (commands that keep sliding on following rows) in various formats (http://bugs.openmpt.org/view.php?id=1773). - [Imp] <js> The pattern channel limit was raised from 127 to 192 for imported formats. -- [Imp] <js> SymMOD: Files containing more channels than OpenMPT can handle are no longer rejected (http://www.un4seen.com/forum/?topic=15448.msg143952#msg143952). +- [Imp] <js> SymMOD: Files containing more channels than OpenMPT can handle are no longer rejected (http://www.un4seen.com/forum/?msg=143952). - [Mod] <js> PSM: Sub-songs are now imported as independent sequences instead of being crammed together into the same order list. - [Fix] <js> DTM: Portamentos are now also evaluated on the first tick of the row. - [Fix] <js> MO3: If multiple sample slots shared the same Ogg Vorbis sample, only one sample slot was loaded. -- [Fix] <js> MED: Tempo parameters > 255 BPM were not imported properly if the files was imported as MOD instead of XM (http://www.un4seen.com/forum/?topic=15448.msg143478#msg143478). +- [Fix] <js> MED: Tempo parameters > 255 BPM were not imported properly if the files was imported as MOD instead of XM (http://www.un4seen.com/forum/?msg=143478). - [Fix] <js> MED: Import notes that exceed OpenMPT's note range. -- [Fix] <js> MED: Better handling of high octaves for non-MIDI instruments (http://www.un4seen.com/forum/?topic=15448.msg144154#msg144154). -- [Fix] <js> MED: Improve handling of low tempos in BPM mode (http://www.un4seen.com/forum/?topic=15448.msg144160#msg144160). -- [Fix] <js> MED: For IFFOCT instruments with extra sample loop information, the loop length was not correct. +- [Fix] <js> MED: Better handling of high octaves for non-MIDI instruments (http://www.un4seen.com/forum/?msg=144154). +- [Fix] <js> MED: Improve handling of low tempos in BPM mode (https://www.un4seen.com/forum/?msg=144160). +- [Fix] <js> MED: For IFFOCT instruments with extra sample loop information, the loop length was not correct. Sample transpose was also not applied correctly for IFFOCT instruments. +- [Fix] <js> MED: Command FFF should not stop a note if it is triggered on the same row (http://www.un4seen.com/forum/?msg=144691). Stream Export - [New] <js> Can now export all sub songs to individual files (http://bugs.openmpt.org/view.php?id=1515). @@ -176,7 +191,7 @@ - [Mod] <js> New default keyboard shortcuts that conflict with existing shortcut are now added if the conflicting shortcut is in a more specific context, as the latter would override it anyway. Previously, it was the other way around, potentially changing existing shortcut behaviours. - [Mod] <js> Global keyboard shortcuts no longer have priority over shortcuts in more specific contexts if they conflict, making their behaviour consistent with other contexts. - [Mod] <js> Folder browser now uses modern browser style when available. The old browser style can be enforced by the hidden setting "Display.UseOldStyleFolderBrowser" (http://bugs.openmpt.org/view.php?id=1687). -- [Mod] <js> When auto-saving to a custom folder, sample paths for external samples are no longer relative in auto-saved files. This way, it is guaranteed that they will still work correctly when being moved back to the module's original folder. +- [Mod] <js> When auto-saving to a custom folder, sample paths for external samples are no longer relative in auto-saved files. This way, it is guaranteed that they will still work correctly when being moved back to the module's original folder. - [Mod] <js> Various context menus are now opened when releasing the right mouse button, not when pressing it. - [Mod] <js> Special key interception (Windows / Caps Lock / Scroll Lock / Num Lock) is now only active in contexts where a shortcut using that key is present (so e.g. having Note Off assigned to Caps Lock will now allow Caps Lock to be used as normal in another text edit field). - [Fix] <js> Various keyboard handling issues on Wine should be fixed (http://bugs.openmpt.org/view.php?id=713). @@ -195,7 +210,7 @@ - [Reg] <js> MIDI I/O Plugin: The possibility to automate the MIDI input or output port was removed. The resolution of automation parameters was nowhere near enough to be able to actually select devices in a meaningful way. Third-Party Libraries -- [Imp] Update RtMidi (v6.0.0) +- [Imp] Update nlohmann-json (v3.12.0), RtMidi (v6.0.0) and UnRAR (v7.1.6) v1.31.15.00 (23 March 2025, revision 23072) @@ -250,7 +265,7 @@ - [Fix] <js> Advanced Settings: It was not possible to enter fractional values for settings of type float with system locales using a decimal separator other than ".". Third-Party Libraries -- [Imp] Update mpg123 (v1.32.10) and unrar (v7.1.2). +- [Imp] Update mpg123 (v1.32.10) and UnRAR (v7.1.2) v1.31.13.00 (1 December 2024, revision 22403) @@ -286,15 +301,15 @@ Other formats - [Imp] <js> Warn when Startrekker AM companion file for synthesized instruments is most likely missing. -- [Imp] <js> DBM / IMF / MED: When merging pattern commands, allow to move offset to volume column at the expense of a lower offset resolution. Slightly improves playback of ShowMeLove.med (http://www.un4seen.com/forum/?topic=15448.msg144136#msg144136). -- [Fix] <js> MED: Fix correct octave transposition in some MED files that have hardware mixing disabled but sample transpose enabled. Fixed Journey.med (http://www.un4seen.com/forum/?topic=15448.msg143713#msg143713). -- [Fix] <js> MED: Don't enable Amiga resampler if any stereo samples are found, as it does not support stereo samples (http://www.un4seen.com/forum/?topic=15448.msg144058#msg144058). -- [Fix] <js> MED: Fix tempo in some files using software mixing mode and legacy tempo values (http://www.un4seen.com/forum/?topic=15448.msg144080#msg144080). -- [Fix] <js> MED: Avoid importing effect memory for some commands (http://www.un4seen.com/forum/?topic=15448.msg144131#msg144131). -- [Fix] <js> MED: Retrigger with instrument-less note now keeps using the previous sample offset. Fixes Kris Hadalot.med (http://www.un4seen.com/forum/?topic=15448.msg144130#msg144130). -- [Fix] <js> MED: Disable sample swapping on notes with portamento, and don't resume stopped notes with portamento. Fixes Homeward_Trek.med by Soundburst (http://www.un4seen.com/forum/?topic=15448.msg144148#msg144148). +- [Imp] <js> DBM / IMF / MED: When merging pattern commands, allow to move offset to volume column at the expense of a lower offset resolution. Slightly improves playback of ShowMeLove.med (http://www.un4seen.com/forum/?msg=144136). +- [Fix] <js> MED: Fix correct octave transposition in some MED files that have hardware mixing disabled but sample transpose enabled. Fixed Journey.med (http://www.un4seen.com/forum/?msg=143713). +- [Fix] <js> MED: Don't enable Amiga resampler if any stereo samples are found, as it does not support stereo samples (http://www.un4seen.com/forum/?msg=144058). +- [Fix] <js> MED: Fix tempo in some files using software mixing mode and legacy tempo values (http://www.un4seen.com/forum/?msg=144080). +- [Fix] <js> MED: Avoid importing effect memory for some commands (http://www.un4seen.com/forum/?msg=144131). +- [Fix] <js> MED: Retrigger with instrument-less note now keeps using the previous sample offset. Fixes Kris Hadalot.med (http://www.un4seen.com/forum/?msg=144130). +- [Fix] <js> MED: Disable sample swapping on notes with portamento, and don't resume stopped notes with portamento. Fixes Homeward_Trek.med by Soundburst (http://www.un4seen.com/forum/?msg=144148). - [Fix] <js> MED: Only use 7-bit volume commands in MMD3 files made with a new enough version of MED Soundstudio. -- [Fix] <js> STM: Do not sanitize sample loop data. Scream Tracker 2 reads into the next sample's data when loops exceed the sample length (http://www.un4seen.com/forum/?topic=15448.msg144130#msg144130). +- [Fix] <js> STM: Do not sanitize sample loop data. Scream Tracker 2 reads into the next sample's data when loops exceed the sample length (http://www.un4seen.com/forum/?msg=144130). Module cleanup - [Fix] <js> Possible crash when searching for unused samples if an instrument refers to a non-existing sample slot. @@ -302,7 +317,7 @@ Misc - [Imp] <js> Added the possibility to disable enhanced GDI upscaling via hidden setting "Display.UseGDIUpcaling". This may fix freezes when opening the editors of some older VST plugins when this mode is enabled (http://bugs.openmpt.org/view.php?id=1524). - [Imp] <js> Channel Manager: Channel buttons now have tooltips. -- [Mod] <js> When enabling the "Display.HighResUI" option, OpenMPT claimed to support per-monitor awareness. This was not really usable, so OpenMPT now only claims to support one system-wide DPI setting. +- [Mod] <js> When enabling the "Display.HighResUI" option, OpenMPT claimed to support per-monitor awareness. This was not really usable, so OpenMPT now only claims to support one system-wide DPI setting. - [Mod] <js> Auto save no longer uses relative paths for external samples when auto saving to a user-specified folder. - [Fix] <js> MIDI recording: Velocity amplification was rounded down to integer multiples of 100% (http://bugs.openmpt.org/view.php?id=1835). - [Fix] <js> After loading a module with missing external samples, OpenMPT still prompted to save those empty sample slots to disk when closing the module. Doing that resulted in a crash. @@ -355,13 +370,13 @@ - [Imp] <js> Insert pattern break commands on the last pattern row when trying to save patterns shorter than 64 rows. Other formats -- [Imp] <js> ULT: Try to preserve global commands if there's e.g. both a speed and tempo command in the same cell. Fixes trance mission.ult (http://www.un4seen.com/forum/?topic=15448.msg143764#msg143764). +- [Imp] <js> ULT: Try to preserve global commands if there's e.g. both a speed and tempo command in the same cell. Fixes trance mission.ult (http://www.un4seen.com/forum/?msg=143764). - [Imp] <cs127> STM: Improve "last saved with" tracker identification (http://github.com/OpenMPT/openmpt/pull/23) -- [Imp] <js> SymMOD: When running out of Zxx macros, try to find the closest macro to use instead. Fixes files like ocean view.symmod with tons of filter sweeps (http://www.un4seen.com/forum/?topic=15448.msg143932#msg143932). -- [Mod] <js> SymMOD: Ignore unknown hunks instead of rejecting entire file, as that's what Symphonie does as well. Fixes reading of Natsh1.SymMOD, which has garbage at the end of the file (http://www.un4seen.com/forum/?topic=15448.msg143961#msg143961). -- [Fix] <js> OKT: Disable loop on type "B" samples if they're used on a mixed channel. Fixes sinfonia.okta (http://www.un4seen.com/forum/?topic=15448.msg143764#msg143764). +- [Imp] <js> SymMOD: When running out of Zxx macros, try to find the closest macro to use instead. Fixes files like ocean view.symmod with tons of filter sweeps (http://www.un4seen.com/forum/?msg=143932). +- [Mod] <js> SymMOD: Ignore unknown hunks instead of rejecting entire file, as that's what Symphonie does as well. Fixes reading of Natsh1.SymMOD, which has garbage at the end of the file (http://www.un4seen.com/forum/?msg=143961). +- [Fix] <js> OKT: Disable loop on type "B" samples if they're used on a mixed channel. Fixes sinfonia.okta (http://www.un4seen.com/forum/?msg=143764). - [Fix] <js> OKT: The last sample slot was never loaded. -- [Fix] <js> PTM: Halve offset command strength for 16-bit samples. Fixes leveled.ptm (http://www.un4seen.com/forum/?topic=15448.msg143764#msg143764). +- [Fix] <js> PTM: Halve offset command strength for 16-bit samples. Fixes leveled.ptm (http://www.un4seen.com/forum/?msg=143764). Stream Export - [Fix] <js> Aborting was not possible during the normalization step. @@ -398,20 +413,20 @@ Other formats - [New] <js> MID: SF2 sound banks embedded in RMI files are now also recognized. - [Imp] <js> PTM: Use square root pan law, like in XM files. -- [Imp] <js> OKT: Don't drop global commands when setting paired channel volume, and try to write channel volume on the next row in this situation (http://www.un4seen.com/forum/?topic=15448.msg143684#msg143684 +- [Imp] <js> OKT: Don't drop global commands when setting paired channel volume, and try to write channel volume on the next row in this situation (http://www.un4seen.com/forum/?msg=143684 - [Imp] <js> MED: Allow tempo parameters < 32 BPM. -- [Fix] <js> MED: Command 09 (set speed) was limited to 20 ticks per row instead of 32 ticks per row (http://www.un4seen.com/forum/?topic=15448.msg143294#msg143294). -- [Fix] <js> MED: Disallow free panning if hardware mixing is enabled (http://www.un4seen.com/forum/?topic=15448.msg143278#msg143278). -- [Fix] <js> MED: For MOD-style vibrato, a speed parameter of 0 was not treated as effect memory (http://www.un4seen.com/forum/?topic=15448.msg143464#msg143464). -- [Fix] <js> MED: Fix pattern index exhaustion in modules with multiple sub songs (http://www.un4seen.com/forum/?topic=15448.msg143464#msg143464). +- [Fix] <js> MED: Command 09 (set speed) was limited to 20 ticks per row instead of 32 ticks per row (http://www.un4seen.com/forum/?msg=143294). +- [Fix] <js> MED: Disallow free panning if hardware mixing is enabled (http://www.un4seen.com/forum/?msg=143278). +- [Fix] <js> MED: For MOD-style vibrato, a speed parameter of 0 was not treated as effect memory (http://www.un4seen.com/forum/?msg=143464). +- [Fix] <js> MED: Fix pattern index exhaustion in modules with multiple sub songs (http://www.un4seen.com/forum/?msg=143464). - [Fix] <js> MID: Embedded DLS sound banks were not being read. -- [Fix] <js> SFX: Ignore unused data at end of oneshot samples which sometimes caused clicky noises (http://www.un4seen.com/forum/?topic=15448.msg143414#msg143414). +- [Fix] <js> SFX: Ignore unused data at end of oneshot samples which sometimes caused clicky noises (http://www.un4seen.com/forum/?msg=143414). Module cleanup - [Fix] <js> Plugins only referenced by to-be-removed channels were not removed. Misc -- [Imp] <js> When using the /shared command line parameter, modules are now opened in the OpenMPT window that was last interacted with, instead of a more or less random one. +- [Imp] <js> When using the /shared command line parameter, modules are now opened in the OpenMPT window that was last interacted with, instead of a more or less random one. - [Imp] <js> When appending to an MPTM module, copy over restart position to the newly-created sequence. - [Fix] <js> Huge soundfonts failed to load if the hidden setting "Misc.CacheCompleteFileBeforeLoading" was used and the soundfont would not fit in memory. @@ -444,27 +459,27 @@ XM - [Imp] <js> For files saved with registered MadTracker 2 versions, do not show binary garbage (the user ID) in the "last saved with" information, instead simply show "registered". -- [Fix] <js> For some truncated files, the used tracker was not identified correctly. +- [Fix] <js> For some truncated files, the used tracker was not identified correctly. - [Fix] <js> oggmod does not support stereo samples but keeps the stereo flag when encoding such samples. They are now imported as mono samples instead of not importing them at all (tx AliceLR). S3M - [Imp] <js> Identify files saved with early Impulse Tracker versions, Sound Club 2, Liquid Tracker, NESMusa, UNMO3, deMODifier, Kosmic To-S3M, and better tell old ModPlug Tracker versions apart. MOD -- [Fix] <js> Allow sample swapping to work when swapping from a non-looping, stopped sample back to a looping sample (fixes MOD.energy, http://www.un4seen.com/forum/?topic=15448.msg143034#msg143034). +- [Fix] <js> Allow sample swapping to work when swapping from a non-looping, stopped sample back to a looping sample (fixes MOD.energy, http://www.un4seen.com/forum/?msg=143034). Other formats - [Imp] <js> MID: Allow importing up to 32 MIDI channels by either using the official port selection mechanism of the SMF format, or alternatively by using a Yamaha extension (http://forum.openmpt.org/index.php?topic=7200.0). - [Imp] <js> DTM: Identify files saved with Digital Tracker 2.3. - [Imp] <js> DBM: Import second sustain point in case the first sustain point is not set, or if it has a lower index than the first. -- [Fix] <js> DBM: When several instruments referenced the same sample with different properties (volume, loop points, etc.), only one set of properties was imported (fixes DBM.Supernova, http://www.un4seen.com/forum/?topic=15448.msg143091#msg143091). -- [Fix] <js> DBM: Prioritize effects more correctly when the same effect is encountered in both effect columns of a cell (fixes DBM.143_Gnoj, http://www.un4seen.com/forum/?topic=15448.msg143155#msg143155). -- [Fix] <js> DBM: Don't import offset effects when there's a tone portmento next to them (fixes DBM.123_Savo, http://www.un4seen.com/forum/?topic=15448.msg143155#msg143155). +- [Fix] <js> DBM: When several instruments referenced the same sample with different properties (volume, loop points, etc.), only one set of properties was imported (fixes DBM.Supernova, http://www.un4seen.com/forum/?msg=143091). +- [Fix] <js> DBM: Prioritize effects more correctly when the same effect is encountered in both effect columns of a cell (fixes DBM.143_Gnoj, http://www.un4seen.com/forum/?msg=143155). +- [Fix] <js> DBM: Don't import offset effects when there's a tone portmento next to them (fixes DBM.123_Savo, http://www.un4seen.com/forum/?msg=143155). - [Fix] <js> DBM: A few IT-specific playback quirks are disabled for more accurate playback (e.g. in "Are You Flying With Me?" by Jazzcat). - [Fix] <js> AMF: When running out of sample slots, file reading became be misaligned because the sample name was not skipped. - [Fix] <js> MED: Command 0F was not imported. Upper frequency limits should be more accurate now. -- [Fix] <js> MED: Channel panning is now only applied in MMD2 files if the free pan flag is set (http://www.un4seen.com/forum/?topic=15448.msg143276#msg143276). -- [Fix] <js> MED: Volume command resolution was incorrect for pre-MMD3 files (http://www.un4seen.com/forum/?topic=15448.msg143276#msg143276). +- [Fix] <js> MED: Channel panning is now only applied in MMD2 files if the free pan flag is set (http://www.un4seen.com/forum/?msg=143276). +- [Fix] <js> MED: Volume command resolution was incorrect for pre-MMD3 files (http://www.un4seen.com/forum/?msg=143276). Misc - [Fix] <js> Keyboard focus was not restored properly in the upper half of the editor views when switching from and back to OpenMPT (http://bugs.openmpt.org/view.php?id=1795). @@ -486,7 +501,7 @@ Other formats - [Imp] <js> MED: Additional command pages can now be read (http://bugs.openmpt.org/view.php?id=1783). -- [Imp] <js> MED: Echo DSP is now emulated (http://www.un4seen.com/forum/?topic=15448.msg143034#msg143034). +- [Imp] <js> MED: Echo DSP is now emulated (http://www.un4seen.com/forum/?msg=143034). - [Fix] <js> AMS: Default channel panning was broken, using all-center panning instead of MOD-style panning. - [Fix] <js> STP: Correctly import volume slides where both nibbles are set. - [Fix] <js> DSm: Only the first 48 samples were ever read. @@ -528,7 +543,7 @@ Other formats - [Imp] <js> STK: Loosen SoundTracker file rejection heuristics a bit to allow loading of files with overly long samples (romantic.stk) and malformed song titles (schmokk.mod, scramble_2.mod and others). Other heuristics has been tightened a bit. -- [Imp] <js> MED: Improve handling of default tempo, panning and channel volume in files containing more than one song (fixes sugar n spice.mmd3, http://www.un4seen.com/forum/?topic=15448.msg142659#msg142659). +- [Imp] <js> MED: Improve handling of default tempo, panning and channel volume in files containing more than one song (fixes sugar n spice.mmd3, http://www.un4seen.com/forum/?msg=142659). - [Mod] <js> MO3: Further reduce maximum allowed music data (not samples) size from 2 GiB to 512 MiB. - [Mod] <js> MDL: Slightly more accurate import of pattern command 9 (enabling envelopes instead of setting envelope position). - [Fix] <cs127> ULT: Support the highest three octaves. @@ -3701,7 +3716,7 @@ - [Imp] <js> Ctrl+Right-click can now also be used to delete an envelope point. - [Imp] <js> Nicer envelope drawing at higher zoom levels. Adjust default zoom level for High-DPI screens. - [Imp] <js> After grabbing a sustain or loop point with the mouse, it can now also be moved using the keyboard shortcuts for moving nodes. -- [Imp] <js> Show sample numbers in Sample Map editor (http://forum.openmpt.org/index.php?topic=1795.msg15678#msg15678). +- [Imp] <js> Show sample numbers in Sample Map editor (http://forum.openmpt.org/index.php?msg=15678). - [Imp] <js> When trying to load a module into an instrument slot, open it directly in the tree view for importing instruments. - [Imp] <js> Forward / backward mouse buttons can be used to switch to next / previous instrument. - [Fix] <js> Previewing several notes at once was broken for XM modules. @@ -4094,7 +4109,7 @@ - [Fix] <jh> Fixed random crash in ProTracker 1/2 mode when using on-the-fly sample swapping (http://bugs.openmpt.org/view.php?id=626). Other formats -- [Fix] <js> STM: Samples were not loaded correctly in some files, e.g. fracture in space" by Purple Motion (tx deus-ex, http://www.un4seen.com/forum/?topic=15448.msg113496#msg113496) +- [Fix] <js> STM: Samples were not loaded correctly in some files, e.g. fracture in space" by Purple Motion (tx deus-ex, http://www.un4seen.com/forum/?msg=113496) - [Fix] <js> STM: Volume slide nibbles are now prioritized correctly (fixes "fracture in space" by Purple Motion). Stream Export @@ -4275,7 +4290,7 @@ - [Fix] <js> Fixed possible crashes when using undo / redo, most notably when sample undo was disabled completely (http://bugs.openmpt.org/view.php?id=584). Instrument tab -- [Imp] <js> In the sample map editor, show faint red dots for notes that are already assigned to another sample (http://forum.openmpt.org/index.php?topic=4112.msg37495#msg37495). +- [Imp] <js> In the sample map editor, show faint red dots for notes that are already assigned to another sample (http://forum.openmpt.org/index.php?msg=37495). - [Fix] <js> Trying to play notes above B-9 caused a crash (http://bugs.openmpt.org/view.php?id=549). Tree view @@ -4576,7 +4591,7 @@ - [Fix] <jh> DMF: A bogus space was inserted in front of song messages. - [Fix] <js> DBM: Some fixes mostly related to volume slides and envelopes. - [Fix] <js> ITP: Song name was not being read. -- [Fix] <js> MT2: Fixed possible crash with some MT2 files (http://www.un4seen.com/forum/?topic=15448.msg107346#msg107346). +- [Fix] <js> MT2: Fixed possible crash with some MT2 files (http://www.un4seen.com/forum/?msg=107346). - [Fix] <js> MT2: Channel volume was not imported at all. - [Fix] <js> STM: Imported volume commands were slightly off when there was another command next to them. - [Fix] <js> UAX: Unnecessary empty sample slots were being created. Modified: branches/OpenMPT-1.32/packageTemplate/Release Notes.html ============================================================================== --- branches/OpenMPT-1.32/packageTemplate/Release Notes.html Fri May 30 14:14:38 2025 (r23232) +++ branches/OpenMPT-1.32/packageTemplate/Release Notes.html Fri May 30 14:15:00 2025 (r23233) @@ -4,7 +4,7 @@ <meta charset="utf-8"> <meta name="language" content="en"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>OpenMPT 1.31 Release Notes</title> + <title>OpenMPT 1.32 Release Notes</title> <style type="text/css"> * { font-family: Calibri, Roboto, sans-serif; } body @@ -93,75 +93,96 @@ <h1> <img src="ReleaseNotesImages/modplug.png" width="64" height="64" alt="OpenMPT Logo"> - OpenMPT 1.31 - Release Notes + OpenMPT 1.32 - Release Notes </h1> <p> It's been a while since the last major feature update, and we have been working on a bunch of great new features for this new version. - This document should give a rough overview about the biggest changes in OpenMPT 1.31. + This document should give a rough overview about the biggest changes in OpenMPT 1.32. </p> <h2>What's new?</h2> <h3>General</h3> - <ul> - <li>Removing unused samples now works more reliably in instrument mode.</li> - <li>Instead of re-adding all non-conflicting default shortcuts every time a keymap is loaded, they will now only be added if the keymap was last saved with an older version of OpenMPT than the version that introduced the default shortcut.</li> - <li><strong>Channel panning</strong> is now exported in <strong>MIDI export</strong> as MIDI CC 10. If several notes play on the same MIDI channel, the last triggered note's panning is always considered.</li> - <li>When a text field is focussed, native text field shortcuts (such as Ctrl+A and others) are now preferred over OpenMPT shortcuts that are specific to the current view. Previously, they already took precedence over global OpenMPT shortcuts that apply to all views.</li> - <li>Builds for Windows XP and Vista can now receive automatic updates as well.</li> + <div class="screenshots"> + <a href="ReleaseNotesImages/1.32/quick_start.png"><img src="ReleaseNotesImages/1.32/quick_start.png" width="300" height="382" alt="Project Assistant" title="Project Assistant"></a><br> + <a href="ReleaseNotesImages/1.32/main_toolbar.png"><img src="ReleaseNotesImages/1.32/main_toolbar.png" width="300" height="32" alt="New, editable global volume readout in the main toolbar" title="New, editable global volume readout in the main toolbar"></a><br> + <a href="ReleaseNotesImages/1.32/metronome_settings.png"><img src="ReleaseNotesImages/1.32/metronome_settings.png" width="300" height="266" alt="Metronome Settings" title="Metronome Settings"></a> + </div> + <ul> + <li>There is now a quick start "<strong>project assistant</strong>" view that is shown whenever there is no module loaded.</li> + <li>OpenMPT is now fully DPI-aware by default, so it will look crisp and clean on all screen configurations. DPI-awareness can be changed in OpenMPT's Display settings to accomodate for older VST plugin editors that are not DPI-aware.</li> + <li><strong>Stream Export</strong> and <strong>MIDI Export</strong> have been updated to allow all sub songs of a module to be exported to separate files, the same way as it was already possible with VGM export.</li> + <li>When <strong>auto-save</strong> is set to save files to a specific folder, this folder is now cleaned regularly and auto-save files older than 30 days are removed by default. Auto-saves are now moved to the recycling bin instead of deleting them permanently by default.</li> + <li>The <strong>main toolbar</strong> is now more flexible, allowing you to hide individual readouts, adding a new <strong>global volume readout</strong>, and it wraps to multiple rows when it becomes wider than the main window. Readouts can now be edited using the keyboard during module playback.</li> + <li>The <strong>keyboard settings</strong> have been considerably revamped and cleaned up. Assigning keyboard shortcuts and keeping track of current key assignments and conflicts should be much easier now. Two new built-in default keyboard maps, matching the note entry of Fasttracker 2 and Impulse Tracker more closely, are now available.</li> </ul> <h3>Instrument Library</h3> <ul> - <li>The <strong>Instrument Library</strong> in the Tree View is now <strong>searchable</strong>: Locating files and folders in the instrument library is now as easy as hitting Ctrl+F to open text field and entering a search term. Wildcards (* to match any number of characters, ? to match any single character) are supported, too.</li> - <li>It is now also possible to change the <strong>sorting</strong> of the instrument library. From the context menu, you can choose to sort the library alphabetically, by file size or file modification date.</li> - <li>Selecting a file in the instrument library shows its file size and modification date in the status bar.</li> + <li>The tree view can now also be placed on the right side of the window (View → Toolbars).</li> + <li>The Instrument Library now shows size information for samples in modules as well.</li> </ul> <h3>Pattern Editor</h3> <ul> - <li>New <strong>shortcuts to scroll the pattern view</strong> without having to use the mouse.</li> - <li>In the <strong>Effect Visualizer</strong>, the currently edited plugin parameter for PC events can now be selected from a dropdown menu.</li> + <li>OpenMPT now has a <strong>metronome</strong> that can be enabled from the pattern toolbar or via a keyboard shortcut.</li> + <li>Merge functionality has been extended to support <strong>merging into multiple patterns</strong> with a user-specified length. This way, it becomes possible to automatically rearrange e.g. 64-row patterns into 128-row patterns in one go.</li> + <li>When <strong>increasing pattern size</strong>, there is now an option to <strong>duplicate the existing contents</strong> to the newly-added rows.</li> + <li>Instrument / volume / effect <strong>column visibility</strong> can now be toggled independently, and column visibility is now remembered per-module if "Remember song window positions" is enabled.</li> + <li>For <strong>live playback</strong>, it is now possible to <strong>queue the next pattern</strong> to not only play when the current pattern is finished, but also when the current measure, beat or row is finished.</li> + <li>To better distinguish whether record mode is enabled or not, it is now possible to set a <strong>separate background color</strong> for the active row when recording is enabled.</li> + <li>It is now possible to <strong>solo a group of channels</strong> at once. The solo shortcut applies to all channels in the current pattern selection.</li> </ul> - + <h3>Plugins</h3> <ul> - <li><strong>Tone portamento</strong> can now be applied to plugins the same way as it works for samples (assuming that the target note is within the plugin's pitch bend range), and as a result now works properly in MIDI export as well. In order to make use of this feature in existing module files made with previous OpenMPT versions, compatibility settings need to be upgraded in the Song Properties dialog.</li> - <li>Individual plugins can now be <strong>auto-suspended</strong> if they output silence for four seconds.</li> - <li>Arpeggio notes no longer reset the current pitch bend position.</li> + <li><strong>VST shell plugins</strong> are now supported. Most importantly, this allows OpenMPT to use polac's vst3shell plugin to enable the use of VST 3 plugins.</li> + <li>Improved correctness of <strong>PPQ position reporting</strong>. The reported PPQ is now also correct when the tempo changes, and when breaking to the next pattern, the position is rounded to the next start of measure. It is also sent to MIDI devices when using the MIDI Input / Output Plugin and the "Send timing messages" option is enabled.</li> + <li>Plugins can now be <strong>solo</strong>-ed by holding Shift when pressing the Bypass checkbox. Holding Ctrl instead, only Master plugins are affected.</li> + <li>All <strong>mix modes</strong> are now available for <strong>instrument plugins</strong> as well.</li> + <li>The <strong>MIDI Input / Output Plugin</strong> was enhanced with the ability to send initial MIDI dumps on playback start, plus a new extended MIDI macro system realized through plugin parameters. This allows to send MIDI macros of any length through the MIDI I/O plugin.</strong> + <li>The output device list of the MIDI Input / Output Plugin now contains a new <strong>virtual MIDI output device</strong> that allows MIDI messages to be forwarded to the configured output plugin, thus allowing the aforementioned extended MIDI macros system to work with other plugins beyond just MIDI output devices.</strong> </ul> <h3>Sample / Instrument Editor</h3> <ul> - <li>Is is now possible to follow the play cursor when the sample waveform is zoomed in and not fully visible, as long as only a single note is being previewed. This can be enabled through the settings dialog or a keyboard shortcut (Shift+F by default).</li> - <li>Double-clicking a timeline item now pops up an input dialog for finetuning that item.</li> - </ul> - - <h3>Playback</h3> - <p> - A couple of playback behaviours have been changed and improved: - </p> - <ul> - <li>Reduced <strong>aliasing</strong> when downsampling with the Sinc + Low-Pass resampler.</li> - <li>XM fine portamentos are now also sent to plugins and also work when exporting XM to MIDI.</li> - <li>The sample position is now rounded instead of truncated when resampling without interpolation.</li> - <li>Improved playback compatibility for IT, S3M, MOD, MED, MO3 and ULT files.</li> - </ul> - - <h3>File Format Support</h3> - <ul> - <li>Samples can now be saved as <strong>Amiga IFF</strong> (8SVX / 16SVX) files.</li> - <li>OpenMPT 1.31 adds support for the following module formats: <strong>Composer 667</strong> (667), <strong>Graoumf Tracker</strong> (GTK / GT2), <strong>Dynamic Studio</strong> (DSM) and music from the game <strong>Imperium Galactica</strong> (XMF).</li> - <li>A variant of the <strong>DSMI AMF</strong> format typically using the DMF file extension, found in some DOS games distributed by Webfoot, is now supported as well.</li> - <li>A hacked variant of the MOD format (also using the DMF file extension) found in the DOS game "Apocalypse Abyss" can now be read as well.</li> - <li>In IT files, mono samples are now stored with <strong>lossless IT sample compression</strong> by default, reducing the file size of IT files. As compressed stereo samples are still not supported properly by some software that is most likely not going to be updated anymore, compression for stereo samples remain disabled for now.</li> - <li>FLAC stream export now supports 32-bit resolution.</li> - <li>DLS / SF2: Added support for delay and hold envelope sections as well as pitch envelopes. Individual envelopes for each drum key are now supported.</li> + <li>Greatly improved <strong>pitch shifting and time stretching</strong> with new high-quality algorithms. Using the Signalsmith Stretch library for both operations, pitch and duration can now be changed at the same time in high quality, with an optional "Akai"-like lo-fi mode available.</li> + <li>When <strong>resampling samples in MOD</strong> files, there's now an option to automatically adjust pattern data accordingly.</li> + <li>To reduce confusion, the default / global volume tooltips now also show the <strong>effective amplification</strong> based on the sample / synth volume specified in the General tab.</li> + </ul> + + <h3>Comments</h3> + <ul> + <li>In addition to copying sample / instrument texts, they can now be pasted as well. Now you can easily replace your instrument names with a poem you have written in an external text editor!</li> + <li>Sample and instrument names and filenames are now drawn using the same font that is used for Comments text.</li> + </ul> + + <h3>Playback and File Format Support</h3> + <ul> + <li>In the MPTM format, every sequence now has its own <strong>default tempo and speed</strong>.</li> + <li>OpenMPT 1.32 adds support for eleven new module formats: + <strong>PumaTracker</strong> (PUMA), + <strong>Game Music Creator</strong> (GMC), + <strong>ChipTracker</strong> (MOD), + <strong>TCB Tracker</strong> (MOD), + <strong>Images Music System</strong> (IMS), + <strong>Face The Music</strong> (FTM), + <strong>RealTracker</strong> (RTM), + <strong>EasyTrax</strong> (ETX), + <strong>UNIC Tracker</strong> (UNIC), + <strong>Future Composer</strong> (FC / FC13 / FC14 / SMOD), + and <strong>Chuck Biscuits / Black Artist </strong> (CBA).</li> + <li>Support for synthesized and hybrid instruments in MED files was added, together with several other playback fixes for MED files.</li> + <li>Better support for <strong>automatic slide commands</strong> (commands that keep sliding on following rows) in various formats was added.</li> + <li>"Mupp" instruments in His Master's Noise modules are now supported, as well as command 7 "mega-arp".</li> + <li>Sub-songs in PSM files are now imported as independent sequences instead of being crammed together into the same order list.</li> + <li>Various playback compatibility fixes for DTM, MOD, XM, S3M and IT modules.</li> </ul> <h3>There's more...</h3> <p> + This summary just scratches the surface of what has changed since OpenMPT 1.31. For a detailed description of what has changed, check <a href="History.txt">History.txt</a>. If you are new to OpenMPT, be sure to read the manual as well. </p> |
From: <sv...@op...> - 2025-05-30 12:14:52
|
Author: sagamusix Date: Fri May 30 14:14:38 2025 New Revision: 23232 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23232 Log: [Doc] libopenmpt: Update changelog. [Doc] Update preliminary OpenMPT 1.32 changelog and release notes. Added: trunk/OpenMPT/packageTemplate/ReleaseNotesImages/1.32/ trunk/OpenMPT/packageTemplate/ReleaseNotesImages/1.32/main_toolbar.png (contents, props changed) trunk/OpenMPT/packageTemplate/ReleaseNotesImages/1.32/metronome_settings.png (contents, props changed) trunk/OpenMPT/packageTemplate/ReleaseNotesImages/1.32/quick_start.png (contents, props changed) Modified: trunk/OpenMPT/doc/libopenmpt/changelog.md trunk/OpenMPT/packageTemplate/History.txt trunk/OpenMPT/packageTemplate/Release Notes.html Modified: trunk/OpenMPT/doc/libopenmpt/changelog.md ============================================================================== --- trunk/OpenMPT/doc/libopenmpt/changelog.md Fri May 30 14:09:34 2025 (r23231) +++ trunk/OpenMPT/doc/libopenmpt/changelog.md Fri May 30 14:14:38 2025 (r23232) @@ -70,6 +70,8 @@ * [**Regression**] Using `EMSCRIPTEN_PORTS=1` with Emscripten older than 3.1.54 now requires additionally specifying `ANCIENT=1`. + * When formatting pattern data, effect letters in the volume column are now + always formatted correctly, regardless of the module format. * IT: Various playback fixes. * IT: When using tone portamento to another sample after the previous sample's sustain loop has been released, the new sample should also not play its Modified: trunk/OpenMPT/packageTemplate/History.txt ============================================================================== --- trunk/OpenMPT/packageTemplate/History.txt Fri May 30 14:09:34 2025 (r23231) +++ trunk/OpenMPT/packageTemplate/History.txt Fri May 30 14:14:38 2025 (r23232) @@ -33,8 +33,8 @@ find our issue tracker and forums. -v1.32.01.00 (? April 2025, revision 23094) ------------------------------------------- +v1.32.01.00 (? May 2025, revision 23230) +---------------------------------------- Tree view - [New] <js> The tree view can now also be placed on the right side of the window (View -> Toolbars). - [Imp] <js> The Instrument Library now shows size information for samples in modules as well, and uses cached information for displaying file size and modification time of on-disk files instead of querying this information from the operating system every time a file is selected. @@ -57,20 +57,28 @@ - [New] <js> Can now set a separate background color for the active row when recording is enabled (http://bugs.openmpt.org/view.php?id=856). - [Imp] <js> Shortcuts that toggle settings with no immediate visual feedback now show the new setting value in the status bar (http://bugs.openmpt.org/view.php?id=500). - [Imp] <js> It is now possible to solo a group of channels at once. The solo shortcut applies to all channels in the current pattern selection. +- [Imp] <js> It is now possible in the Pattern Properties dialog to edit the properties of multiple patterns without having to close and re-open the dialog every time, and also change their names (http://forum.openmpt.org/index.php?topic=3454.0). - [Imp] <js> Global S9x commands are now applied while seeking as well. - [Imp] <js> Added hidden setting "Pattern Editor.AutoHideVolumeColumnForMOD" to disable the volume column by default for MOD and MOD-like formats (http://bugs.openmpt.org/view.php?id=1836). - [Imp] <js> The built-in pattern font is now automatically scaled according to DPI settings. From 150% onward it is upscaled 2x, from 250% onward it's 3x, etc... - [Imp] <js> "Continue song as soon as MIDI notes are being received" can now optionally start playback from the start of pattern, rather than from the current row (http://bugs.openmpt.org/view.php?id=445). +- [Imp] <js> Allow MIDI Pitch Bend messages to not be recorded at all, always record them as macros, always as finetune, or both (http://bugs.openmpt.org/view.php?id=1874). - [Imp] <js> In sample mode, show default volume also for note-less instruments (http://github.com/OpenMPT/openmpt/pull/29). - [Imp] <js> Reduced flickering text when updating channel and row headers. +- [Imp] <js> "Display rows / orders in hex" setting is now also applied to accessible announcements (http://bugs.openmpt.org/view.php?id=1876). - [Fix] <js> When inserting or duplicating multiple patterns, it was possible that patterns at the end of the order list disappeared. - [Fix] <js> Using the Toggle Overflow Paste shortcut didn't update the corresponding toolbar button. - [Fix] <js> Checking or unchecking Overflow Paste in one pattern editor didn't update the button in other pattern editors. +- [Fix] <js> It wasn't possible to toggle the record / VU meters / Plugin Display icons using the space bar. +- [Fix] <js> Fixed various accessibility issues in Quick Channel Settings dialog (http://bugs.openmpt.org/view.php?id=1880). +- [Fix] <js> After inserting patterns in the order list, the status bar and accessible announcement text were not updated. Sample tab - [Imp] <js> Replaced pitch shifting and time stretching components. By default, Signalsmith Stretch is now used for both high-quality shifting and stretching, and a custom "Akai"-like implementation can be used alternatively in "Lo-Fi Mode". Both implementations can handle any pitch shifting and time stretching amounts, and apply both changes simultaneously (http://bugs.openmpt.org/view.php?id=1808). - [Imp] <js> When resampling samples in MOD files, there is now an option to adjust pattern data accordingly (http://forum.openmpt.org/index.php?topic=7245.0). - [Imp] <js> The default / global volume tooltips now also show the effective amplification based on the sample / synth volume specified in the General tab (http://forum.openmpt.org/index.php?topic=7308.0). +- [Mod] <js> Loop information is now saved in FLAC metadata similar to how it is saved in WAV metadata when only a sustain loop is present. This way, it is possible to distinguish it from a normal sample loop. +- [Mod] <js> When resampling, sample offset command parameters are now rounded and parameters are never set to 0, as that would just recall the previous offset. Instrument tab - [New] <js> Last edited instrument is now remembered per-module if "Remember song window positions" is enabled. @@ -78,18 +86,20 @@ Comments tab - [New] <js> In addition to copying sample / instrument texts, they can now be pasted as well. - [Imp] <js> Sample and instrument names and filenames are now drawn using the Comments font (so typically a fixed-width font; http://bugs.openmpt.org/view.php?id=1758). +- [Imp] <js> Allow to click anywhere in the sample / instrument list to select or open the corresponding editor (http://bugs.openmpt.org/view.php?id=1883). VST / DMO Plugins - [New] <js> Can now load shell VST plugins (http://bugs.openmpt.org/view.php?id=1551). - [Imp] <js> VST: Improve correctness of PPQ position reporting. The PPQ is now also correct when the tempo changes, and when breaking to the next pattern, the position is rounded to the next start of measure (partially fixes https://bugs.openmpt.org/view.php?id=1731). - [Mod] <js> After seeking, plugins are informed immediately about the new playback position if playback is stopped (http://bugs.openmpt.org/view.php?id=1731). - [Fix] <js> Before OpenMPT 1.26, it was possible to send MIDI notes to channel plugins if the current instrument had a valid MIDI channel but no plugin assigned. The old behaviour is now re-enabled for old modules that rely on it. -- [Reg] <js> When a plugin referenced by a module isn't found, it is no longer added to the plugin library if it can be automatically found in the root of the VST plugin path specified in the OpenMPT settings. +- [Reg] <js> When a plugin referenced by a module isn't found, it is no longer added to the plugin library if it can be automatically found in the root of the VST plugin path specified in the OpenMPT settings. Playback - [Fix] <js> The retrigger command could behave differently when a MIDI channel was assigned to the active instrument (http://bugs.openmpt.org/view.php?id=1587). - [Fix] <js> NNA channels associated with VST plugins or the MIDI I/O plugin will no longer cause channel starvation with NNA set to "Continue". - [Fix] <js> Some plugin notes could keep playing forever when previewing samples or instruments while all NNA channels were in use. +- [Fix] <js> Avoid clicks on sample transition when applying a portamento effect between two different samples. MPTM - [New] <js> Every sequence has its own default tempo and speed now (http://bugs.openmpt.org/view.php?id=1322). @@ -101,10 +111,12 @@ - [Fix] <js> Offset with instrument number but no note should play offset effect with previous note (http://bugs.openmpt.org/view.php?id=1785). - [Fix] <js> Fixed various combinations of volume column and effect column portamento effects (http://bugs.openmpt.org/view.php?id=1827). - [Fix] <js> Implemented a quirk in command Lxx that always executes a portamento down when no tone portamento has been set up before, sometimes causing the target note to be reached immediately, or sliding the note down very subtly. -- [Fix] <js> Envelope Carry should not be influenced by a previous note-off (fixes bridge.it by rs3, http://www.un4seen.com/forum/?topic=15448.msg144272#msg144272). +- [Fix] <js> Envelope Carry should not be influenced by a previous note-off (fixes bridge.it by rs3, http://www.un4seen.com/forum/?msg=144272). XM +- [Mod] <js> Increased maximum channel count from 127 to 128, as MilkyTracker can write such files as well (http://bugs.openmpt.org/view.php?id=1877). - [Fix] <js> When a key-off is encountered before auto-vibrato sweep reaches full depth, the vibrato depth is reset. +- [Fix] <js> Offset effect memory should only be updated when the command is next to a note (tx cyrb). S3M - [Mod] <js> Impulse Tracker style edit timer is now stored, and also read from files made with Schism Tracker. @@ -112,6 +124,8 @@ MOD - [Imp] <js> Groo's "The Ultimate Beeper" now plays like in ProTracker. +- [Imp] <js> Modules saved with TakeTracker can now be identified. +- [Imp] <js> Improved Tetramed detection. Other formats - [New] <js> Can now read PumaTracker (PUMA) modules (http://bugs.openmpt.org/view.php?id=1327). @@ -130,15 +144,16 @@ - [New] <js> NST: His Master's Noise "Mupp" instruments are now supported, as well as command 7 "mega-arp". - [New] <js> Better support for automatic slide commands (commands that keep sliding on following rows) in various formats (http://bugs.openmpt.org/view.php?id=1773). - [Imp] <js> The pattern channel limit was raised from 127 to 192 for imported formats. -- [Imp] <js> SymMOD: Files containing more channels than OpenMPT can handle are no longer rejected (http://www.un4seen.com/forum/?topic=15448.msg143952#msg143952). +- [Imp] <js> SymMOD: Files containing more channels than OpenMPT can handle are no longer rejected (http://www.un4seen.com/forum/?msg=143952). - [Mod] <js> PSM: Sub-songs are now imported as independent sequences instead of being crammed together into the same order list. - [Fix] <js> DTM: Portamentos are now also evaluated on the first tick of the row. - [Fix] <js> MO3: If multiple sample slots shared the same Ogg Vorbis sample, only one sample slot was loaded. -- [Fix] <js> MED: Tempo parameters > 255 BPM were not imported properly if the files was imported as MOD instead of XM (http://www.un4seen.com/forum/?topic=15448.msg143478#msg143478). +- [Fix] <js> MED: Tempo parameters > 255 BPM were not imported properly if the files was imported as MOD instead of XM (http://www.un4seen.com/forum/?msg=143478). - [Fix] <js> MED: Import notes that exceed OpenMPT's note range. -- [Fix] <js> MED: Better handling of high octaves for non-MIDI instruments (http://www.un4seen.com/forum/?topic=15448.msg144154#msg144154). -- [Fix] <js> MED: Improve handling of low tempos in BPM mode (http://www.un4seen.com/forum/?topic=15448.msg144160#msg144160). -- [Fix] <js> MED: For IFFOCT instruments with extra sample loop information, the loop length was not correct. +- [Fix] <js> MED: Better handling of high octaves for non-MIDI instruments (http://www.un4seen.com/forum/?msg=144154). +- [Fix] <js> MED: Improve handling of low tempos in BPM mode (https://www.un4seen.com/forum/?msg=144160). +- [Fix] <js> MED: For IFFOCT instruments with extra sample loop information, the loop length was not correct. Sample transpose was also not applied correctly for IFFOCT instruments. +- [Fix] <js> MED: Command FFF should not stop a note if it is triggered on the same row (http://www.un4seen.com/forum/?msg=144691). Stream Export - [New] <js> Can now export all sub songs to individual files (http://bugs.openmpt.org/view.php?id=1515). @@ -176,7 +191,7 @@ - [Mod] <js> New default keyboard shortcuts that conflict with existing shortcut are now added if the conflicting shortcut is in a more specific context, as the latter would override it anyway. Previously, it was the other way around, potentially changing existing shortcut behaviours. - [Mod] <js> Global keyboard shortcuts no longer have priority over shortcuts in more specific contexts if they conflict, making their behaviour consistent with other contexts. - [Mod] <js> Folder browser now uses modern browser style when available. The old browser style can be enforced by the hidden setting "Display.UseOldStyleFolderBrowser" (http://bugs.openmpt.org/view.php?id=1687). -- [Mod] <js> When auto-saving to a custom folder, sample paths for external samples are no longer relative in auto-saved files. This way, it is guaranteed that they will still work correctly when being moved back to the module's original folder. +- [Mod] <js> When auto-saving to a custom folder, sample paths for external samples are no longer relative in auto-saved files. This way, it is guaranteed that they will still work correctly when being moved back to the module's original folder. - [Mod] <js> Various context menus are now opened when releasing the right mouse button, not when pressing it. - [Mod] <js> Special key interception (Windows / Caps Lock / Scroll Lock / Num Lock) is now only active in contexts where a shortcut using that key is present (so e.g. having Note Off assigned to Caps Lock will now allow Caps Lock to be used as normal in another text edit field). - [Fix] <js> Various keyboard handling issues on Wine should be fixed (http://bugs.openmpt.org/view.php?id=713). @@ -195,7 +210,7 @@ - [Reg] <js> MIDI I/O Plugin: The possibility to automate the MIDI input or output port was removed. The resolution of automation parameters was nowhere near enough to be able to actually select devices in a meaningful way. Third-Party Libraries -- [Imp] Update RtMidi (v6.0.0) +- [Imp] Update nlohmann-json (v3.12.0), RtMidi (v6.0.0) and UnRAR (v7.1.6) v1.31.15.00 (23 March 2025, revision 23072) @@ -250,7 +265,7 @@ - [Fix] <js> Advanced Settings: It was not possible to enter fractional values for settings of type float with system locales using a decimal separator other than ".". Third-Party Libraries -- [Imp] Update mpg123 (v1.32.10) and unrar (v7.1.2). +- [Imp] Update mpg123 (v1.32.10) and UnRAR (v7.1.2) v1.31.13.00 (1 December 2024, revision 22403) @@ -286,15 +301,15 @@ Other formats - [Imp] <js> Warn when Startrekker AM companion file for synthesized instruments is most likely missing. -- [Imp] <js> DBM / IMF / MED: When merging pattern commands, allow to move offset to volume column at the expense of a lower offset resolution. Slightly improves playback of ShowMeLove.med (http://www.un4seen.com/forum/?topic=15448.msg144136#msg144136). -- [Fix] <js> MED: Fix correct octave transposition in some MED files that have hardware mixing disabled but sample transpose enabled. Fixed Journey.med (http://www.un4seen.com/forum/?topic=15448.msg143713#msg143713). -- [Fix] <js> MED: Don't enable Amiga resampler if any stereo samples are found, as it does not support stereo samples (http://www.un4seen.com/forum/?topic=15448.msg144058#msg144058). -- [Fix] <js> MED: Fix tempo in some files using software mixing mode and legacy tempo values (http://www.un4seen.com/forum/?topic=15448.msg144080#msg144080). -- [Fix] <js> MED: Avoid importing effect memory for some commands (http://www.un4seen.com/forum/?topic=15448.msg144131#msg144131). -- [Fix] <js> MED: Retrigger with instrument-less note now keeps using the previous sample offset. Fixes Kris Hadalot.med (http://www.un4seen.com/forum/?topic=15448.msg144130#msg144130). -- [Fix] <js> MED: Disable sample swapping on notes with portamento, and don't resume stopped notes with portamento. Fixes Homeward_Trek.med by Soundburst (http://www.un4seen.com/forum/?topic=15448.msg144148#msg144148). +- [Imp] <js> DBM / IMF / MED: When merging pattern commands, allow to move offset to volume column at the expense of a lower offset resolution. Slightly improves playback of ShowMeLove.med (http://www.un4seen.com/forum/?msg=144136). +- [Fix] <js> MED: Fix correct octave transposition in some MED files that have hardware mixing disabled but sample transpose enabled. Fixed Journey.med (http://www.un4seen.com/forum/?msg=143713). +- [Fix] <js> MED: Don't enable Amiga resampler if any stereo samples are found, as it does not support stereo samples (http://www.un4seen.com/forum/?msg=144058). +- [Fix] <js> MED: Fix tempo in some files using software mixing mode and legacy tempo values (http://www.un4seen.com/forum/?msg=144080). +- [Fix] <js> MED: Avoid importing effect memory for some commands (http://www.un4seen.com/forum/?msg=144131). +- [Fix] <js> MED: Retrigger with instrument-less note now keeps using the previous sample offset. Fixes Kris Hadalot.med (http://www.un4seen.com/forum/?msg=144130). +- [Fix] <js> MED: Disable sample swapping on notes with portamento, and don't resume stopped notes with portamento. Fixes Homeward_Trek.med by Soundburst (http://www.un4seen.com/forum/?msg=144148). - [Fix] <js> MED: Only use 7-bit volume commands in MMD3 files made with a new enough version of MED Soundstudio. -- [Fix] <js> STM: Do not sanitize sample loop data. Scream Tracker 2 reads into the next sample's data when loops exceed the sample length (http://www.un4seen.com/forum/?topic=15448.msg144130#msg144130). +- [Fix] <js> STM: Do not sanitize sample loop data. Scream Tracker 2 reads into the next sample's data when loops exceed the sample length (http://www.un4seen.com/forum/?msg=144130). Module cleanup - [Fix] <js> Possible crash when searching for unused samples if an instrument refers to a non-existing sample slot. @@ -302,7 +317,7 @@ Misc - [Imp] <js> Added the possibility to disable enhanced GDI upscaling via hidden setting "Display.UseGDIUpcaling". This may fix freezes when opening the editors of some older VST plugins when this mode is enabled (http://bugs.openmpt.org/view.php?id=1524). - [Imp] <js> Channel Manager: Channel buttons now have tooltips. -- [Mod] <js> When enabling the "Display.HighResUI" option, OpenMPT claimed to support per-monitor awareness. This was not really usable, so OpenMPT now only claims to support one system-wide DPI setting. +- [Mod] <js> When enabling the "Display.HighResUI" option, OpenMPT claimed to support per-monitor awareness. This was not really usable, so OpenMPT now only claims to support one system-wide DPI setting. - [Mod] <js> Auto save no longer uses relative paths for external samples when auto saving to a user-specified folder. - [Fix] <js> MIDI recording: Velocity amplification was rounded down to integer multiples of 100% (http://bugs.openmpt.org/view.php?id=1835). - [Fix] <js> After loading a module with missing external samples, OpenMPT still prompted to save those empty sample slots to disk when closing the module. Doing that resulted in a crash. @@ -355,13 +370,13 @@ - [Imp] <js> Insert pattern break commands on the last pattern row when trying to save patterns shorter than 64 rows. Other formats -- [Imp] <js> ULT: Try to preserve global commands if there's e.g. both a speed and tempo command in the same cell. Fixes trance mission.ult (http://www.un4seen.com/forum/?topic=15448.msg143764#msg143764). +- [Imp] <js> ULT: Try to preserve global commands if there's e.g. both a speed and tempo command in the same cell. Fixes trance mission.ult (http://www.un4seen.com/forum/?msg=143764). - [Imp] <cs127> STM: Improve "last saved with" tracker identification (http://github.com/OpenMPT/openmpt/pull/23) -- [Imp] <js> SymMOD: When running out of Zxx macros, try to find the closest macro to use instead. Fixes files like ocean view.symmod with tons of filter sweeps (http://www.un4seen.com/forum/?topic=15448.msg143932#msg143932). -- [Mod] <js> SymMOD: Ignore unknown hunks instead of rejecting entire file, as that's what Symphonie does as well. Fixes reading of Natsh1.SymMOD, which has garbage at the end of the file (http://www.un4seen.com/forum/?topic=15448.msg143961#msg143961). -- [Fix] <js> OKT: Disable loop on type "B" samples if they're used on a mixed channel. Fixes sinfonia.okta (http://www.un4seen.com/forum/?topic=15448.msg143764#msg143764). +- [Imp] <js> SymMOD: When running out of Zxx macros, try to find the closest macro to use instead. Fixes files like ocean view.symmod with tons of filter sweeps (http://www.un4seen.com/forum/?msg=143932). +- [Mod] <js> SymMOD: Ignore unknown hunks instead of rejecting entire file, as that's what Symphonie does as well. Fixes reading of Natsh1.SymMOD, which has garbage at the end of the file (http://www.un4seen.com/forum/?msg=143961). +- [Fix] <js> OKT: Disable loop on type "B" samples if they're used on a mixed channel. Fixes sinfonia.okta (http://www.un4seen.com/forum/?msg=143764). - [Fix] <js> OKT: The last sample slot was never loaded. -- [Fix] <js> PTM: Halve offset command strength for 16-bit samples. Fixes leveled.ptm (http://www.un4seen.com/forum/?topic=15448.msg143764#msg143764). +- [Fix] <js> PTM: Halve offset command strength for 16-bit samples. Fixes leveled.ptm (http://www.un4seen.com/forum/?msg=143764). Stream Export - [Fix] <js> Aborting was not possible during the normalization step. @@ -398,20 +413,20 @@ Other formats - [New] <js> MID: SF2 sound banks embedded in RMI files are now also recognized. - [Imp] <js> PTM: Use square root pan law, like in XM files. -- [Imp] <js> OKT: Don't drop global commands when setting paired channel volume, and try to write channel volume on the next row in this situation (http://www.un4seen.com/forum/?topic=15448.msg143684#msg143684 +- [Imp] <js> OKT: Don't drop global commands when setting paired channel volume, and try to write channel volume on the next row in this situation (http://www.un4seen.com/forum/?msg=143684 - [Imp] <js> MED: Allow tempo parameters < 32 BPM. -- [Fix] <js> MED: Command 09 (set speed) was limited to 20 ticks per row instead of 32 ticks per row (http://www.un4seen.com/forum/?topic=15448.msg143294#msg143294). -- [Fix] <js> MED: Disallow free panning if hardware mixing is enabled (http://www.un4seen.com/forum/?topic=15448.msg143278#msg143278). -- [Fix] <js> MED: For MOD-style vibrato, a speed parameter of 0 was not treated as effect memory (http://www.un4seen.com/forum/?topic=15448.msg143464#msg143464). -- [Fix] <js> MED: Fix pattern index exhaustion in modules with multiple sub songs (http://www.un4seen.com/forum/?topic=15448.msg143464#msg143464). +- [Fix] <js> MED: Command 09 (set speed) was limited to 20 ticks per row instead of 32 ticks per row (http://www.un4seen.com/forum/?msg=143294). +- [Fix] <js> MED: Disallow free panning if hardware mixing is enabled (http://www.un4seen.com/forum/?msg=143278). +- [Fix] <js> MED: For MOD-style vibrato, a speed parameter of 0 was not treated as effect memory (http://www.un4seen.com/forum/?msg=143464). +- [Fix] <js> MED: Fix pattern index exhaustion in modules with multiple sub songs (http://www.un4seen.com/forum/?msg=143464). - [Fix] <js> MID: Embedded DLS sound banks were not being read. -- [Fix] <js> SFX: Ignore unused data at end of oneshot samples which sometimes caused clicky noises (http://www.un4seen.com/forum/?topic=15448.msg143414#msg143414). +- [Fix] <js> SFX: Ignore unused data at end of oneshot samples which sometimes caused clicky noises (http://www.un4seen.com/forum/?msg=143414). Module cleanup - [Fix] <js> Plugins only referenced by to-be-removed channels were not removed. Misc -- [Imp] <js> When using the /shared command line parameter, modules are now opened in the OpenMPT window that was last interacted with, instead of a more or less random one. +- [Imp] <js> When using the /shared command line parameter, modules are now opened in the OpenMPT window that was last interacted with, instead of a more or less random one. - [Imp] <js> When appending to an MPTM module, copy over restart position to the newly-created sequence. - [Fix] <js> Huge soundfonts failed to load if the hidden setting "Misc.CacheCompleteFileBeforeLoading" was used and the soundfont would not fit in memory. @@ -444,27 +459,27 @@ XM - [Imp] <js> For files saved with registered MadTracker 2 versions, do not show binary garbage (the user ID) in the "last saved with" information, instead simply show "registered". -- [Fix] <js> For some truncated files, the used tracker was not identified correctly. +- [Fix] <js> For some truncated files, the used tracker was not identified correctly. - [Fix] <js> oggmod does not support stereo samples but keeps the stereo flag when encoding such samples. They are now imported as mono samples instead of not importing them at all (tx AliceLR). S3M - [Imp] <js> Identify files saved with early Impulse Tracker versions, Sound Club 2, Liquid Tracker, NESMusa, UNMO3, deMODifier, Kosmic To-S3M, and better tell old ModPlug Tracker versions apart. MOD -- [Fix] <js> Allow sample swapping to work when swapping from a non-looping, stopped sample back to a looping sample (fixes MOD.energy, http://www.un4seen.com/forum/?topic=15448.msg143034#msg143034). +- [Fix] <js> Allow sample swapping to work when swapping from a non-looping, stopped sample back to a looping sample (fixes MOD.energy, http://www.un4seen.com/forum/?msg=143034). Other formats - [Imp] <js> MID: Allow importing up to 32 MIDI channels by either using the official port selection mechanism of the SMF format, or alternatively by using a Yamaha extension (http://forum.openmpt.org/index.php?topic=7200.0). - [Imp] <js> DTM: Identify files saved with Digital Tracker 2.3. - [Imp] <js> DBM: Import second sustain point in case the first sustain point is not set, or if it has a lower index than the first. -- [Fix] <js> DBM: When several instruments referenced the same sample with different properties (volume, loop points, etc.), only one set of properties was imported (fixes DBM.Supernova, http://www.un4seen.com/forum/?topic=15448.msg143091#msg143091). -- [Fix] <js> DBM: Prioritize effects more correctly when the same effect is encountered in both effect columns of a cell (fixes DBM.143_Gnoj, http://www.un4seen.com/forum/?topic=15448.msg143155#msg143155). -- [Fix] <js> DBM: Don't import offset effects when there's a tone portmento next to them (fixes DBM.123_Savo, http://www.un4seen.com/forum/?topic=15448.msg143155#msg143155). +- [Fix] <js> DBM: When several instruments referenced the same sample with different properties (volume, loop points, etc.), only one set of properties was imported (fixes DBM.Supernova, http://www.un4seen.com/forum/?msg=143091). +- [Fix] <js> DBM: Prioritize effects more correctly when the same effect is encountered in both effect columns of a cell (fixes DBM.143_Gnoj, http://www.un4seen.com/forum/?msg=143155). +- [Fix] <js> DBM: Don't import offset effects when there's a tone portmento next to them (fixes DBM.123_Savo, http://www.un4seen.com/forum/?msg=143155). - [Fix] <js> DBM: A few IT-specific playback quirks are disabled for more accurate playback (e.g. in "Are You Flying With Me?" by Jazzcat). - [Fix] <js> AMF: When running out of sample slots, file reading became be misaligned because the sample name was not skipped. - [Fix] <js> MED: Command 0F was not imported. Upper frequency limits should be more accurate now. -- [Fix] <js> MED: Channel panning is now only applied in MMD2 files if the free pan flag is set (http://www.un4seen.com/forum/?topic=15448.msg143276#msg143276). -- [Fix] <js> MED: Volume command resolution was incorrect for pre-MMD3 files (http://www.un4seen.com/forum/?topic=15448.msg143276#msg143276). +- [Fix] <js> MED: Channel panning is now only applied in MMD2 files if the free pan flag is set (http://www.un4seen.com/forum/?msg=143276). +- [Fix] <js> MED: Volume command resolution was incorrect for pre-MMD3 files (http://www.un4seen.com/forum/?msg=143276). Misc - [Fix] <js> Keyboard focus was not restored properly in the upper half of the editor views when switching from and back to OpenMPT (http://bugs.openmpt.org/view.php?id=1795). @@ -486,7 +501,7 @@ Other formats - [Imp] <js> MED: Additional command pages can now be read (http://bugs.openmpt.org/view.php?id=1783). -- [Imp] <js> MED: Echo DSP is now emulated (http://www.un4seen.com/forum/?topic=15448.msg143034#msg143034). +- [Imp] <js> MED: Echo DSP is now emulated (http://www.un4seen.com/forum/?msg=143034). - [Fix] <js> AMS: Default channel panning was broken, using all-center panning instead of MOD-style panning. - [Fix] <js> STP: Correctly import volume slides where both nibbles are set. - [Fix] <js> DSm: Only the first 48 samples were ever read. @@ -528,7 +543,7 @@ Other formats - [Imp] <js> STK: Loosen SoundTracker file rejection heuristics a bit to allow loading of files with overly long samples (romantic.stk) and malformed song titles (schmokk.mod, scramble_2.mod and others). Other heuristics has been tightened a bit. -- [Imp] <js> MED: Improve handling of default tempo, panning and channel volume in files containing more than one song (fixes sugar n spice.mmd3, http://www.un4seen.com/forum/?topic=15448.msg142659#msg142659). +- [Imp] <js> MED: Improve handling of default tempo, panning and channel volume in files containing more than one song (fixes sugar n spice.mmd3, http://www.un4seen.com/forum/?msg=142659). - [Mod] <js> MO3: Further reduce maximum allowed music data (not samples) size from 2 GiB to 512 MiB. - [Mod] <js> MDL: Slightly more accurate import of pattern command 9 (enabling envelopes instead of setting envelope position). - [Fix] <cs127> ULT: Support the highest three octaves. @@ -3701,7 +3716,7 @@ - [Imp] <js> Ctrl+Right-click can now also be used to delete an envelope point. - [Imp] <js> Nicer envelope drawing at higher zoom levels. Adjust default zoom level for High-DPI screens. - [Imp] <js> After grabbing a sustain or loop point with the mouse, it can now also be moved using the keyboard shortcuts for moving nodes. -- [Imp] <js> Show sample numbers in Sample Map editor (http://forum.openmpt.org/index.php?topic=1795.msg15678#msg15678). +- [Imp] <js> Show sample numbers in Sample Map editor (http://forum.openmpt.org/index.php?msg=15678). - [Imp] <js> When trying to load a module into an instrument slot, open it directly in the tree view for importing instruments. - [Imp] <js> Forward / backward mouse buttons can be used to switch to next / previous instrument. - [Fix] <js> Previewing several notes at once was broken for XM modules. @@ -4094,7 +4109,7 @@ - [Fix] <jh> Fixed random crash in ProTracker 1/2 mode when using on-the-fly sample swapping (http://bugs.openmpt.org/view.php?id=626). Other formats -- [Fix] <js> STM: Samples were not loaded correctly in some files, e.g. fracture in space" by Purple Motion (tx deus-ex, http://www.un4seen.com/forum/?topic=15448.msg113496#msg113496) +- [Fix] <js> STM: Samples were not loaded correctly in some files, e.g. fracture in space" by Purple Motion (tx deus-ex, http://www.un4seen.com/forum/?msg=113496) - [Fix] <js> STM: Volume slide nibbles are now prioritized correctly (fixes "fracture in space" by Purple Motion). Stream Export @@ -4275,7 +4290,7 @@ - [Fix] <js> Fixed possible crashes when using undo / redo, most notably when sample undo was disabled completely (http://bugs.openmpt.org/view.php?id=584). Instrument tab -- [Imp] <js> In the sample map editor, show faint red dots for notes that are already assigned to another sample (http://forum.openmpt.org/index.php?topic=4112.msg37495#msg37495). +- [Imp] <js> In the sample map editor, show faint red dots for notes that are already assigned to another sample (http://forum.openmpt.org/index.php?msg=37495). - [Fix] <js> Trying to play notes above B-9 caused a crash (http://bugs.openmpt.org/view.php?id=549). Tree view @@ -4576,7 +4591,7 @@ - [Fix] <jh> DMF: A bogus space was inserted in front of song messages. - [Fix] <js> DBM: Some fixes mostly related to volume slides and envelopes. - [Fix] <js> ITP: Song name was not being read. -- [Fix] <js> MT2: Fixed possible crash with some MT2 files (http://www.un4seen.com/forum/?topic=15448.msg107346#msg107346). +- [Fix] <js> MT2: Fixed possible crash with some MT2 files (http://www.un4seen.com/forum/?msg=107346). - [Fix] <js> MT2: Channel volume was not imported at all. - [Fix] <js> STM: Imported volume commands were slightly off when there was another command next to them. - [Fix] <js> UAX: Unnecessary empty sample slots were being created. Modified: trunk/OpenMPT/packageTemplate/Release Notes.html ============================================================================== --- trunk/OpenMPT/packageTemplate/Release Notes.html Fri May 30 14:09:34 2025 (r23231) +++ trunk/OpenMPT/packageTemplate/Release Notes.html Fri May 30 14:14:38 2025 (r23232) @@ -4,7 +4,7 @@ <meta charset="utf-8"> <meta name="language" content="en"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>OpenMPT 1.31 Release Notes</title> + <title>OpenMPT 1.32 Release Notes</title> <style type="text/css"> * { font-family: Calibri, Roboto, sans-serif; } body @@ -93,75 +93,96 @@ <h1> <img src="ReleaseNotesImages/modplug.png" width="64" height="64" alt="OpenMPT Logo"> - OpenMPT 1.31 - Release Notes + OpenMPT 1.32 - Release Notes </h1> <p> It's been a while since the last major feature update, and we have been working on a bunch of great new features for this new version. - This document should give a rough overview about the biggest changes in OpenMPT 1.31. + This document should give a rough overview about the biggest changes in OpenMPT 1.32. </p> <h2>What's new?</h2> <h3>General</h3> - <ul> - <li>Removing unused samples now works more reliably in instrument mode.</li> - <li>Instead of re-adding all non-conflicting default shortcuts every time a keymap is loaded, they will now only be added if the keymap was last saved with an older version of OpenMPT than the version that introduced the default shortcut.</li> - <li><strong>Channel panning</strong> is now exported in <strong>MIDI export</strong> as MIDI CC 10. If several notes play on the same MIDI channel, the last triggered note's panning is always considered.</li> - <li>When a text field is focussed, native text field shortcuts (such as Ctrl+A and others) are now preferred over OpenMPT shortcuts that are specific to the current view. Previously, they already took precedence over global OpenMPT shortcuts that apply to all views.</li> - <li>Builds for Windows XP and Vista can now receive automatic updates as well.</li> + <div class="screenshots"> + <a href="ReleaseNotesImages/1.32/quick_start.png"><img src="ReleaseNotesImages/1.32/quick_start.png" width="300" height="382" alt="Project Assistant" title="Project Assistant"></a><br> + <a href="ReleaseNotesImages/1.32/main_toolbar.png"><img src="ReleaseNotesImages/1.32/main_toolbar.png" width="300" height="32" alt="New, editable global volume readout in the main toolbar" title="New, editable global volume readout in the main toolbar"></a><br> + <a href="ReleaseNotesImages/1.32/metronome_settings.png"><img src="ReleaseNotesImages/1.32/metronome_settings.png" width="300" height="266" alt="Metronome Settings" title="Metronome Settings"></a> + </div> + <ul> + <li>There is now a quick start "<strong>project assistant</strong>" view that is shown whenever there is no module loaded.</li> + <li>OpenMPT is now fully DPI-aware by default, so it will look crisp and clean on all screen configurations. DPI-awareness can be changed in OpenMPT's Display settings to accomodate for older VST plugin editors that are not DPI-aware.</li> + <li><strong>Stream Export</strong> and <strong>MIDI Export</strong> have been updated to allow all sub songs of a module to be exported to separate files, the same way as it was already possible with VGM export.</li> + <li>When <strong>auto-save</strong> is set to save files to a specific folder, this folder is now cleaned regularly and auto-save files older than 30 days are removed by default. Auto-saves are now moved to the recycling bin instead of deleting them permanently by default.</li> + <li>The <strong>main toolbar</strong> is now more flexible, allowing you to hide individual readouts, adding a new <strong>global volume readout</strong>, and it wraps to multiple rows when it becomes wider than the main window. Readouts can now be edited using the keyboard during module playback.</li> + <li>The <strong>keyboard settings</strong> have been considerably revamped and cleaned up. Assigning keyboard shortcuts and keeping track of current key assignments and conflicts should be much easier now. Two new built-in default keyboard maps, matching the note entry of Fasttracker 2 and Impulse Tracker more closely, are now available.</li> </ul> <h3>Instrument Library</h3> <ul> - <li>The <strong>Instrument Library</strong> in the Tree View is now <strong>searchable</strong>: Locating files and folders in the instrument library is now as easy as hitting Ctrl+F to open text field and entering a search term. Wildcards (* to match any number of characters, ? to match any single character) are supported, too.</li> - <li>It is now also possible to change the <strong>sorting</strong> of the instrument library. From the context menu, you can choose to sort the library alphabetically, by file size or file modification date.</li> - <li>Selecting a file in the instrument library shows its file size and modification date in the status bar.</li> + <li>The tree view can now also be placed on the right side of the window (View → Toolbars).</li> + <li>The Instrument Library now shows size information for samples in modules as well.</li> </ul> <h3>Pattern Editor</h3> <ul> - <li>New <strong>shortcuts to scroll the pattern view</strong> without having to use the mouse.</li> - <li>In the <strong>Effect Visualizer</strong>, the currently edited plugin parameter for PC events can now be selected from a dropdown menu.</li> + <li>OpenMPT now has a <strong>metronome</strong> that can be enabled from the pattern toolbar or via a keyboard shortcut.</li> + <li>Merge functionality has been extended to support <strong>merging into multiple patterns</strong> with a user-specified length. This way, it becomes possible to automatically rearrange e.g. 64-row patterns into 128-row patterns in one go.</li> + <li>When <strong>increasing pattern size</strong>, there is now an option to <strong>duplicate the existing contents</strong> to the newly-added rows.</li> + <li>Instrument / volume / effect <strong>column visibility</strong> can now be toggled independently, and column visibility is now remembered per-module if "Remember song window positions" is enabled.</li> + <li>For <strong>live playback</strong>, it is now possible to <strong>queue the next pattern</strong> to not only play when the current pattern is finished, but also when the current measure, beat or row is finished.</li> + <li>To better distinguish whether record mode is enabled or not, it is now possible to set a <strong>separate background color</strong> for the active row when recording is enabled.</li> + <li>It is now possible to <strong>solo a group of channels</strong> at once. The solo shortcut applies to all channels in the current pattern selection.</li> </ul> - + <h3>Plugins</h3> <ul> - <li><strong>Tone portamento</strong> can now be applied to plugins the same way as it works for samples (assuming that the target note is within the plugin's pitch bend range), and as a result now works properly in MIDI export as well. In order to make use of this feature in existing module files made with previous OpenMPT versions, compatibility settings need to be upgraded in the Song Properties dialog.</li> - <li>Individual plugins can now be <strong>auto-suspended</strong> if they output silence for four seconds.</li> - <li>Arpeggio notes no longer reset the current pitch bend position.</li> + <li><strong>VST shell plugins</strong> are now supported. Most importantly, this allows OpenMPT to use polac's vst3shell plugin to enable the use of VST 3 plugins.</li> + <li>Improved correctness of <strong>PPQ position reporting</strong>. The reported PPQ is now also correct when the tempo changes, and when breaking to the next pattern, the position is rounded to the next start of measure. It is also sent to MIDI devices when using the MIDI Input / Output Plugin and the "Send timing messages" option is enabled.</li> + <li>Plugins can now be <strong>solo</strong>-ed by holding Shift when pressing the Bypass checkbox. Holding Ctrl instead, only Master plugins are affected.</li> + <li>All <strong>mix modes</strong> are now available for <strong>instrument plugins</strong> as well.</li> + <li>The <strong>MIDI Input / Output Plugin</strong> was enhanced with the ability to send initial MIDI dumps on playback start, plus a new extended MIDI macro system realized through plugin parameters. This allows to send MIDI macros of any length through the MIDI I/O plugin.</strong> + <li>The output device list of the MIDI Input / Output Plugin now contains a new <strong>virtual MIDI output device</strong> that allows MIDI messages to be forwarded to the configured output plugin, thus allowing the aforementioned extended MIDI macros system to work with other plugins beyond just MIDI output devices.</strong> </ul> <h3>Sample / Instrument Editor</h3> <ul> - <li>Is is now possible to follow the play cursor when the sample waveform is zoomed in and not fully visible, as long as only a single note is being previewed. This can be enabled through the settings dialog or a keyboard shortcut (Shift+F by default).</li> - <li>Double-clicking a timeline item now pops up an input dialog for finetuning that item.</li> - </ul> - - <h3>Playback</h3> - <p> - A couple of playback behaviours have been changed and improved: - </p> - <ul> - <li>Reduced <strong>aliasing</strong> when downsampling with the Sinc + Low-Pass resampler.</li> - <li>XM fine portamentos are now also sent to plugins and also work when exporting XM to MIDI.</li> - <li>The sample position is now rounded instead of truncated when resampling without interpolation.</li> - <li>Improved playback compatibility for IT, S3M, MOD, MED, MO3 and ULT files.</li> - </ul> - - <h3>File Format Support</h3> - <ul> - <li>Samples can now be saved as <strong>Amiga IFF</strong> (8SVX / 16SVX) files.</li> - <li>OpenMPT 1.31 adds support for the following module formats: <strong>Composer 667</strong> (667), <strong>Graoumf Tracker</strong> (GTK / GT2), <strong>Dynamic Studio</strong> (DSM) and music from the game <strong>Imperium Galactica</strong> (XMF).</li> - <li>A variant of the <strong>DSMI AMF</strong> format typically using the DMF file extension, found in some DOS games distributed by Webfoot, is now supported as well.</li> - <li>A hacked variant of the MOD format (also using the DMF file extension) found in the DOS game "Apocalypse Abyss" can now be read as well.</li> - <li>In IT files, mono samples are now stored with <strong>lossless IT sample compression</strong> by default, reducing the file size of IT files. As compressed stereo samples are still not supported properly by some software that is most likely not going to be updated anymore, compression for stereo samples remain disabled for now.</li> - <li>FLAC stream export now supports 32-bit resolution.</li> - <li>DLS / SF2: Added support for delay and hold envelope sections as well as pitch envelopes. Individual envelopes for each drum key are now supported.</li> + <li>Greatly improved <strong>pitch shifting and time stretching</strong> with new high-quality algorithms. Using the Signalsmith Stretch library for both operations, pitch and duration can now be changed at the same time in high quality, with an optional "Akai"-like lo-fi mode available.</li> + <li>When <strong>resampling samples in MOD</strong> files, there's now an option to automatically adjust pattern data accordingly.</li> + <li>To reduce confusion, the default / global volume tooltips now also show the <strong>effective amplification</strong> based on the sample / synth volume specified in the General tab.</li> + </ul> + + <h3>Comments</h3> + <ul> + <li>In addition to copying sample / instrument texts, they can now be pasted as well. Now you can easily replace your instrument names with a poem you have written in an external text editor!</li> + <li>Sample and instrument names and filenames are now drawn using the same font that is used for Comments text.</li> + </ul> + + <h3>Playback and File Format Support</h3> + <ul> + <li>In the MPTM format, every sequence now has its own <strong>default tempo and speed</strong>.</li> + <li>OpenMPT 1.32 adds support for eleven new module formats: + <strong>PumaTracker</strong> (PUMA), + <strong>Game Music Creator</strong> (GMC), + <strong>ChipTracker</strong> (MOD), + <strong>TCB Tracker</strong> (MOD), + <strong>Images Music System</strong> (IMS), + <strong>Face The Music</strong> (FTM), + <strong>RealTracker</strong> (RTM), + <strong>EasyTrax</strong> (ETX), + <strong>UNIC Tracker</strong> (UNIC), + <strong>Future Composer</strong> (FC / FC13 / FC14 / SMOD), + and <strong>Chuck Biscuits / Black Artist </strong> (CBA).</li> + <li>Support for synthesized and hybrid instruments in MED files was added, together with several other playback fixes for MED files.</li> + <li>Better support for <strong>automatic slide commands</strong> (commands that keep sliding on following rows) in various formats was added.</li> + <li>"Mupp" instruments in His Master's Noise modules are now supported, as well as command 7 "mega-arp".</li> + <li>Sub-songs in PSM files are now imported as independent sequences instead of being crammed together into the same order list.</li> + <li>Various playback compatibility fixes for DTM, MOD, XM, S3M and IT modules.</li> </ul> <h3>There's more...</h3> <p> + This summary just scratches the surface of what has changed since OpenMPT 1.31. For a detailed description of what has changed, check <a href="History.txt">History.txt</a>. If you are new to OpenMPT, be sure to read the manual as well. </p> Added: trunk/OpenMPT/packageTemplate/ReleaseNotesImages/1.32/main_toolbar.png ============================================================================== Binary file. No diff available. Added: trunk/OpenMPT/packageTemplate/ReleaseNotesImages/1.32/metronome_settings.png ============================================================================== Binary file. No diff available. Added: trunk/OpenMPT/packageTemplate/ReleaseNotesImages/1.32/quick_start.png ============================================================================== Binary file. No diff available. |
From: <sv...@op...> - 2025-05-30 12:09:42
|
Author: sagamusix Date: Fri May 30 14:09:34 2025 New Revision: 23231 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23231 Log: Merged revision(s) 23230 from trunk/OpenMPT: [Var] Update to unrar 7.1.6. ........ Modified: branches/OpenMPT-1.32/ (props changed) branches/OpenMPT-1.32/include/unrar/OpenMPT.txt branches/OpenMPT-1.32/include/unrar/archive.cpp branches/OpenMPT-1.32/include/unrar/archive.hpp branches/OpenMPT-1.32/include/unrar/arcread.cpp branches/OpenMPT-1.32/include/unrar/cmddata.cpp branches/OpenMPT-1.32/include/unrar/cmddata.hpp branches/OpenMPT-1.32/include/unrar/consio.cpp branches/OpenMPT-1.32/include/unrar/consio.hpp branches/OpenMPT-1.32/include/unrar/dll.cpp branches/OpenMPT-1.32/include/unrar/extract.cpp branches/OpenMPT-1.32/include/unrar/file.cpp branches/OpenMPT-1.32/include/unrar/filefn.cpp branches/OpenMPT-1.32/include/unrar/list.cpp branches/OpenMPT-1.32/include/unrar/motw.cpp branches/OpenMPT-1.32/include/unrar/rar.cpp branches/OpenMPT-1.32/include/unrar/scantree.cpp branches/OpenMPT-1.32/include/unrar/strfn.cpp branches/OpenMPT-1.32/include/unrar/strfn.hpp branches/OpenMPT-1.32/include/unrar/threadmisc.cpp branches/OpenMPT-1.32/include/unrar/threadpool.cpp branches/OpenMPT-1.32/include/unrar/ulinks.cpp branches/OpenMPT-1.32/include/unrar/unicode.cpp branches/OpenMPT-1.32/include/unrar/unpack.cpp branches/OpenMPT-1.32/include/unrar/unpack.hpp branches/OpenMPT-1.32/include/unrar/unpack20.cpp branches/OpenMPT-1.32/include/unrar/unpack50.cpp branches/OpenMPT-1.32/include/unrar/version.hpp Modified: branches/OpenMPT-1.32/include/unrar/OpenMPT.txt ============================================================================== --- branches/OpenMPT-1.32/include/unrar/OpenMPT.txt Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/OpenMPT.txt Fri May 30 14:09:34 2025 (r23231) @@ -1,4 +1,4 @@ -This folder is based on https://rarlab.com/rar/unrarsrc-7.1.2.tar.gz +This folder is based on https://rarlab.com/rar/unrarsrc-7.1.6.tar.gz All modifications to existing files have been done in a manner so that no existing lines were edited; only new lines were added. Modified: branches/OpenMPT-1.32/include/unrar/archive.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/archive.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/archive.cpp Fri May 30 14:09:34 2025 (r23231) @@ -26,10 +26,12 @@ FailedHeaderDecryption=false; BrokenHeader=false; LastReadBlock=0; + CurHeaderType=HEAD_UNKNOWN; CurBlockPos=0; NextBlockPos=0; + RecoveryPercent=-1; MainHead.Reset(); CryptHead={}; Modified: branches/OpenMPT-1.32/include/unrar/archive.hpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/archive.hpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/archive.hpp Fri May 30 14:09:34 2025 (r23231) @@ -47,6 +47,7 @@ bool DummyCmd; CommandData *Cmd; + int RecoveryPercent; RarTime LatestTime; int LastReadBlock; @@ -65,6 +66,7 @@ size_t SearchBlock(HEADER_TYPE HeaderType); size_t SearchSubBlock(const wchar *Type); size_t SearchRR(); + int GetRecoveryPercent() {return RecoveryPercent;} size_t ReadHeader(); void CheckArc(bool EnableBroken); void CheckOpen(const std::wstring &Name); Modified: branches/OpenMPT-1.32/include/unrar/arcread.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/arcread.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/arcread.cpp Fri May 30 14:09:34 2025 (r23231) @@ -106,7 +106,7 @@ if (CurBlockPos!=ArcSize || NextBlockPos!=ArcSize) { uiMsg(UIERROR_UNEXPEOF,FileName); - if (CurHeaderType!=HEAD_FILE) + if (CurHeaderType!=HEAD_FILE && CurHeaderType!=HEAD_UNKNOWN) uiMsg(UIERROR_TRUNCSERVICE,FileName,SubHead.FileName); ErrHandler.SetErrorCode(RARX_WARNING); @@ -904,6 +904,16 @@ if (!FileBlock && hd->CmpName(SUBHEAD_TYPE_CMT)) MainComment=true; + // For RAR5 format we read the user specified recovery percent here. + if (!FileBlock && hd->CmpName(SUBHEAD_TYPE_RR) && hd->SubData.size()>0) + { + // It is stored as a single byte up to RAR 6.02 and as vint since + // 6.10, where we extended the maximum RR size from 99% to 1000%. + RawRead RawPercent; + RawPercent.Read(hd->SubData.data(),hd->SubData.size()); + RecoveryPercent=(int)RawPercent.GetV(); + + } if (BadCRC) // Add the file name to broken header message displayed above. uiMsg(UIERROR_FHEADERBROKEN,Archive::FileName,hd->FileName); @@ -1308,7 +1318,7 @@ std::string FileName(NameSize,0); Raw.GetB((byte *)&FileName[0],NameSize); std::string NameA; - IntToExt(FileName,NameA); + OemToExt(FileName,NameA); CharToWide(NameA,FileHead.FileName); ConvertNameCase(FileHead.FileName); ConvertFileHeader(&FileHead); Modified: branches/OpenMPT-1.32/include/unrar/cmddata.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/cmddata.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/cmddata.cpp Fri May 30 14:09:34 2025 (r23231) @@ -1114,8 +1114,18 @@ OutHelp(RARX_USERERROR); #endif } + + // Since messages usually include '\n' in the beginning, we also issue + // the final '\n'. It is especially important in Unix, where otherwise + // the shell can display the prompt on the same line as the last message. + // mprintf is blocked with -idq and if error messages had been displayed + // in this mode, we use eprintf to separate them from shell prompt. + // If nothing was displayed with -idq, we avoid the excessive empty line. if (!BareOutput) - mprintf(L"\n"); + if (MsgStream==MSG_ERRONLY && IsConsoleOutputPresent()) + eprintf(L"\n"); + else + mprintf(L"\n"); } Modified: branches/OpenMPT-1.32/include/unrar/cmddata.hpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/cmddata.hpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/cmddata.hpp Fri May 30 14:09:34 2025 (r23231) @@ -8,7 +8,7 @@ #define CUSTOM_CMDLINE_PARSER #endif -#define DefaultStoreList L"7z;ace;arj;bz2;cab;gz;jpeg;jpg;lha;lz;lzh;mp3;rar;taz;tbz;tbz2;tgz;txz;xz;z;zip;zipx;zst;tzst" +#define DefaultStoreList L"7z;arj;bz2;cab;gz;jpeg;jpg;lha;lz;lzh;mp3;rar;taz;tbz;tbz2;tgz;txz;xz;z;zip;zipx;zst;tzst" enum RAR_CMD_LIST_MODE {RCLM_AUTO,RCLM_REJECT_LISTS,RCLM_ACCEPT_LISTS}; Modified: branches/OpenMPT-1.32/include/unrar/consio.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/consio.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/consio.cpp Fri May 30 14:09:34 2025 (r23231) @@ -4,6 +4,7 @@ static MESSAGE_TYPE MsgStream=MSG_STDOUT; static RAR_CHARSET RedirectCharset=RCH_DEFAULT; static bool ProhibitInput=false; +static bool ConsoleOutputPresent=false; static bool StdoutRedirected=false,StderrRedirected=false,StdinRedirected=false; @@ -69,6 +70,8 @@ #ifndef SILENT static void cvt_wprintf(FILE *dest,const wchar *fmt,va_list arglist) { + ConsoleOutputPresent=true; + // No need for PrintfPrepareFmt here, vwstrprintf calls it. std::wstring s=vwstrprintf(fmt,arglist); @@ -406,3 +409,8 @@ mprintf(L"\n"); } + +bool IsConsoleOutputPresent() +{ + return ConsoleOutputPresent; +} Modified: branches/OpenMPT-1.32/include/unrar/consio.hpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/consio.hpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/consio.hpp Fri May 30 14:09:34 2025 (r23231) @@ -6,6 +6,7 @@ void SetConsoleRedirectCharset(RAR_CHARSET RedirectCharset); void ProhibitConsoleInput(); void OutComment(const std::wstring &Comment); +bool IsConsoleOutputPresent(); #ifndef SILENT bool GetConsolePassword(UIPASSWORD_TYPE Type,const std::wstring &FileName,SecPassword *Password); Modified: branches/OpenMPT-1.32/include/unrar/dll.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/dll.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/dll.cpp Fri May 30 14:09:34 2025 (r23231) @@ -49,7 +49,7 @@ AnsiArcName=r->ArcName; #ifdef _WIN_ALL if (!AreFileApisANSI()) - IntToExt(r->ArcName,AnsiArcName); + OemToExt(r->ArcName,AnsiArcName); #endif } @@ -369,7 +369,7 @@ // We must not apply OemToCharBuffA directly to DestPath, // because we do not know DestPath length and OemToCharBuffA // does not stop at 0. - IntToExt(ExtrPathA,ExtrPathA); + OemToExt(ExtrPathA,ExtrPathA); #endif CharToWide(ExtrPathA,Data->Cmd.ExtrPath); AddEndSlash(Data->Cmd.ExtrPath); @@ -381,7 +381,7 @@ // We must not apply OemToCharBuffA directly to DestName, // because we do not know DestName length and OemToCharBuffA // does not stop at 0. - IntToExt(DestNameA,DestNameA); + OemToExt(DestNameA,DestNameA); #endif CharToWide(DestNameA,Data->Cmd.DllDestName); } Modified: branches/OpenMPT-1.32/include/unrar/extract.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/extract.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/extract.cpp Fri May 30 14:09:34 2025 (r23231) @@ -1617,8 +1617,10 @@ if (!Arc.FileHead.SplitBefore) { - if (!MatchFound && !Arc.FileHead.Solid) // Can start extraction from here. + if (!MatchFound && !Arc.FileHead.Solid && !Arc.FileHead.Dir && + Arc.FileHead.RedirType==FSREDIR_NONE && Arc.FileHead.Method!=0) { + // Can start extraction from here. // We would gain nothing and unnecessarily complicate extraction // if we set StartName for first volume or StartPos for first // archived file. Modified: branches/OpenMPT-1.32/include/unrar/file.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/file.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/file.cpp Fri May 30 14:09:34 2025 (r23231) @@ -819,10 +819,18 @@ #ifndef SFX_MODULE int64 File::Copy(File &Dest,int64 Length) { - std::vector<byte> Buffer(File::CopyBufferSize()); - int64 CopySize=0; bool CopyAll=(Length==INT64NDF); + // Adjust the buffer size to data size. So we do not waste too much time + // to vector initialization when copying many small data blocks like + // when updating an archive with many small files. + size_t BufSize=File::CopyBufferSize(); + if (!CopyAll && Length<(int64)BufSize) + BufSize=(size_t)Length; + + std::vector<byte> Buffer(BufSize); + int64 CopySize=0; + while (CopyAll || Length>0) { Wait(); Modified: branches/OpenMPT-1.32/include/unrar/filefn.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/filefn.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/filefn.cpp Fri May 30 14:09:34 2025 (r23231) @@ -576,6 +576,8 @@ + + // Delete symbolic links in file path, if any, and replace them by directories. // Prevents extracting files outside of destination folder with symlink chains. bool LinksToDirs(const std::wstring &SrcName,const std::wstring &SkipPart,std::wstring &LastChecked) Modified: branches/OpenMPT-1.32/include/unrar/list.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/list.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/list.cpp Fri May 30 14:09:34 2025 (r23231) @@ -110,10 +110,21 @@ } break; case HEAD_SERVICE: + // For service blocks dependent on previous block, such as ACL + // or NTFS stream, we use "file matched" flag of host file. + // Independent blocks like RR are matched separately, + // so we can list them by their name. Also we match even + // dependent blocks separately if "vta -idn" are set. User may + // want to see service blocks only in this case. + if (!Arc.SubHead.SubBlock || Cmd->DisableNames) + FileMatched=Cmd->IsProcessFile(Arc.SubHead,NULL,MATCH_WILDSUBPATH,0,NULL)!=0; if (FileMatched && !Bare) { + // Here we set DisableNames parameter to true regardless of + // Cmd->DisableNames. If "vta -idn" are set together, user + // wants to see service blocks like RR only. if (Technical && ShowService) - ListFileHeader(Arc,Arc.SubHead,TitleShown,Verbose,true,false,Cmd->DisableNames); + ListFileHeader(Arc,Arc.SubHead,TitleShown,Verbose,true,false,false); } break; } @@ -249,7 +260,7 @@ if (hd.SplitAfter) wcsncpyz(RatioStr,L"-->",ASIZE(RatioStr)); else - swprintf(RatioStr,ASIZE(RatioStr),L"%d%%",ToPercentUnlim(hd.PackSize,hd.UnpSize)); + swprintf(RatioStr,ASIZE(RatioStr),L"%u%%",ToPercentUnlim(hd.PackSize,hd.UnpSize)); wchar DateStr[50]; hd.mtime.GetText(DateStr,ASIZE(DateStr),Technical); @@ -315,6 +326,14 @@ mprintf(L"\n%12ls: %ls",St(MListSize),UnpSizeText); mprintf(L"\n%12ls: %ls",St(MListPacked),PackSizeText); mprintf(L"\n%12ls: %ls",St(MListRatio),RatioStr); + + if (!FileBlock && Arc.SubHead.CmpName(SUBHEAD_TYPE_RR)) + { + // Display the original -rrN percent if available. + int RecoveryPercent=Arc.GetRecoveryPercent(); + if (RecoveryPercent>0) // It can be -1 if failed to detect. + mprintf(L"\n%12ls: %u%%",L"RR%", RecoveryPercent); + } } bool WinTitles=false; #ifdef _WIN_ALL Modified: branches/OpenMPT-1.32/include/unrar/motw.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/motw.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/motw.cpp Fri May 30 14:09:34 2025 (r23231) @@ -82,14 +82,17 @@ const wchar *Ext=ExtPos==std::wstring::npos ? L"":&Name[ExtPos+1]; bool Matched=false; - wchar *CurMask; + const wchar *CurMask; MotwList.Rewind(); while ((CurMask=MotwList.GetString())!=nullptr) { // Perform the fast extension comparison for simple *.ext masks. - // When extracting 100000 files with "Exe and office" masks set, - // this loop spends 1.14s without this optimization and 0.24s with it. - bool FastCmp=CurMask[0]=='*' && CurMask[1]=='.' && !IsWildcard(CurMask+2); + // Also we added the fast path to wcsicomp for English only strings. + // When extracting 100000 files with "Exe and office" masks set + // this loop spent 85ms with this optimization and wcsicomp optimized + // for English strings, 415ms with this optimization only, 475ms with + // wcsicomp optimized only and 795ms without both optimizations. + bool FastCmp=CurMask[0]=='*' && CurMask[1]=='.' && wcspbrk(CurMask+2,L"*?")==NULL; if (FastCmp && wcsicomp(Ext,CurMask+2)==0 || !FastCmp && CmpName(CurMask,Name,MATCH_NAMES)) { Matched=true; Modified: branches/OpenMPT-1.32/include/unrar/rar.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/rar.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/rar.cpp Fri May 30 14:09:34 2025 (r23231) @@ -47,7 +47,10 @@ { case 'T': case 'V': - Cmd->Command[0]=UpperCmd; + // Also copy 't' and 'a' modifiers for -v[t,a], if present. + Cmd->Command.clear(); + for (char *c=Switch+1;*c!=0;c++) + Cmd->Command+=etoupper(*c); break; case '?': Cmd->OutHelp(RARX_SUCCESS); Modified: branches/OpenMPT-1.32/include/unrar/scantree.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/scantree.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/scantree.cpp Fri May 30 14:09:34 2025 (r23231) @@ -212,23 +212,36 @@ UnixSlashToDos(CurMask,CurMask); #endif + // We shall set it before appending the path separator to \\server\share + // UNC mask below, so "rar a -ep1 arc \\server\share" includes paths + // starting from "share\". + SpecPathLength=GetNamePos(CurMask); + // We prefer to scan entire disk if mask like \\server\share\ or c:\ - // is specified regardless of recursion mode. Use \\server\share\*.* - // or c:\*.* mask to scan only the root directory. - if (CurMask.size()>2 && CurMask[0]=='\\' && CurMask[1]=='\\') - { - auto Slash=CurMask.find('\\',2); - if (Slash!=std::wstring::npos) + // is specified even without -r, but not with -r-. Use \\server\share\*.*, + // c:\*.* mask or -r- to scan only the root directory. Note that UNC names + // are possible both in Win32 and Unix, just with proper path separators. + if (Recurse!=RECURSE_DISABLE) + if (CurMask.size()>2 && CurMask[0]==CPATHDIVIDER && CurMask[1]==CPATHDIVIDER) { - Slash=CurMask.find('\\',Slash+1); - // If backslash is found and it is the last string character. - ScanEntireDisk=Slash!=std::wstring::npos && Slash+1==CurMask.size(); - } - } - else - ScanEntireDisk=IsDriveLetter(CurMask) && IsPathDiv(CurMask[2]) && CurMask[3]==0; + auto Slash=CurMask.find(CPATHDIVIDER,2); + if (Slash!=std::wstring::npos) + { + Slash=CurMask.find(CPATHDIVIDER,Slash+1); + // If path separator is mssing or it is the last string character. + ScanEntireDisk=Slash==std::wstring::npos || + Slash!=std::wstring::npos && Slash+1==CurMask.size(); + // Win32 FindFirstFile fails for \\server\share names without + // the trailing backslash. So we add it here. + if (Slash==std::wstring::npos) + CurMask+=CPATHDIVIDER; + } + } + else + ScanEntireDisk=IsDriveLetter(CurMask) && IsPathDiv(CurMask[2]) && CurMask[3]==0; + // Calculate the name position again, because we could modify UNC path above. auto NamePos=GetNamePos(CurMask); std::wstring Name=CurMask.substr(NamePos); if (Name.empty()) @@ -238,7 +251,6 @@ AddEndSlash(CurMask); CurMask+=MASKALL; } - SpecPathLength=NamePos; Depth=0; OrigCurMask=CurMask; Modified: branches/OpenMPT-1.32/include/unrar/strfn.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/strfn.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/strfn.cpp Fri May 30 14:09:34 2025 (r23231) @@ -12,7 +12,8 @@ } -void IntToExt(const std::string &Src,std::string &Dest) +// Convert from OEM encoding. +void OemToExt(const std::string &Src,std::string &Dest) { #ifdef _WIN_ALL if (std::addressof(Src)!=std::addressof(Dest)) @@ -44,7 +45,7 @@ std::string NameA; if (Encoding==ACTW_OEM) { - IntToExt(Src,NameA); + OemToExt(Src,NameA); Src=NameA.data(); } CharToWide(Src,Dest); Modified: branches/OpenMPT-1.32/include/unrar/strfn.hpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/strfn.hpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/strfn.hpp Fri May 30 14:09:34 2025 (r23231) @@ -3,7 +3,7 @@ const char* NullToEmpty(const char *Str); const wchar* NullToEmpty(const wchar *Str); -void IntToExt(const std::string &Src,std::string &Dest); +void OemToExt(const std::string &Src,std::string &Dest); enum ACTW_ENCODING { ACTW_DEFAULT, ACTW_OEM, ACTW_UTF8}; void ArcCharToWide(const char *Src,std::wstring &Dest,ACTW_ENCODING Encoding); Modified: branches/OpenMPT-1.32/include/unrar/threadmisc.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/threadmisc.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/threadmisc.cpp Fri May 30 14:09:34 2025 (r23231) @@ -123,6 +123,42 @@ return sysctlbyname("hw.ncpu",&Count,&Size,NULL,0)==0 ? Count:1; #endif #else // !_UNIX + +#ifdef WIN32_CPU_GROUPS + // https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getprocessaffinitymask + // "Starting with Windows 11 and Windows Server 2022, on a system with + // more than 64 processors, process and thread affinities span all + // processors in the system, across all processor groups, by default." + // Supposing there are 80 CPUs in 2 processor groups 40 CPUs each. + // Looks like, beginning from Windows 11 an app can use them all by default, + // not resorting to processor groups API. But if we use GetProcessAffinityMask + // to count CPUs, we would be limited to 40 CPUs only. So we call + // GetActiveProcessorCount() if it is available anf if there are multiple + // processor groups. For a single group we prefer the affinity aware + // GetProcessAffinityMask(). Out thread pool code handles the case + // with restricted processor group affinity. So we avoid the complicated + // code to calculate all processor groups affinity here, such as using + // GetLogicalProcessorInformationEx, and resort to GetActiveProcessorCount(). + HMODULE hKernel=GetModuleHandle(L"kernel32.dll"); + if (hKernel!=nullptr) + { + typedef DWORD (WINAPI *GETACTIVEPROCESSORCOUNT)(WORD GroupNumber); + GETACTIVEPROCESSORCOUNT pGetActiveProcessorCount=(GETACTIVEPROCESSORCOUNT)GetProcAddress(hKernel,"GetActiveProcessorCount"); + typedef WORD (WINAPI *GETACTIVEPROCESSORGROUPCOUNT)(); + GETACTIVEPROCESSORGROUPCOUNT pGetActiveProcessorGroupCount=(GETACTIVEPROCESSORGROUPCOUNT)GetProcAddress(hKernel,"GetActiveProcessorGroupCount"); + if (pGetActiveProcessorCount!=nullptr && pGetActiveProcessorGroupCount!=nullptr && + pGetActiveProcessorGroupCount()>1) + { + // Once the thread pool called SetThreadGroupAffinity(), + // GetProcessAffinityMask() below will return 0. So we shall always + // use GetActiveProcessorCount() here if there are multiple processor + // groups, which makes SetThreadGroupAffinity() call possible. + DWORD Count=pGetActiveProcessorCount(ALL_PROCESSOR_GROUPS); + return Count; + } + } +#endif + DWORD_PTR ProcessMask; DWORD_PTR SystemMask; Modified: branches/OpenMPT-1.32/include/unrar/threadpool.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/threadpool.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/threadpool.cpp Fri May 30 14:09:34 2025 (r23231) @@ -1,5 +1,6 @@ #include "rar.hpp" + #ifdef RAR_SMP #include "threadmisc.cpp" @@ -92,11 +93,103 @@ void ThreadPool::CreateThreads() { - for(uint I=0;I<MaxAllowedThreads;I++) +#ifdef WIN32_CPU_GROUPS + // 2024.12.28: Implement processor group support for pre-Windows 11 systems + // with number of CPUs exceeding 64. For example, for 72 CPU the single + // processor group size would be 36 and this is what RAR would use without + // processor group support. + + uint GroupCount=0; + uint CurGroupNumber=(uint)-1; // We'll increment it to 0 later. + uint CurGroupSize=0,CumulativeGroupSize=0; + + typedef DWORD (WINAPI *GETACTIVEPROCESSORCOUNT)(WORD GroupNumber); + GETACTIVEPROCESSORCOUNT pGetActiveProcessorCount=nullptr; + typedef BOOL (WINAPI *GETTHREADGROUPAFFINITY)(HANDLE hThread,PGROUP_AFFINITY GroupAffinity); + GETTHREADGROUPAFFINITY pGetThreadGroupAffinity=nullptr; + typedef BOOL (WINAPI *SETTHREADGROUPAFFINITY)(HANDLE hThread,const GROUP_AFFINITY *GroupAffinity,PGROUP_AFFINITY PreviousGroupAffinity); + SETTHREADGROUPAFFINITY pSetThreadGroupAffinity=nullptr; + + // Doesn't seem to be needed in Windows 11 and newer. + // https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getprocessaffinitymask + // "Starting with Windows 11 and Windows Server 2022, on a system with + // more than 64 processors, process and thread affinities span all + // processors in the system, across all processor groups, by default." + if (!IsWindows11OrGreater()) + { + HMODULE hKernel=GetModuleHandle(L"kernel32.dll"); + if (hKernel!=nullptr) + { + typedef WORD (WINAPI *GETACTIVEPROCESSORGROUPCOUNT)(); + GETACTIVEPROCESSORGROUPCOUNT pGetActiveProcessorGroupCount=(GETACTIVEPROCESSORGROUPCOUNT)GetProcAddress(hKernel,"GetActiveProcessorGroupCount"); + + pGetActiveProcessorCount=(GETACTIVEPROCESSORCOUNT)GetProcAddress(hKernel,"GetActiveProcessorCount"); + pGetThreadGroupAffinity=(GETTHREADGROUPAFFINITY)GetProcAddress(hKernel,"GetThreadGroupAffinity"); + pSetThreadGroupAffinity=(SETTHREADGROUPAFFINITY)GetProcAddress(hKernel,"SetThreadGroupAffinity"); + + if (pGetActiveProcessorCount!=nullptr && pGetActiveProcessorGroupCount!=nullptr && + pGetThreadGroupAffinity!=nullptr && pSetThreadGroupAffinity!=nullptr) + GroupCount=pGetActiveProcessorGroupCount(); + } + } +#endif + + for (uint I=0;I<MaxAllowedThreads;I++) { - ThreadHandles[I] = ThreadCreate(PoolThread, this); + THREAD_HANDLE hThread=ThreadCreate(PoolThread, this); + ThreadHandles[I] = hThread; ThreadsCreatedCount++; #ifdef _WIN_ALL +#ifdef WIN32_CPU_GROUPS + if (GroupCount>1) // If we have multiple processor groups. + { + if (I>=CumulativeGroupSize) // Filled the processor group, go to next. + { + if (++CurGroupNumber>=GroupCount) + { + // If we exceeded the group number, such as when user specified + // -mt64 for lower core count, start assigning from beginning. + CurGroupNumber=0; + CumulativeGroupSize=0; + } + // Current group size. + CurGroupSize=pGetActiveProcessorCount(CurGroupNumber); + // Size of all preceding groups including the current. + CumulativeGroupSize+=CurGroupSize; + } + GROUP_AFFINITY GroupAffinity; + pGetThreadGroupAffinity(hThread,&GroupAffinity); + + // Since normally before Windows 11 all threads belong to same source + // group, we could set this value only once. But we set it every time + // in case we'll decide for some reason to use it to rearrange threads + // from different source groups in Windows 11+. + uint SrcGroupSize=pGetActiveProcessorCount(GroupAffinity.Group); + + // Shifting by 64 would be the undefined behavior, so we treat 64 separately. + KAFFINITY SrcGroupMask=(KAFFINITY)(SrcGroupSize==64 ? (uint64)0xffffffffffffffff:(uint64(1)<<SrcGroupSize)-1); + + // Here we check that process affinity for existing thread group + // matches the entire group size. If user limited the process + // affinity, we prefer to not extend the process to other groups, + // because user might want to restrict the resource usage. + // Also if source processor group is larger than required number + // of threads, we do not need to move threads between groups. + if (SrcGroupSize!=0 && GroupAffinity.Mask==SrcGroupMask && + GroupAffinity.Group!=CurGroupNumber && SrcGroupSize<MaxAllowedThreads) + { + // Shifting by 64 would be the undefined behavior, so we treat 64 separately. + KAFFINITY CurGroupMask=(KAFFINITY)(CurGroupSize==64 ? (uint64)0xffffffffffffffff:(uint64(1)<<CurGroupSize)-1); + GroupAffinity.Mask=CurGroupMask; // Use the entire group. + GroupAffinity.Group=CurGroupNumber; + + // Assign the thread to a new group. + pSetThreadGroupAffinity(hThread,&GroupAffinity,NULL); + } + } +#endif + + // Set the thread priority if needed. if (ThreadPool::ThreadPriority!=THREAD_PRIORITY_NORMAL) SetThreadPriority(ThreadHandles[I],ThreadPool::ThreadPriority); #endif Modified: branches/OpenMPT-1.32/include/unrar/ulinks.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/ulinks.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/ulinks.cpp Fri May 30 14:09:34 2025 (r23231) @@ -119,16 +119,20 @@ WideToChar(hd->RedirName,Target); if (hd->RedirType==FSREDIR_WINSYMLINK || hd->RedirType==FSREDIR_JUNCTION) { - // Cannot create Windows absolute path symlinks in Unix. Only relative path - // Windows symlinks can be created here. RAR 5.0 used \??\ prefix + // Windows absolute path symlinks in Unix. RAR 5.0 used \??\ prefix // for Windows absolute symlinks, since RAR 5.1 /??/ is used. // We escape ? as \? to avoid "trigraph" warning if (Target.rfind("\\??\\",0)!=std::string::npos || Target.rfind("/\?\?/",0)!=std::string::npos) { +#if 0 // 2024.12.26: Not used anymore. We unpack absolute Windows symlinks even in Unix. uiMsg(UIERROR_SLINKCREATE,nullptr,L"\"" + hd->FileName + L"\" -> \"" + hd->RedirName + L"\""); ErrHandler.SetErrorCode(RARX_WARNING); return false; +#endif + + // 2024.12.26: User asked to unpack absolute Windows symlinks even in Unix. + Target=Target.substr(4); // Remove \??\ prefix. } DosSlashToUnix(Target,Target); } Modified: branches/OpenMPT-1.32/include/unrar/unicode.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/unicode.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/unicode.cpp Fri May 30 14:09:34 2025 (r23231) @@ -656,6 +656,40 @@ int wcsicomp(const wchar *s1,const wchar *s2) { + // If strings are English or numeric, perform the fast comparison. + // It improves speed in cases like comparing against a lot of MOTW masks. + bool FastMode=true; + while (true) + { + // English uppercase, English lowercase and digit flags. + bool u1=*s1>='A' && *s1<='Z', l1=*s1>='a' && *s1<='z', d1=*s1>='0' && *s1<='9'; + bool u2=*s2>='A' && *s2<='Z', l2=*s2>='a' && *s2<='z', d2=*s2>='0' && *s2<='9'; + + // Fast comparison is impossible if both characters are not alphanumeric or 0. + if (!u1 && !l1 && !d1 && *s1!=0 && !u2 && !l2 && !d2 && *s2!=0) + { + FastMode=false; + break; + } + // Convert lowercase to uppercase, keep numeric and not alphanumeric as is. + wchar c1 = l1 ? *s1-'a'+'A' : *s1; + wchar c2 = l2 ? *s2-'a'+'A' : *s2; + + // If characters mistmatch, to return a proper value we must compare + // already converted, case insensitive characters instead of original ones. + // So we place a.txt before B.txt and can perform the correct case + // insensitive binary search in different string lists. + if (c1 != c2) + return c1 < c2 ? -1 : 1; + + if (*s1==0) + break; + s1++; + s2++; + } + if (FastMode) + return 0; + #ifdef _WIN_ALL return CompareStringW(LOCALE_USER_DEFAULT,NORM_IGNORECASE|SORT_STRINGSORT,s1,-1,s2,-1)-2; #else @@ -663,6 +697,11 @@ { wchar u1 = towupper(*s1); wchar u2 = towupper(*s2); + + // If characters mistmatch, to return a proper value we must compare + // already converted, case insensitive characters instead of original ones. + // So we place a.txt before B.txt and can perform the correct case + // insensitive binary search in different string lists. if (u1 != u2) return u1 < u2 ? -1 : 1; if (*s1==0) Modified: branches/OpenMPT-1.32/include/unrar/unpack.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/unpack.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/unpack.cpp Fri May 30 14:09:34 2025 (r23231) @@ -22,7 +22,6 @@ Window=NULL; Fragmented=false; Suspended=false; - UnpAllBuf=false; UnpSomeRead=false; ExtraDist=false; #ifdef RAR_SMP Modified: branches/OpenMPT-1.32/include/unrar/unpack.hpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/unpack.hpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/unpack.hpp Fri May 30 14:09:34 2025 (r23231) @@ -285,7 +285,6 @@ int64 DestUnpSize; bool Suspended; - bool UnpAllBuf; bool UnpSomeRead; int64 WrittenFileSize; bool FileExtracted; Modified: branches/OpenMPT-1.32/include/unrar/unpack20.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/unpack20.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/unpack20.cpp Fri May 30 14:09:34 2025 (r23231) @@ -159,7 +159,11 @@ { UnpIO->UnpWrite(&Window[WrPtr],-(int)WrPtr & MaxWinMask); UnpIO->UnpWrite(Window,UnpPtr); - UnpAllBuf=true; + + // 2024.12.24: Before 7.10 we set "UnpAllBuf=true" here. It was needed for + // Pack::PrepareSolidAppend(). Since both UnpAllBuf and FirstWinDone + // variables indicate the same thing and we set FirstWinDone in other place + // anyway, we replaced UnpAllBuf with FirstWinDone and removed this code. } else UnpIO->UnpWrite(&Window[WrPtr],UnpPtr-WrPtr); Modified: branches/OpenMPT-1.32/include/unrar/unpack50.cpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/unpack50.cpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/unpack50.cpp Fri May 30 14:09:34 2025 (r23231) @@ -511,8 +511,7 @@ { if (EndPtr!=StartPtr) UnpSomeRead=true; - if (EndPtr<StartPtr) - UnpAllBuf=true; + if (Fragmented) { Modified: branches/OpenMPT-1.32/include/unrar/version.hpp ============================================================================== --- branches/OpenMPT-1.32/include/unrar/version.hpp Fri May 30 14:09:11 2025 (r23230) +++ branches/OpenMPT-1.32/include/unrar/version.hpp Fri May 30 14:09:34 2025 (r23231) @@ -1,6 +1,6 @@ #define RARVER_MAJOR 7 -#define RARVER_MINOR 10 -#define RARVER_BETA 2 -#define RARVER_DAY 4 -#define RARVER_MONTH 12 -#define RARVER_YEAR 2024 +#define RARVER_MINOR 11 +#define RARVER_BETA 0 +#define RARVER_DAY 20 +#define RARVER_MONTH 3 +#define RARVER_YEAR 2025 |
From: <sv...@op...> - 2025-05-30 12:09:20
|
Author: sagamusix Date: Fri May 30 14:09:11 2025 New Revision: 23230 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23230 Log: [Var] Update to unrar 7.1.6. Modified: trunk/OpenMPT/include/unrar/OpenMPT.txt trunk/OpenMPT/include/unrar/archive.cpp trunk/OpenMPT/include/unrar/archive.hpp trunk/OpenMPT/include/unrar/arcread.cpp trunk/OpenMPT/include/unrar/cmddata.cpp trunk/OpenMPT/include/unrar/cmddata.hpp trunk/OpenMPT/include/unrar/consio.cpp trunk/OpenMPT/include/unrar/consio.hpp trunk/OpenMPT/include/unrar/dll.cpp trunk/OpenMPT/include/unrar/extract.cpp trunk/OpenMPT/include/unrar/file.cpp trunk/OpenMPT/include/unrar/filefn.cpp trunk/OpenMPT/include/unrar/list.cpp trunk/OpenMPT/include/unrar/motw.cpp trunk/OpenMPT/include/unrar/rar.cpp trunk/OpenMPT/include/unrar/scantree.cpp trunk/OpenMPT/include/unrar/strfn.cpp trunk/OpenMPT/include/unrar/strfn.hpp trunk/OpenMPT/include/unrar/threadmisc.cpp trunk/OpenMPT/include/unrar/threadpool.cpp trunk/OpenMPT/include/unrar/ulinks.cpp trunk/OpenMPT/include/unrar/unicode.cpp trunk/OpenMPT/include/unrar/unpack.cpp trunk/OpenMPT/include/unrar/unpack.hpp trunk/OpenMPT/include/unrar/unpack20.cpp trunk/OpenMPT/include/unrar/unpack50.cpp trunk/OpenMPT/include/unrar/version.hpp Modified: trunk/OpenMPT/include/unrar/OpenMPT.txt ============================================================================== --- trunk/OpenMPT/include/unrar/OpenMPT.txt Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/OpenMPT.txt Fri May 30 14:09:11 2025 (r23230) @@ -1,4 +1,4 @@ -This folder is based on https://rarlab.com/rar/unrarsrc-7.1.2.tar.gz +This folder is based on https://rarlab.com/rar/unrarsrc-7.1.6.tar.gz All modifications to existing files have been done in a manner so that no existing lines were edited; only new lines were added. Modified: trunk/OpenMPT/include/unrar/archive.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/archive.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/archive.cpp Fri May 30 14:09:11 2025 (r23230) @@ -26,10 +26,12 @@ FailedHeaderDecryption=false; BrokenHeader=false; LastReadBlock=0; + CurHeaderType=HEAD_UNKNOWN; CurBlockPos=0; NextBlockPos=0; + RecoveryPercent=-1; MainHead.Reset(); CryptHead={}; Modified: trunk/OpenMPT/include/unrar/archive.hpp ============================================================================== --- trunk/OpenMPT/include/unrar/archive.hpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/archive.hpp Fri May 30 14:09:11 2025 (r23230) @@ -47,6 +47,7 @@ bool DummyCmd; CommandData *Cmd; + int RecoveryPercent; RarTime LatestTime; int LastReadBlock; @@ -65,6 +66,7 @@ size_t SearchBlock(HEADER_TYPE HeaderType); size_t SearchSubBlock(const wchar *Type); size_t SearchRR(); + int GetRecoveryPercent() {return RecoveryPercent;} size_t ReadHeader(); void CheckArc(bool EnableBroken); void CheckOpen(const std::wstring &Name); Modified: trunk/OpenMPT/include/unrar/arcread.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/arcread.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/arcread.cpp Fri May 30 14:09:11 2025 (r23230) @@ -106,7 +106,7 @@ if (CurBlockPos!=ArcSize || NextBlockPos!=ArcSize) { uiMsg(UIERROR_UNEXPEOF,FileName); - if (CurHeaderType!=HEAD_FILE) + if (CurHeaderType!=HEAD_FILE && CurHeaderType!=HEAD_UNKNOWN) uiMsg(UIERROR_TRUNCSERVICE,FileName,SubHead.FileName); ErrHandler.SetErrorCode(RARX_WARNING); @@ -904,6 +904,16 @@ if (!FileBlock && hd->CmpName(SUBHEAD_TYPE_CMT)) MainComment=true; + // For RAR5 format we read the user specified recovery percent here. + if (!FileBlock && hd->CmpName(SUBHEAD_TYPE_RR) && hd->SubData.size()>0) + { + // It is stored as a single byte up to RAR 6.02 and as vint since + // 6.10, where we extended the maximum RR size from 99% to 1000%. + RawRead RawPercent; + RawPercent.Read(hd->SubData.data(),hd->SubData.size()); + RecoveryPercent=(int)RawPercent.GetV(); + + } if (BadCRC) // Add the file name to broken header message displayed above. uiMsg(UIERROR_FHEADERBROKEN,Archive::FileName,hd->FileName); @@ -1308,7 +1318,7 @@ std::string FileName(NameSize,0); Raw.GetB((byte *)&FileName[0],NameSize); std::string NameA; - IntToExt(FileName,NameA); + OemToExt(FileName,NameA); CharToWide(NameA,FileHead.FileName); ConvertNameCase(FileHead.FileName); ConvertFileHeader(&FileHead); Modified: trunk/OpenMPT/include/unrar/cmddata.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/cmddata.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/cmddata.cpp Fri May 30 14:09:11 2025 (r23230) @@ -1114,8 +1114,18 @@ OutHelp(RARX_USERERROR); #endif } + + // Since messages usually include '\n' in the beginning, we also issue + // the final '\n'. It is especially important in Unix, where otherwise + // the shell can display the prompt on the same line as the last message. + // mprintf is blocked with -idq and if error messages had been displayed + // in this mode, we use eprintf to separate them from shell prompt. + // If nothing was displayed with -idq, we avoid the excessive empty line. if (!BareOutput) - mprintf(L"\n"); + if (MsgStream==MSG_ERRONLY && IsConsoleOutputPresent()) + eprintf(L"\n"); + else + mprintf(L"\n"); } Modified: trunk/OpenMPT/include/unrar/cmddata.hpp ============================================================================== --- trunk/OpenMPT/include/unrar/cmddata.hpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/cmddata.hpp Fri May 30 14:09:11 2025 (r23230) @@ -8,7 +8,7 @@ #define CUSTOM_CMDLINE_PARSER #endif -#define DefaultStoreList L"7z;ace;arj;bz2;cab;gz;jpeg;jpg;lha;lz;lzh;mp3;rar;taz;tbz;tbz2;tgz;txz;xz;z;zip;zipx;zst;tzst" +#define DefaultStoreList L"7z;arj;bz2;cab;gz;jpeg;jpg;lha;lz;lzh;mp3;rar;taz;tbz;tbz2;tgz;txz;xz;z;zip;zipx;zst;tzst" enum RAR_CMD_LIST_MODE {RCLM_AUTO,RCLM_REJECT_LISTS,RCLM_ACCEPT_LISTS}; Modified: trunk/OpenMPT/include/unrar/consio.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/consio.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/consio.cpp Fri May 30 14:09:11 2025 (r23230) @@ -4,6 +4,7 @@ static MESSAGE_TYPE MsgStream=MSG_STDOUT; static RAR_CHARSET RedirectCharset=RCH_DEFAULT; static bool ProhibitInput=false; +static bool ConsoleOutputPresent=false; static bool StdoutRedirected=false,StderrRedirected=false,StdinRedirected=false; @@ -69,6 +70,8 @@ #ifndef SILENT static void cvt_wprintf(FILE *dest,const wchar *fmt,va_list arglist) { + ConsoleOutputPresent=true; + // No need for PrintfPrepareFmt here, vwstrprintf calls it. std::wstring s=vwstrprintf(fmt,arglist); @@ -406,3 +409,8 @@ mprintf(L"\n"); } + +bool IsConsoleOutputPresent() +{ + return ConsoleOutputPresent; +} Modified: trunk/OpenMPT/include/unrar/consio.hpp ============================================================================== --- trunk/OpenMPT/include/unrar/consio.hpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/consio.hpp Fri May 30 14:09:11 2025 (r23230) @@ -6,6 +6,7 @@ void SetConsoleRedirectCharset(RAR_CHARSET RedirectCharset); void ProhibitConsoleInput(); void OutComment(const std::wstring &Comment); +bool IsConsoleOutputPresent(); #ifndef SILENT bool GetConsolePassword(UIPASSWORD_TYPE Type,const std::wstring &FileName,SecPassword *Password); Modified: trunk/OpenMPT/include/unrar/dll.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/dll.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/dll.cpp Fri May 30 14:09:11 2025 (r23230) @@ -49,7 +49,7 @@ AnsiArcName=r->ArcName; #ifdef _WIN_ALL if (!AreFileApisANSI()) - IntToExt(r->ArcName,AnsiArcName); + OemToExt(r->ArcName,AnsiArcName); #endif } @@ -369,7 +369,7 @@ // We must not apply OemToCharBuffA directly to DestPath, // because we do not know DestPath length and OemToCharBuffA // does not stop at 0. - IntToExt(ExtrPathA,ExtrPathA); + OemToExt(ExtrPathA,ExtrPathA); #endif CharToWide(ExtrPathA,Data->Cmd.ExtrPath); AddEndSlash(Data->Cmd.ExtrPath); @@ -381,7 +381,7 @@ // We must not apply OemToCharBuffA directly to DestName, // because we do not know DestName length and OemToCharBuffA // does not stop at 0. - IntToExt(DestNameA,DestNameA); + OemToExt(DestNameA,DestNameA); #endif CharToWide(DestNameA,Data->Cmd.DllDestName); } Modified: trunk/OpenMPT/include/unrar/extract.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/extract.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/extract.cpp Fri May 30 14:09:11 2025 (r23230) @@ -1617,8 +1617,10 @@ if (!Arc.FileHead.SplitBefore) { - if (!MatchFound && !Arc.FileHead.Solid) // Can start extraction from here. + if (!MatchFound && !Arc.FileHead.Solid && !Arc.FileHead.Dir && + Arc.FileHead.RedirType==FSREDIR_NONE && Arc.FileHead.Method!=0) { + // Can start extraction from here. // We would gain nothing and unnecessarily complicate extraction // if we set StartName for first volume or StartPos for first // archived file. Modified: trunk/OpenMPT/include/unrar/file.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/file.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/file.cpp Fri May 30 14:09:11 2025 (r23230) @@ -819,10 +819,18 @@ #ifndef SFX_MODULE int64 File::Copy(File &Dest,int64 Length) { - std::vector<byte> Buffer(File::CopyBufferSize()); - int64 CopySize=0; bool CopyAll=(Length==INT64NDF); + // Adjust the buffer size to data size. So we do not waste too much time + // to vector initialization when copying many small data blocks like + // when updating an archive with many small files. + size_t BufSize=File::CopyBufferSize(); + if (!CopyAll && Length<(int64)BufSize) + BufSize=(size_t)Length; + + std::vector<byte> Buffer(BufSize); + int64 CopySize=0; + while (CopyAll || Length>0) { Wait(); Modified: trunk/OpenMPT/include/unrar/filefn.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/filefn.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/filefn.cpp Fri May 30 14:09:11 2025 (r23230) @@ -576,6 +576,8 @@ + + // Delete symbolic links in file path, if any, and replace them by directories. // Prevents extracting files outside of destination folder with symlink chains. bool LinksToDirs(const std::wstring &SrcName,const std::wstring &SkipPart,std::wstring &LastChecked) Modified: trunk/OpenMPT/include/unrar/list.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/list.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/list.cpp Fri May 30 14:09:11 2025 (r23230) @@ -110,10 +110,21 @@ } break; case HEAD_SERVICE: + // For service blocks dependent on previous block, such as ACL + // or NTFS stream, we use "file matched" flag of host file. + // Independent blocks like RR are matched separately, + // so we can list them by their name. Also we match even + // dependent blocks separately if "vta -idn" are set. User may + // want to see service blocks only in this case. + if (!Arc.SubHead.SubBlock || Cmd->DisableNames) + FileMatched=Cmd->IsProcessFile(Arc.SubHead,NULL,MATCH_WILDSUBPATH,0,NULL)!=0; if (FileMatched && !Bare) { + // Here we set DisableNames parameter to true regardless of + // Cmd->DisableNames. If "vta -idn" are set together, user + // wants to see service blocks like RR only. if (Technical && ShowService) - ListFileHeader(Arc,Arc.SubHead,TitleShown,Verbose,true,false,Cmd->DisableNames); + ListFileHeader(Arc,Arc.SubHead,TitleShown,Verbose,true,false,false); } break; } @@ -249,7 +260,7 @@ if (hd.SplitAfter) wcsncpyz(RatioStr,L"-->",ASIZE(RatioStr)); else - swprintf(RatioStr,ASIZE(RatioStr),L"%d%%",ToPercentUnlim(hd.PackSize,hd.UnpSize)); + swprintf(RatioStr,ASIZE(RatioStr),L"%u%%",ToPercentUnlim(hd.PackSize,hd.UnpSize)); wchar DateStr[50]; hd.mtime.GetText(DateStr,ASIZE(DateStr),Technical); @@ -315,6 +326,14 @@ mprintf(L"\n%12ls: %ls",St(MListSize),UnpSizeText); mprintf(L"\n%12ls: %ls",St(MListPacked),PackSizeText); mprintf(L"\n%12ls: %ls",St(MListRatio),RatioStr); + + if (!FileBlock && Arc.SubHead.CmpName(SUBHEAD_TYPE_RR)) + { + // Display the original -rrN percent if available. + int RecoveryPercent=Arc.GetRecoveryPercent(); + if (RecoveryPercent>0) // It can be -1 if failed to detect. + mprintf(L"\n%12ls: %u%%",L"RR%", RecoveryPercent); + } } bool WinTitles=false; #ifdef _WIN_ALL Modified: trunk/OpenMPT/include/unrar/motw.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/motw.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/motw.cpp Fri May 30 14:09:11 2025 (r23230) @@ -82,14 +82,17 @@ const wchar *Ext=ExtPos==std::wstring::npos ? L"":&Name[ExtPos+1]; bool Matched=false; - wchar *CurMask; + const wchar *CurMask; MotwList.Rewind(); while ((CurMask=MotwList.GetString())!=nullptr) { // Perform the fast extension comparison for simple *.ext masks. - // When extracting 100000 files with "Exe and office" masks set, - // this loop spends 1.14s without this optimization and 0.24s with it. - bool FastCmp=CurMask[0]=='*' && CurMask[1]=='.' && !IsWildcard(CurMask+2); + // Also we added the fast path to wcsicomp for English only strings. + // When extracting 100000 files with "Exe and office" masks set + // this loop spent 85ms with this optimization and wcsicomp optimized + // for English strings, 415ms with this optimization only, 475ms with + // wcsicomp optimized only and 795ms without both optimizations. + bool FastCmp=CurMask[0]=='*' && CurMask[1]=='.' && wcspbrk(CurMask+2,L"*?")==NULL; if (FastCmp && wcsicomp(Ext,CurMask+2)==0 || !FastCmp && CmpName(CurMask,Name,MATCH_NAMES)) { Matched=true; Modified: trunk/OpenMPT/include/unrar/rar.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/rar.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/rar.cpp Fri May 30 14:09:11 2025 (r23230) @@ -47,7 +47,10 @@ { case 'T': case 'V': - Cmd->Command[0]=UpperCmd; + // Also copy 't' and 'a' modifiers for -v[t,a], if present. + Cmd->Command.clear(); + for (char *c=Switch+1;*c!=0;c++) + Cmd->Command+=etoupper(*c); break; case '?': Cmd->OutHelp(RARX_SUCCESS); Modified: trunk/OpenMPT/include/unrar/scantree.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/scantree.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/scantree.cpp Fri May 30 14:09:11 2025 (r23230) @@ -212,23 +212,36 @@ UnixSlashToDos(CurMask,CurMask); #endif + // We shall set it before appending the path separator to \\server\share + // UNC mask below, so "rar a -ep1 arc \\server\share" includes paths + // starting from "share\". + SpecPathLength=GetNamePos(CurMask); + // We prefer to scan entire disk if mask like \\server\share\ or c:\ - // is specified regardless of recursion mode. Use \\server\share\*.* - // or c:\*.* mask to scan only the root directory. - if (CurMask.size()>2 && CurMask[0]=='\\' && CurMask[1]=='\\') - { - auto Slash=CurMask.find('\\',2); - if (Slash!=std::wstring::npos) + // is specified even without -r, but not with -r-. Use \\server\share\*.*, + // c:\*.* mask or -r- to scan only the root directory. Note that UNC names + // are possible both in Win32 and Unix, just with proper path separators. + if (Recurse!=RECURSE_DISABLE) + if (CurMask.size()>2 && CurMask[0]==CPATHDIVIDER && CurMask[1]==CPATHDIVIDER) { - Slash=CurMask.find('\\',Slash+1); - // If backslash is found and it is the last string character. - ScanEntireDisk=Slash!=std::wstring::npos && Slash+1==CurMask.size(); - } - } - else - ScanEntireDisk=IsDriveLetter(CurMask) && IsPathDiv(CurMask[2]) && CurMask[3]==0; + auto Slash=CurMask.find(CPATHDIVIDER,2); + if (Slash!=std::wstring::npos) + { + Slash=CurMask.find(CPATHDIVIDER,Slash+1); + // If path separator is mssing or it is the last string character. + ScanEntireDisk=Slash==std::wstring::npos || + Slash!=std::wstring::npos && Slash+1==CurMask.size(); + // Win32 FindFirstFile fails for \\server\share names without + // the trailing backslash. So we add it here. + if (Slash==std::wstring::npos) + CurMask+=CPATHDIVIDER; + } + } + else + ScanEntireDisk=IsDriveLetter(CurMask) && IsPathDiv(CurMask[2]) && CurMask[3]==0; + // Calculate the name position again, because we could modify UNC path above. auto NamePos=GetNamePos(CurMask); std::wstring Name=CurMask.substr(NamePos); if (Name.empty()) @@ -238,7 +251,6 @@ AddEndSlash(CurMask); CurMask+=MASKALL; } - SpecPathLength=NamePos; Depth=0; OrigCurMask=CurMask; Modified: trunk/OpenMPT/include/unrar/strfn.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/strfn.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/strfn.cpp Fri May 30 14:09:11 2025 (r23230) @@ -12,7 +12,8 @@ } -void IntToExt(const std::string &Src,std::string &Dest) +// Convert from OEM encoding. +void OemToExt(const std::string &Src,std::string &Dest) { #ifdef _WIN_ALL if (std::addressof(Src)!=std::addressof(Dest)) @@ -44,7 +45,7 @@ std::string NameA; if (Encoding==ACTW_OEM) { - IntToExt(Src,NameA); + OemToExt(Src,NameA); Src=NameA.data(); } CharToWide(Src,Dest); Modified: trunk/OpenMPT/include/unrar/strfn.hpp ============================================================================== --- trunk/OpenMPT/include/unrar/strfn.hpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/strfn.hpp Fri May 30 14:09:11 2025 (r23230) @@ -3,7 +3,7 @@ const char* NullToEmpty(const char *Str); const wchar* NullToEmpty(const wchar *Str); -void IntToExt(const std::string &Src,std::string &Dest); +void OemToExt(const std::string &Src,std::string &Dest); enum ACTW_ENCODING { ACTW_DEFAULT, ACTW_OEM, ACTW_UTF8}; void ArcCharToWide(const char *Src,std::wstring &Dest,ACTW_ENCODING Encoding); Modified: trunk/OpenMPT/include/unrar/threadmisc.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/threadmisc.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/threadmisc.cpp Fri May 30 14:09:11 2025 (r23230) @@ -123,6 +123,42 @@ return sysctlbyname("hw.ncpu",&Count,&Size,NULL,0)==0 ? Count:1; #endif #else // !_UNIX + +#ifdef WIN32_CPU_GROUPS + // https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getprocessaffinitymask + // "Starting with Windows 11 and Windows Server 2022, on a system with + // more than 64 processors, process and thread affinities span all + // processors in the system, across all processor groups, by default." + // Supposing there are 80 CPUs in 2 processor groups 40 CPUs each. + // Looks like, beginning from Windows 11 an app can use them all by default, + // not resorting to processor groups API. But if we use GetProcessAffinityMask + // to count CPUs, we would be limited to 40 CPUs only. So we call + // GetActiveProcessorCount() if it is available anf if there are multiple + // processor groups. For a single group we prefer the affinity aware + // GetProcessAffinityMask(). Out thread pool code handles the case + // with restricted processor group affinity. So we avoid the complicated + // code to calculate all processor groups affinity here, such as using + // GetLogicalProcessorInformationEx, and resort to GetActiveProcessorCount(). + HMODULE hKernel=GetModuleHandle(L"kernel32.dll"); + if (hKernel!=nullptr) + { + typedef DWORD (WINAPI *GETACTIVEPROCESSORCOUNT)(WORD GroupNumber); + GETACTIVEPROCESSORCOUNT pGetActiveProcessorCount=(GETACTIVEPROCESSORCOUNT)GetProcAddress(hKernel,"GetActiveProcessorCount"); + typedef WORD (WINAPI *GETACTIVEPROCESSORGROUPCOUNT)(); + GETACTIVEPROCESSORGROUPCOUNT pGetActiveProcessorGroupCount=(GETACTIVEPROCESSORGROUPCOUNT)GetProcAddress(hKernel,"GetActiveProcessorGroupCount"); + if (pGetActiveProcessorCount!=nullptr && pGetActiveProcessorGroupCount!=nullptr && + pGetActiveProcessorGroupCount()>1) + { + // Once the thread pool called SetThreadGroupAffinity(), + // GetProcessAffinityMask() below will return 0. So we shall always + // use GetActiveProcessorCount() here if there are multiple processor + // groups, which makes SetThreadGroupAffinity() call possible. + DWORD Count=pGetActiveProcessorCount(ALL_PROCESSOR_GROUPS); + return Count; + } + } +#endif + DWORD_PTR ProcessMask; DWORD_PTR SystemMask; Modified: trunk/OpenMPT/include/unrar/threadpool.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/threadpool.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/threadpool.cpp Fri May 30 14:09:11 2025 (r23230) @@ -1,5 +1,6 @@ #include "rar.hpp" + #ifdef RAR_SMP #include "threadmisc.cpp" @@ -92,11 +93,103 @@ void ThreadPool::CreateThreads() { - for(uint I=0;I<MaxAllowedThreads;I++) +#ifdef WIN32_CPU_GROUPS + // 2024.12.28: Implement processor group support for pre-Windows 11 systems + // with number of CPUs exceeding 64. For example, for 72 CPU the single + // processor group size would be 36 and this is what RAR would use without + // processor group support. + + uint GroupCount=0; + uint CurGroupNumber=(uint)-1; // We'll increment it to 0 later. + uint CurGroupSize=0,CumulativeGroupSize=0; + + typedef DWORD (WINAPI *GETACTIVEPROCESSORCOUNT)(WORD GroupNumber); + GETACTIVEPROCESSORCOUNT pGetActiveProcessorCount=nullptr; + typedef BOOL (WINAPI *GETTHREADGROUPAFFINITY)(HANDLE hThread,PGROUP_AFFINITY GroupAffinity); + GETTHREADGROUPAFFINITY pGetThreadGroupAffinity=nullptr; + typedef BOOL (WINAPI *SETTHREADGROUPAFFINITY)(HANDLE hThread,const GROUP_AFFINITY *GroupAffinity,PGROUP_AFFINITY PreviousGroupAffinity); + SETTHREADGROUPAFFINITY pSetThreadGroupAffinity=nullptr; + + // Doesn't seem to be needed in Windows 11 and newer. + // https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getprocessaffinitymask + // "Starting with Windows 11 and Windows Server 2022, on a system with + // more than 64 processors, process and thread affinities span all + // processors in the system, across all processor groups, by default." + if (!IsWindows11OrGreater()) + { + HMODULE hKernel=GetModuleHandle(L"kernel32.dll"); + if (hKernel!=nullptr) + { + typedef WORD (WINAPI *GETACTIVEPROCESSORGROUPCOUNT)(); + GETACTIVEPROCESSORGROUPCOUNT pGetActiveProcessorGroupCount=(GETACTIVEPROCESSORGROUPCOUNT)GetProcAddress(hKernel,"GetActiveProcessorGroupCount"); + + pGetActiveProcessorCount=(GETACTIVEPROCESSORCOUNT)GetProcAddress(hKernel,"GetActiveProcessorCount"); + pGetThreadGroupAffinity=(GETTHREADGROUPAFFINITY)GetProcAddress(hKernel,"GetThreadGroupAffinity"); + pSetThreadGroupAffinity=(SETTHREADGROUPAFFINITY)GetProcAddress(hKernel,"SetThreadGroupAffinity"); + + if (pGetActiveProcessorCount!=nullptr && pGetActiveProcessorGroupCount!=nullptr && + pGetThreadGroupAffinity!=nullptr && pSetThreadGroupAffinity!=nullptr) + GroupCount=pGetActiveProcessorGroupCount(); + } + } +#endif + + for (uint I=0;I<MaxAllowedThreads;I++) { - ThreadHandles[I] = ThreadCreate(PoolThread, this); + THREAD_HANDLE hThread=ThreadCreate(PoolThread, this); + ThreadHandles[I] = hThread; ThreadsCreatedCount++; #ifdef _WIN_ALL +#ifdef WIN32_CPU_GROUPS + if (GroupCount>1) // If we have multiple processor groups. + { + if (I>=CumulativeGroupSize) // Filled the processor group, go to next. + { + if (++CurGroupNumber>=GroupCount) + { + // If we exceeded the group number, such as when user specified + // -mt64 for lower core count, start assigning from beginning. + CurGroupNumber=0; + CumulativeGroupSize=0; + } + // Current group size. + CurGroupSize=pGetActiveProcessorCount(CurGroupNumber); + // Size of all preceding groups including the current. + CumulativeGroupSize+=CurGroupSize; + } + GROUP_AFFINITY GroupAffinity; + pGetThreadGroupAffinity(hThread,&GroupAffinity); + + // Since normally before Windows 11 all threads belong to same source + // group, we could set this value only once. But we set it every time + // in case we'll decide for some reason to use it to rearrange threads + // from different source groups in Windows 11+. + uint SrcGroupSize=pGetActiveProcessorCount(GroupAffinity.Group); + + // Shifting by 64 would be the undefined behavior, so we treat 64 separately. + KAFFINITY SrcGroupMask=(KAFFINITY)(SrcGroupSize==64 ? (uint64)0xffffffffffffffff:(uint64(1)<<SrcGroupSize)-1); + + // Here we check that process affinity for existing thread group + // matches the entire group size. If user limited the process + // affinity, we prefer to not extend the process to other groups, + // because user might want to restrict the resource usage. + // Also if source processor group is larger than required number + // of threads, we do not need to move threads between groups. + if (SrcGroupSize!=0 && GroupAffinity.Mask==SrcGroupMask && + GroupAffinity.Group!=CurGroupNumber && SrcGroupSize<MaxAllowedThreads) + { + // Shifting by 64 would be the undefined behavior, so we treat 64 separately. + KAFFINITY CurGroupMask=(KAFFINITY)(CurGroupSize==64 ? (uint64)0xffffffffffffffff:(uint64(1)<<CurGroupSize)-1); + GroupAffinity.Mask=CurGroupMask; // Use the entire group. + GroupAffinity.Group=CurGroupNumber; + + // Assign the thread to a new group. + pSetThreadGroupAffinity(hThread,&GroupAffinity,NULL); + } + } +#endif + + // Set the thread priority if needed. if (ThreadPool::ThreadPriority!=THREAD_PRIORITY_NORMAL) SetThreadPriority(ThreadHandles[I],ThreadPool::ThreadPriority); #endif Modified: trunk/OpenMPT/include/unrar/ulinks.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/ulinks.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/ulinks.cpp Fri May 30 14:09:11 2025 (r23230) @@ -119,16 +119,20 @@ WideToChar(hd->RedirName,Target); if (hd->RedirType==FSREDIR_WINSYMLINK || hd->RedirType==FSREDIR_JUNCTION) { - // Cannot create Windows absolute path symlinks in Unix. Only relative path - // Windows symlinks can be created here. RAR 5.0 used \??\ prefix + // Windows absolute path symlinks in Unix. RAR 5.0 used \??\ prefix // for Windows absolute symlinks, since RAR 5.1 /??/ is used. // We escape ? as \? to avoid "trigraph" warning if (Target.rfind("\\??\\",0)!=std::string::npos || Target.rfind("/\?\?/",0)!=std::string::npos) { +#if 0 // 2024.12.26: Not used anymore. We unpack absolute Windows symlinks even in Unix. uiMsg(UIERROR_SLINKCREATE,nullptr,L"\"" + hd->FileName + L"\" -> \"" + hd->RedirName + L"\""); ErrHandler.SetErrorCode(RARX_WARNING); return false; +#endif + + // 2024.12.26: User asked to unpack absolute Windows symlinks even in Unix. + Target=Target.substr(4); // Remove \??\ prefix. } DosSlashToUnix(Target,Target); } Modified: trunk/OpenMPT/include/unrar/unicode.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/unicode.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/unicode.cpp Fri May 30 14:09:11 2025 (r23230) @@ -656,6 +656,40 @@ int wcsicomp(const wchar *s1,const wchar *s2) { + // If strings are English or numeric, perform the fast comparison. + // It improves speed in cases like comparing against a lot of MOTW masks. + bool FastMode=true; + while (true) + { + // English uppercase, English lowercase and digit flags. + bool u1=*s1>='A' && *s1<='Z', l1=*s1>='a' && *s1<='z', d1=*s1>='0' && *s1<='9'; + bool u2=*s2>='A' && *s2<='Z', l2=*s2>='a' && *s2<='z', d2=*s2>='0' && *s2<='9'; + + // Fast comparison is impossible if both characters are not alphanumeric or 0. + if (!u1 && !l1 && !d1 && *s1!=0 && !u2 && !l2 && !d2 && *s2!=0) + { + FastMode=false; + break; + } + // Convert lowercase to uppercase, keep numeric and not alphanumeric as is. + wchar c1 = l1 ? *s1-'a'+'A' : *s1; + wchar c2 = l2 ? *s2-'a'+'A' : *s2; + + // If characters mistmatch, to return a proper value we must compare + // already converted, case insensitive characters instead of original ones. + // So we place a.txt before B.txt and can perform the correct case + // insensitive binary search in different string lists. + if (c1 != c2) + return c1 < c2 ? -1 : 1; + + if (*s1==0) + break; + s1++; + s2++; + } + if (FastMode) + return 0; + #ifdef _WIN_ALL return CompareStringW(LOCALE_USER_DEFAULT,NORM_IGNORECASE|SORT_STRINGSORT,s1,-1,s2,-1)-2; #else @@ -663,6 +697,11 @@ { wchar u1 = towupper(*s1); wchar u2 = towupper(*s2); + + // If characters mistmatch, to return a proper value we must compare + // already converted, case insensitive characters instead of original ones. + // So we place a.txt before B.txt and can perform the correct case + // insensitive binary search in different string lists. if (u1 != u2) return u1 < u2 ? -1 : 1; if (*s1==0) Modified: trunk/OpenMPT/include/unrar/unpack.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/unpack.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/unpack.cpp Fri May 30 14:09:11 2025 (r23230) @@ -22,7 +22,6 @@ Window=NULL; Fragmented=false; Suspended=false; - UnpAllBuf=false; UnpSomeRead=false; ExtraDist=false; #ifdef RAR_SMP Modified: trunk/OpenMPT/include/unrar/unpack.hpp ============================================================================== --- trunk/OpenMPT/include/unrar/unpack.hpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/unpack.hpp Fri May 30 14:09:11 2025 (r23230) @@ -285,7 +285,6 @@ int64 DestUnpSize; bool Suspended; - bool UnpAllBuf; bool UnpSomeRead; int64 WrittenFileSize; bool FileExtracted; Modified: trunk/OpenMPT/include/unrar/unpack20.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/unpack20.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/unpack20.cpp Fri May 30 14:09:11 2025 (r23230) @@ -159,7 +159,11 @@ { UnpIO->UnpWrite(&Window[WrPtr],-(int)WrPtr & MaxWinMask); UnpIO->UnpWrite(Window,UnpPtr); - UnpAllBuf=true; + + // 2024.12.24: Before 7.10 we set "UnpAllBuf=true" here. It was needed for + // Pack::PrepareSolidAppend(). Since both UnpAllBuf and FirstWinDone + // variables indicate the same thing and we set FirstWinDone in other place + // anyway, we replaced UnpAllBuf with FirstWinDone and removed this code. } else UnpIO->UnpWrite(&Window[WrPtr],UnpPtr-WrPtr); Modified: trunk/OpenMPT/include/unrar/unpack50.cpp ============================================================================== --- trunk/OpenMPT/include/unrar/unpack50.cpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/unpack50.cpp Fri May 30 14:09:11 2025 (r23230) @@ -511,8 +511,7 @@ { if (EndPtr!=StartPtr) UnpSomeRead=true; - if (EndPtr<StartPtr) - UnpAllBuf=true; + if (Fragmented) { Modified: trunk/OpenMPT/include/unrar/version.hpp ============================================================================== --- trunk/OpenMPT/include/unrar/version.hpp Fri May 30 13:56:57 2025 (r23229) +++ trunk/OpenMPT/include/unrar/version.hpp Fri May 30 14:09:11 2025 (r23230) @@ -1,6 +1,6 @@ #define RARVER_MAJOR 7 -#define RARVER_MINOR 10 -#define RARVER_BETA 2 -#define RARVER_DAY 4 -#define RARVER_MONTH 12 -#define RARVER_YEAR 2024 +#define RARVER_MINOR 11 +#define RARVER_BETA 0 +#define RARVER_DAY 20 +#define RARVER_MONTH 3 +#define RARVER_YEAR 2025 |