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-25 21:56:19 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/mt32emu (Old) and /work/SRC/openSUSE:Factory/.mt32emu.new.2084 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mt32emu" Mon May 25 21:56:19 2026 rev:16 rq:1355047 version:2.8.2 Changes: -------- --- /work/SRC/openSUSE:Factory/mt32emu/mt32emu.changes 2026-05-23 23:28:37.355762174 +0200 +++ /work/SRC/openSUSE:Factory/.mt32emu.new.2084/mt32emu.changes 2026-05-25 21:59:33.883780006 +0200 @@ -1,0 +2,7 @@ +Mon May 25 09:12:38 UTC 2026 - Martin Hauke <[email protected]> + +- Update to 2.8.2 + * Prevented Rhythm Timbre bank from overwriting by unofficial + SysEx messages addressing memory range 0x090000-0x097FFF. + +------------------------------------------------------------------- Old: ---- munt-libmt32emu_2_8_1.tar.gz New: ---- munt-libmt32emu_2_8_2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ mt32emu.spec ++++++ --- /var/tmp/diff_new_pack.55vTVu/_old 2026-05-25 21:59:34.643811281 +0200 +++ /var/tmp/diff_new_pack.55vTVu/_new 2026-05-25 21:59:34.643811281 +0200 @@ -17,10 +17,10 @@ %define s_name munt-lib%{name}_%{s_ver} -%define s_ver 2_8_1 +%define s_ver 2_8_2 %define sover 2 Name: mt32emu -Version: 2.8.1 +Version: 2.8.2 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_1.tar.gz -> munt-libmt32emu_2_8_2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_1/.github/workflows/build-release-packages.yml new/munt-libmt32emu_2_8_2/.github/workflows/build-release-packages.yml --- old/munt-libmt32emu_2_8_1/.github/workflows/build-release-packages.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/munt-libmt32emu_2_8_2/.github/workflows/build-release-packages.yml 2026-05-24 22:11:28.000000000 +0200 @@ -0,0 +1,116 @@ +name: Build release packages + +on: + workflow_dispatch + +jobs: + build-ubuntu-packages: + runs-on: ubuntu-latest + + defaults: + run: + shell: bash + working-directory: ${{ github.workspace }} + + steps: + - uses: actions/checkout@v4 + + - name: Install dependencies for libmt32emu + run: | + sudo apt-get update + sudo apt-get install doctest-dev + + - name: Configure libmt32emu + run: > + cmake -S mt32emu -B build + -G Ninja + -D CMAKE_BUILD_TYPE=Release + -D libmt32emu_PACKAGE_TYPE=Runtime + -D libmt32emu_WITH_VERSION_TAGGING=ON + -D libmt32emu_WITH_SYMBOL_VERSIONING=ON + + - name: Build libmt32emu + run: cmake --build build + + - name: Test libmt32emu + working-directory: ${{ github.workspace }}/build + run: ctest -V + + - name: Package libmt32emu + working-directory: ${{ github.workspace }}/build + run: cpack -G DEB + + - uses: actions/upload-artifact@v7 + name: Upload libmt32emu + with: + path: ${{ github.workspace }}/build/libmt32emu-*.deb + archive: false + + - name: Configure libmt32emu-dev + run: cmake -D libmt32emu_PACKAGE_TYPE=Devel build + + - name: Package libmt32emu-dev + working-directory: ${{ github.workspace }}/build + run: cpack -G DEB + + - uses: actions/upload-artifact@v7 + name: Upload libmt32emu-dev + with: + path: ${{ github.workspace }}/build/libmt32emu-dev-*.deb + archive: false + + - name: Install dependencies for mt32emu-smf2wav + working-directory: ${{ github.workspace }}/build + run: | + sudo dpkg -i libmt32emu-*.deb + sudo dpkg -i libmt32emu-dev-*.deb + sudo apt-get install libglib2.0-dev + + - name: Clean build directory + run: rm -rf build + + - name: Configure mt32emu-smf2wav + run: > + cmake -S mt32emu_smf2wav -B build + -G Ninja + -D CMAKE_BUILD_TYPE=Release + + - name: Build mt32emu-smf2wav + run: cmake --build build + + - name: Package mt32emu-smf2wav + working-directory: ${{ github.workspace }}/build + run: cpack -G DEB + + - uses: actions/upload-artifact@v7 + name: Upload mt32emu-smf2wav + with: + path: ${{ github.workspace }}/build/mt32emu-smf2wav-*.deb + archive: false + + - name: Clean build directory + run: rm -rf build + + - name: Install dependencies for mt32emu-qt + run: sudo apt-get install libpulse-dev portaudio19-dev libjack-jackd2-dev qt6-multimedia-dev + + - name: Configure mt32emu-qt + run: > + cmake -S mt32emu_qt -B build + -G Ninja + -D CMAKE_BUILD_TYPE=Release + -D mt32emu-qt_USE_JACK_DYNAMIC_LOADING=ON + -D mt32emu-qt_USE_PULSEAUDIO_DYNAMIC_LOADING=OFF + + - name: Build mt32emu-qt + run: cmake --build build + + - name: Package mt32emu-qt + working-directory: ${{ github.workspace }}/build + run: cpack -G DEB + + - uses: actions/upload-artifact@v7 + name: Upload mt32emu-qt + with: + path: ${{ github.workspace }}/build/mt32emu-qt-*.deb + archive: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_1/.github/workflows/build-snapshots.yml new/munt-libmt32emu_2_8_2/.github/workflows/build-snapshots.yml --- old/munt-libmt32emu_2_8_1/.github/workflows/build-snapshots.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/munt-libmt32emu_2_8_2/.github/workflows/build-snapshots.yml 2026-05-24 22:11:28.000000000 +0200 @@ -0,0 +1,143 @@ +name: Build snapshots + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +jobs: + build-ubuntu-snapshot: + runs-on: ubuntu-latest + + defaults: + run: + shell: bash + working-directory: ${{ github.workspace }} + + steps: + - uses: actions/checkout@v4 + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install doctest-dev libpulse-dev portaudio19-dev libjack-jackd2-dev qt6-multimedia-dev + + - name: Configure + run: > + cmake -S . -B build + -G Ninja + -D CMAKE_BUILD_TYPE=Release + -D BUILD_SNAPSHOTS=ON + -D libmt32emu_PACKAGE_TYPE=Runtime + -D mt32emu-qt_USE_JACK_DYNAMIC_LOADING=ON + -D mt32emu-qt_USE_PULSEAUDIO_DYNAMIC_LOADING=OFF + + - name: Build + run: cmake --build build + + - name: Test + working-directory: ${{ github.workspace }}/build + run: ctest -V + + - name: Package munt monolith + working-directory: ${{ github.workspace }}/build + run: cpack -G DEB + + - uses: actions/upload-artifact@v7 + name: Upload munt + with: + path: ${{ github.workspace }}/build/munt-*.deb + archive: false + + build-macos-snapshot: + runs-on: macos-latest + + defaults: + run: + shell: bash + working-directory: ${{ github.workspace }} + + steps: + - uses: actions/checkout@v4 + + - name: Install dependencies + run: | + brew update + brew install doctest portaudio jack qtmultimedia + + - name: Configure + run: > + cmake -S . -B build + -G Ninja + -D CMAKE_BUILD_TYPE=Release + -D BUILD_SNAPSHOTS=ON + -D libmt32emu_PACKAGE_TYPE=Runtime + + - name: Build + run: cmake --build build + + - name: Test + working-directory: ${{ github.workspace }}/build + run: ctest -V + + - name: Package munt monolith + working-directory: ${{ github.workspace }}/build + run: cpack -G TXZ + + - uses: actions/upload-artifact@v7 + name: Upload munt + with: + path: ${{ github.workspace }}/build/munt-*.tar.xz + archive: false + + build-windows-snapshot: + runs-on: windows-latest + + defaults: + run: + shell: bash + working-directory: ${{ github.workspace }} + + env: + MINGW64_PATH: '/c/msys64/mingw64/bin:/c/msys64/usr/bin' + + steps: + - uses: actions/checkout@v4 + + - name: Install dependencies + run: > + PATH=$MINGW64_PATH:$PATH + pacman -Sy --noconfirm + mingw-w64-x86_64-gcc + mingw-w64-x86_64-doctest + mingw-w64-x86_64-glib2 + mingw-w64-x86_64-portaudio + mingw-w64-x86_64-jack2 + mingw-w64-x86_64-qt6-multimedia + + - name: Configure + run: > + PATH=$MINGW64_PATH:$PATH + cmake -S . -B build + -G Ninja + -D CMAKE_BUILD_TYPE=Release + -D BUILD_SNAPSHOTS=ON + -D libmt32emu_PACKAGE_TYPE=Runtime + + - name: Build + run: PATH=$MINGW64_PATH:$PATH cmake --build build + + - name: Test + working-directory: ${{ github.workspace }}/build + run: PATH=$MINGW64_PATH:$PATH ctest -V + + - name: Package munt monolith + working-directory: ${{ github.workspace }}/build + run: cpack -G ZIP + + - uses: actions/upload-artifact@v7 + name: Upload munt + with: + path: ${{ github.workspace }}/build/munt-*.zip + archive: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_1/cmake/project_data.cmake new/munt-libmt32emu_2_8_2/cmake/project_data.cmake --- old/munt-libmt32emu_2_8_1/cmake/project_data.cmake 2026-05-23 10:27:12.000000000 +0200 +++ new/munt-libmt32emu_2_8_2/cmake/project_data.cmake 2026-05-24 22:11:28.000000000 +0200 @@ -4,5 +4,5 @@ set(munt_VERSION_MAJOR 2) set(munt_VERSION_MINOR 8) -set(munt_VERSION_PATCH 0) +set(munt_VERSION_PATCH 1) set(munt_VERSION "${munt_VERSION_MAJOR}.${munt_VERSION_MINOR}.${munt_VERSION_PATCH}") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_1/mt32emu/NEWS.txt new/munt-libmt32emu_2_8_2/mt32emu/NEWS.txt --- old/munt-libmt32emu_2_8_1/mt32emu/NEWS.txt 2026-05-23 10:27:12.000000000 +0200 +++ new/munt-libmt32emu_2_8_2/mt32emu/NEWS.txt 2026-05-24 22:11:28.000000000 +0200 @@ -1,3 +1,10 @@ +2026-05-24: + + 2.8.2 released. + + * Prevented Rhythm Timbre bank from overwriting by unofficial SysEx messages addressing + memory range 0x090000-0x097FFF. (#146) + 2026-05-23: 2.8.1 released. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_1/mt32emu/cmake/project_data.cmake new/munt-libmt32emu_2_8_2/mt32emu/cmake/project_data.cmake --- old/munt-libmt32emu_2_8_1/mt32emu/cmake/project_data.cmake 2026-05-23 10:27:12.000000000 +0200 +++ new/munt-libmt32emu_2_8_2/mt32emu/cmake/project_data.cmake 2026-05-24 22:11:28.000000000 +0200 @@ -4,5 +4,5 @@ set(libmt32emu_VERSION_MAJOR 2) set(libmt32emu_VERSION_MINOR 8) -set(libmt32emu_VERSION_PATCH 1) +set(libmt32emu_VERSION_PATCH 2) 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_1/mt32emu/src/MemoryRegion.h new/munt-libmt32emu_2_8_2/mt32emu/src/MemoryRegion.h --- old/munt-libmt32emu_2_8_1/mt32emu/src/MemoryRegion.h 2026-05-23 10:27:12.000000000 +0200 +++ new/munt-libmt32emu_2_8_2/mt32emu/src/MemoryRegion.h 2026-05-24 22:11:28.000000000 +0200 @@ -1,5 +1,5 @@ /* Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009 Dean Beeler, Jerome Fisher - * Copyright (C) 2011-2025 Dean Beeler, Jerome Fisher, Sergey V. Mikayev + * Copyright (C) 2011-2026 Dean Beeler, Jerome Fisher, Sergey V. Mikayev * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -108,13 +108,9 @@ 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) {} + TimbresMemoryRegion(Bit8u *useRealMemory, Bit8u *useMaxTable) : MemoryRegion(useRealMemory, useMaxTable, MR_Timbres, MT32EMU_MEMADDR(0x080000), sizeof(MemParams::PaddedTimbre), 64) {} }; class SystemMemoryRegion : public MemoryRegion { public: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_1/mt32emu/src/Synth.cpp new/munt-libmt32emu_2_8_2/mt32emu/src/Synth.cpp --- old/munt-libmt32emu_2_8_1/mt32emu/src/Synth.cpp 2026-05-23 10:27:12.000000000 +0200 +++ new/munt-libmt32emu_2_8_2/mt32emu/src/Synth.cpp 2026-05-24 22:11:28.000000000 +0200 @@ -695,14 +695,15 @@ return false; } -bool Synth::initCompressedTimbre(Bit16u timbreNum, const Bit8u *src, Bit32u srcLen) { +bool Synth::initCompressedTimbre(TimbresMemoryRegion &tempRegion, Bit16u absTimbreNum, const Bit8u *src, Bit32u srcLen) { // "Compressed" here means that muted partials aren't present in ROM (except in the case of partial 0 being muted). // Instead the data from the previous unmuted partial is used. if (srcLen < sizeof(TimbreParam::CommonParam)) { return false; } - TimbreParam *timbre = &mt32ram.timbres[timbreNum].timbre; - timbresMemoryRegion->write(timbreNum, 0, src, sizeof(TimbreParam::CommonParam), true); + TimbreParam *timbre = &mt32ram.timbres[absTimbreNum].timbre; + Bit32u timbreNum = absTimbreNum & 0x3F; + tempRegion.write(timbreNum, 0, src, sizeof(TimbreParam::CommonParam), true); unsigned int srcPos = sizeof(TimbreParam::CommonParam); unsigned int memPos = sizeof(TimbreParam::CommonParam); for (int t = 0; t < 4; t++) { @@ -712,7 +713,7 @@ } else if (srcPos + sizeof(TimbreParam::PartialParam) >= srcLen) { return false; } - timbresMemoryRegion->write(timbreNum, memPos, src + srcPos, sizeof(TimbreParam::PartialParam)); + tempRegion.write(timbreNum, memPos, src + srcPos, sizeof(TimbreParam::PartialParam)); srcPos += sizeof(TimbreParam::PartialParam); memPos += sizeof(TimbreParam::PartialParam); } @@ -721,22 +722,26 @@ bool Synth::initTimbres(Bit16u mapAddress, Bit16u offset, Bit16u count, Bit16u startTimbre, bool compressed) { const Bit8u *timbreMap = &controlROMData[mapAddress]; + // We abuse TimbresMemoryRegion with the sole purpose of clamping the timbre parameters by the max table. + TimbresMemoryRegion tempRegion(reinterpret_cast<Bit8u *>(mt32ram.timbres + startTimbre), paddedTimbreMaxTable); + Bit16u timbreNum = 0; for (Bit16u i = 0; i < count * 2; i += 2) { + Bit16u absTimbreNum = startTimbre + timbreNum; Bit16u address = (timbreMap[i + 1] << 8) | timbreMap[i]; if (!compressed && (address + offset + sizeof(TimbreParam) > CONTROL_ROM_SIZE)) { - printDebug("Control ROM error: Timbre map entry 0x%04x for timbre %d points to invalid timbre address 0x%04x", i, startTimbre, address); + printDebug("Control ROM error: Timbre map entry 0x%04x for timbre %d points to invalid timbre address 0x%04x", i, absTimbreNum, address); return false; } address += offset; if (compressed) { - if (!initCompressedTimbre(startTimbre, &controlROMData[address], CONTROL_ROM_SIZE - address)) { - printDebug("Control ROM error: Timbre map entry 0x%04x for timbre %d points to invalid timbre at 0x%04x", i, startTimbre, address); + if (!initCompressedTimbre(tempRegion, absTimbreNum, &controlROMData[address], CONTROL_ROM_SIZE - address)) { + printDebug("Control ROM error: Timbre map entry 0x%04x for timbre %d points to invalid timbre at 0x%04x", i, absTimbreNum, address); return false; } } else { - timbresMemoryRegion->write(startTimbre, 0, &controlROMData[address], sizeof(TimbreParam), true); + tempRegion.write(timbreNum, 0, &controlROMData[address], sizeof(TimbreParam), true); } - startTimbre++; + timbreNum++; } return true; } @@ -1650,7 +1655,7 @@ rhythmTempMemoryRegion = new RhythmTempMemoryRegion(reinterpret_cast<Bit8u *>(&mt32ram.rhythmTemp[0]), &controlROMData[controlROMMap->rhythmMaxTable]); timbreTempMemoryRegion = new TimbreTempMemoryRegion(reinterpret_cast<Bit8u *>(&mt32ram.timbreTemp[0]), paddedTimbreMaxTable); patchesMemoryRegion = new PatchesMemoryRegion(reinterpret_cast<Bit8u *>(&mt32ram.patches[0]), &controlROMData[controlROMMap->patchMaxTable]); - timbresMemoryRegion = new TimbresMemoryRegion(reinterpret_cast<Bit8u *>(&mt32ram.timbres[0]), paddedTimbreMaxTable); + timbresMemoryRegion = new TimbresMemoryRegion(reinterpret_cast<Bit8u *>(&mt32ram.timbres[/* Bank M */ 128]), paddedTimbreMaxTable); systemMemoryRegion = new SystemMemoryRegion(reinterpret_cast<Bit8u *>(&mt32ram.system), &controlROMData[controlROMMap->systemMaxTable]); displayMemoryRegion = new DisplayMemoryRegion(); resetMemoryRegion = new ResetMemoryRegion(); @@ -1707,7 +1712,6 @@ 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 @@ -1802,8 +1806,6 @@ break; case MR_Timbres: // Timbres - first += 128; - last += 128; region->write(first, off, data, len); for (unsigned int i = first; i <= last; i++) { #if MT32EMU_MONITOR_TIMBRES >= 1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_1/mt32emu/src/Synth.h new/munt-libmt32emu_2_8_2/mt32emu/src/Synth.h --- old/munt-libmt32emu_2_8_1/mt32emu/src/Synth.h 2026-05-23 10:27:12.000000000 +0200 +++ new/munt-libmt32emu_2_8_2/mt32emu/src/Synth.h 2026-05-24 22:11:28.000000000 +0200 @@ -239,7 +239,7 @@ bool initPCMList(Bit16u mapAddress, Bit16u count); bool initTimbres(Bit16u mapAddress, Bit16u offset, Bit16u timbreCount, Bit16u startTimbre, bool compressed); - bool initCompressedTimbre(Bit16u drumNum, const Bit8u *mem, Bit32u memLen); + bool initCompressedTimbre(TimbresMemoryRegion &tempRegion, Bit16u absTimbreNum, const Bit8u *src, Bit32u srcLen); void initReverbModels(bool mt32CompatibleMode); void initSoundGroups(char newSoundGroupNames[][9]); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_1/mt32emu/src/test/SynthTest.cpp new/munt-libmt32emu_2_8_2/mt32emu/src/test/SynthTest.cpp --- old/munt-libmt32emu_2_8_1/mt32emu/src/test/SynthTest.cpp 2026-05-23 10:27:12.000000000 +0200 +++ new/munt-libmt32emu_2_8_2/mt32emu/src/test/SynthTest.cpp 2026-05-24 22:11:28.000000000 +0200 @@ -572,20 +572,51 @@ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x64 }; + static const Bit8u *timbreSysexData = timbreSysex + 3; + static const Bit32u timbreSysexDataLength = sizeof timbreSysex - 3; Synth synth; ROMSet romSet; romSet.initMT32New(); openSynth(synth, romSet); - Bit8u timbreData[sizeof timbreSysex - 3]; + Bit8u timbreData[timbreSysexDataLength]; - synth.readMemory(0x023800, sizeof timbreData, timbreData); - checkSilence(timbreData, sizeof timbreData); + synth.readMemory(0x023800, timbreSysexDataLength, timbreData); + checkSilence(timbreData, timbreSysexDataLength); synth.writeSysex(16, timbreSysex, sizeof timbreSysex); - synth.readMemory(0x023800, sizeof timbreData, timbreData); - MT32EMU_CHECK_MEMORY_EQUAL(timbreData, timbreSysex + 3, sizeof timbreData); + synth.readMemory(0x023800, timbreSysexDataLength, timbreData); + MT32EMU_CHECK_MEMORY_EQUAL(timbreData, timbreSysexData, timbreSysexDataLength); +} + +TEST_CASE("Synth should ignore SysEx writes to addresses right above Timbre Memory") { + static const Bit8u timbreSysex[] = { + 0x09, 0x00, 0x00, + 'T', 'e', 's', 't', '-', 's', 'i', 'n', 'e', '.' + }; + static const Bit32u timbreSysexDataLength = sizeof timbreSysex - 3; + + Synth synth; + ROMSet romSet; + romSet.initMT32New(); + openSynth(synth, romSet); + + Bit8u timbreData[timbreSysexDataLength]; + memset(timbreData, 0, timbreSysexDataLength); + + synth.readMemory(0x024000, timbreSysexDataLength, timbreData); + checkSilence(timbreData, timbreSysexDataLength); + + const ReportedEvent expected[] = { + ReportedEvent::midiMessage(), + ReportedEvent::debugMessage("Sysex write to unrecognised address") + }; + TestReportHandler<ReportHandler3> rh(expected); + synth.setReportHandler3(&rh); + synth.writeSysex(16, timbreSysex, sizeof timbreSysex); + synth.readMemory(0x024000, timbreSysexDataLength, timbreData); + checkSilence(timbreData, timbreSysexDataLength); } } // namespace Test diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_1/mt32emu/src/test/Testing.h new/munt-libmt32emu_2_8_2/mt32emu/src/test/Testing.h --- old/munt-libmt32emu_2_8_1/mt32emu/src/test/Testing.h 2026-05-23 10:27:12.000000000 +0200 +++ new/munt-libmt32emu_2_8_2/mt32emu/src/test/Testing.h 2026-05-24 22:11:28.000000000 +0200 @@ -36,9 +36,7 @@ do { \ bool subStringFound = strstr(haystack, needle) != NULL; \ const char *descr = subStringFound ? " CONTAINS " : " DOES NOT CONTAIN "; \ - INFO(#haystack << descr << #needle "!"); \ - CAPTURE(haystack); \ - CAPTURE(needle); \ + INFO("\n\t" #haystack " := '" << haystack << "'" << descr << #needle " := '" << needle << "'!"); \ CHECK(subStringFound); \ } while(false) @@ -48,9 +46,7 @@ CHECK(data1 == data2); \ break; \ } \ - CAPTURE(data1); \ - CAPTURE(data2); \ - CAPTURE(size); \ + INFO("\n\t" #data1 " := " << data1 << "\n\t" #data2 " := " << data2 << "\n\t" #size " := " << size); \ CHECK(memcmp(data1, data2, size) == 0); \ } while(false) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_1/mt32emu_qt/NEWS.txt new/munt-libmt32emu_2_8_2/mt32emu_qt/NEWS.txt --- old/munt-libmt32emu_2_8_1/mt32emu_qt/NEWS.txt 2026-05-23 10:27:12.000000000 +0200 +++ new/munt-libmt32emu_2_8_2/mt32emu_qt/NEWS.txt 2026-05-24 22:11:28.000000000 +0200 @@ -1,3 +1,9 @@ +2026-05-24: + + 1.12.1 released. + + * Updated mt32emu library to version 2.8.2. + 2026-05-16: 1.12.0 released. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_1/mt32emu_qt/cmake/project_data.cmake new/munt-libmt32emu_2_8_2/mt32emu_qt/cmake/project_data.cmake --- old/munt-libmt32emu_2_8_1/mt32emu_qt/cmake/project_data.cmake 2026-05-23 10:27:12.000000000 +0200 +++ new/munt-libmt32emu_2_8_2/mt32emu_qt/cmake/project_data.cmake 2026-05-24 22:11:28.000000000 +0200 @@ -4,5 +4,5 @@ set(mt32emu_qt_VERSION_MAJOR 1) set(mt32emu_qt_VERSION_MINOR 12) -set(mt32emu_qt_VERSION_PATCH 0) +set(mt32emu_qt_VERSION_PATCH 1) set(mt32emu_qt_VERSION "${mt32emu_qt_VERSION_MAJOR}.${mt32emu_qt_VERSION_MINOR}.${mt32emu_qt_VERSION_PATCH}") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_1/mt32emu_smf2wav/cmake/project_data.cmake new/munt-libmt32emu_2_8_2/mt32emu_smf2wav/cmake/project_data.cmake --- old/munt-libmt32emu_2_8_1/mt32emu_smf2wav/cmake/project_data.cmake 2026-05-23 10:27:12.000000000 +0200 +++ new/munt-libmt32emu_2_8_2/mt32emu_smf2wav/cmake/project_data.cmake 2026-05-24 22:11:28.000000000 +0200 @@ -4,5 +4,5 @@ set(mt32emu_smf2wav_VERSION_MAJOR 1) set(mt32emu_smf2wav_VERSION_MINOR 9) -set(mt32emu_smf2wav_VERSION_PATCH 1) +set(mt32emu_smf2wav_VERSION_PATCH 2) set(mt32emu_smf2wav_VERSION "${mt32emu_smf2wav_VERSION_MAJOR}.${mt32emu_smf2wav_VERSION_MINOR}.${mt32emu_smf2wav_VERSION_PATCH}") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_1/mt32emu_win32drv/NEWS.txt new/munt-libmt32emu_2_8_2/mt32emu_win32drv/NEWS.txt --- old/munt-libmt32emu_2_8_1/mt32emu_win32drv/NEWS.txt 2026-05-23 10:27:12.000000000 +0200 +++ new/munt-libmt32emu_2_8_2/mt32emu_win32drv/NEWS.txt 2026-05-24 22:11:28.000000000 +0200 @@ -1,3 +1,9 @@ +2026-05-24: + + 1.9.1 released. + + * Updated mt32emu library to version 2.8.2. + 2026-05-16: 1.9.0 released. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_1/mt32emu_win32drv/cmake/project_data.cmake new/munt-libmt32emu_2_8_2/mt32emu_win32drv/cmake/project_data.cmake --- old/munt-libmt32emu_2_8_1/mt32emu_win32drv/cmake/project_data.cmake 2026-05-23 10:27:12.000000000 +0200 +++ new/munt-libmt32emu_2_8_2/mt32emu_win32drv/cmake/project_data.cmake 2026-05-24 22:11:28.000000000 +0200 @@ -4,5 +4,5 @@ set(mt32emu_win32drv_VERSION_MAJOR 1) set(mt32emu_win32drv_VERSION_MINOR 9) -set(mt32emu_win32drv_VERSION_PATCH 0) +set(mt32emu_win32drv_VERSION_PATCH 1) set(mt32emu_win32drv_VERSION "${mt32emu_win32drv_VERSION_MAJOR}.${mt32emu_win32drv_VERSION_MINOR}.${mt32emu_win32drv_VERSION_PATCH}")
