Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package mt32emu for openSUSE:Factory checked in at 2026-05-23 23:26:45 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/mt32emu (Old) and /work/SRC/openSUSE:Factory/.mt32emu.new.2084 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mt32emu" Sat May 23 23:26:45 2026 rev:15 rq:1354863 version:2.8.1 Changes: -------- --- /work/SRC/openSUSE:Factory/mt32emu/mt32emu.changes 2026-05-18 17:47:16.446461353 +0200 +++ /work/SRC/openSUSE:Factory/.mt32emu.new.2084/mt32emu.changes 2026-05-23 23:28:37.355762174 +0200 @@ -1,0 +2,7 @@ +Sat May 23 15:37:23 UTC 2026 - Martin Hauke <[email protected]> + +- Updated to 2.8.1 + * Fixed function Synth::readMemory that didn't retrieve data + correctly from the Timbre Memory bank. + +------------------------------------------------------------------- Old: ---- munt-libmt32emu_2_8_0.tar.gz New: ---- munt-libmt32emu_2_8_1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ mt32emu.spec ++++++ --- /var/tmp/diff_new_pack.RVjZRP/_old 2026-05-23 23:28:37.907784710 +0200 +++ /var/tmp/diff_new_pack.RVjZRP/_new 2026-05-23 23:28:37.907784710 +0200 @@ -17,10 +17,10 @@ %define s_name munt-lib%{name}_%{s_ver} -%define s_ver 2_8_0 +%define s_ver 2_8_1 %define sover 2 Name: mt32emu -Version: 2.8.0 +Version: 2.8.1 Release: 0 Summary: An emulator of the Roland MT-32, CM-32L and LAPC-I synthesiser modules License: GPL-3.0-or-later AND LGPL-2.1-or-later ++++++ munt-libmt32emu_2_8_0.tar.gz -> munt-libmt32emu_2_8_1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_0/mt32emu/NEWS.txt new/munt-libmt32emu_2_8_1/mt32emu/NEWS.txt --- old/munt-libmt32emu_2_8_0/mt32emu/NEWS.txt 2026-05-16 18:54:32.000000000 +0200 +++ new/munt-libmt32emu_2_8_1/mt32emu/NEWS.txt 2026-05-23 10:27:12.000000000 +0200 @@ -1,3 +1,10 @@ +2026-05-23: + + 2.8.1 released. + + * Fixed function Synth::readMemory that didn't retrieve data correctly from the Timbre + Memory bank. (#145) + 2026-05-16: 2.8.0 released. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_0/mt32emu/cmake/project_data.cmake new/munt-libmt32emu_2_8_1/mt32emu/cmake/project_data.cmake --- old/munt-libmt32emu_2_8_0/mt32emu/cmake/project_data.cmake 2026-05-16 18:54:32.000000000 +0200 +++ new/munt-libmt32emu_2_8_1/mt32emu/cmake/project_data.cmake 2026-05-23 10:27:12.000000000 +0200 @@ -4,5 +4,5 @@ set(libmt32emu_VERSION_MAJOR 2) set(libmt32emu_VERSION_MINOR 8) -set(libmt32emu_VERSION_PATCH 0) +set(libmt32emu_VERSION_PATCH 1) set(libmt32emu_VERSION "${libmt32emu_VERSION_MAJOR}.${libmt32emu_VERSION_MINOR}.${libmt32emu_VERSION_PATCH}") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_0/mt32emu/src/MemoryRegion.h new/munt-libmt32emu_2_8_1/mt32emu/src/MemoryRegion.h --- old/munt-libmt32emu_2_8_0/mt32emu/src/MemoryRegion.h 2026-05-16 18:54:32.000000000 +0200 +++ new/munt-libmt32emu_2_8_1/mt32emu/src/MemoryRegion.h 2026-05-23 10:27:12.000000000 +0200 @@ -108,6 +108,10 @@ public: PatchesMemoryRegion(Bit8u *useRealMemory, Bit8u *useMaxTable) : MemoryRegion(useRealMemory, useMaxTable, MR_Patches, MT32EMU_MEMADDR(0x050000), sizeof(PatchParam), 128) {} }; +// Note: this region has quite a special memory layout and doesn't map directly to SysEx-addressable memory. +// Aside from the actual Timbre Memory bank, we also cache the standard timbres extracted from the Control ROM herein. +// Therefore, one must always apply offset +128 when accessing the entries of the Timbre Memory bank. +// This also means that e.g. getClampedLen doesn't work as expected, so better to clean up this mess. class TimbresMemoryRegion : public MemoryRegion { public: TimbresMemoryRegion(Bit8u *useRealMemory, Bit8u *useMaxTable) : MemoryRegion(useRealMemory, useMaxTable, MR_Timbres, MT32EMU_MEMADDR(0x080000), sizeof(MemParams::PaddedTimbre), 64 + 64 + 64 + 64) {} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_0/mt32emu/src/Synth.cpp new/munt-libmt32emu_2_8_1/mt32emu/src/Synth.cpp --- old/munt-libmt32emu_2_8_0/mt32emu/src/Synth.cpp 2026-05-16 18:54:32.000000000 +0200 +++ new/munt-libmt32emu_2_8_1/mt32emu/src/Synth.cpp 2026-05-23 10:27:12.000000000 +0200 @@ -1707,6 +1707,7 @@ unsigned int m; if (region->isReadable()) { + if (MR_Timbres == region->type) first += 128; region->read(first, off, data, len); } else { // FIXME: We might want to do these properly in future diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_0/mt32emu/src/Synth.h new/munt-libmt32emu_2_8_1/mt32emu/src/Synth.h --- old/munt-libmt32emu_2_8_0/mt32emu/src/Synth.h 2026-05-16 18:54:32.000000000 +0200 +++ new/munt-libmt32emu_2_8_1/mt32emu/src/Synth.h 2026-05-23 10:27:12.000000000 +0200 @@ -630,6 +630,7 @@ MT32EMU_EXPORT_V(2.7) bool getSoundName(char *soundName, Bit8u timbreGroup, Bit8u timbreNumber) const; // Stores internal state of emulated synth into an array provided (as it would be acquired from hardware). + // Note, addr parameter is expressed in the linear space and *not* the SysEx address space. MT32EMU_EXPORT void readMemory(Bit32u addr, Bit32u len, Bit8u *data); // Retrieves the current state of the emulated MT-32 display facilities. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_0/mt32emu/src/test/SynthTest.cpp new/munt-libmt32emu_2_8_1/mt32emu/src/test/SynthTest.cpp --- old/munt-libmt32emu_2_8_0/mt32emu/src/test/SynthTest.cpp 2026-05-16 18:54:32.000000000 +0200 +++ new/munt-libmt32emu_2_8_1/mt32emu/src/test/SynthTest.cpp 2026-05-23 10:27:12.000000000 +0200 @@ -559,6 +559,35 @@ delete[] sysexBank; } +TEST_CASE("Synth should play SysEx with a custom Timbre bank and read it from memory") { + static const Bit8u timbreSysex[] = { + 0x08, 0x70, 0x00, + 'T', 'e', 's', 't', '-', 's', 'i', 'n', 'e', '.', 0x00, 0x00, 0x01, 0x00, + 0x18, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, + 0x00, 0x0b, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x64, 0x32, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x64, + 0x64, 0x64 + }; + + Synth synth; + ROMSet romSet; + romSet.initMT32New(); + openSynth(synth, romSet); + + Bit8u timbreData[sizeof timbreSysex - 3]; + + synth.readMemory(0x023800, sizeof timbreData, timbreData); + checkSilence(timbreData, sizeof timbreData); + + synth.writeSysex(16, timbreSysex, sizeof timbreSysex); + synth.readMemory(0x023800, sizeof timbreData, timbreData); + MT32EMU_CHECK_MEMORY_EQUAL(timbreData, timbreSysex + 3, sizeof timbreData); +} + } // namespace Test } // namespace MT32Emu
