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-06-08 14:22:42 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/mt32emu (Old) and /work/SRC/openSUSE:Factory/.mt32emu.new.2375 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mt32emu" Mon Jun 8 14:22:42 2026 rev:17 rq:1357877 version:2.8.3 Changes: -------- --- /work/SRC/openSUSE:Factory/mt32emu/mt32emu.changes 2026-05-25 21:59:33.883780006 +0200 +++ /work/SRC/openSUSE:Factory/.mt32emu.new.2375/mt32emu.changes 2026-06-08 14:28:03.887888663 +0200 @@ -1,0 +2,6 @@ +Sun Jun 7 17:50:11 UTC 2026 - Martin Hauke <[email protected]> + +- Update to 2.8.3 + * Reworked sanity checks for short MIDI messages. + +------------------------------------------------------------------- Old: ---- munt-libmt32emu_2_8_2.tar.gz New: ---- munt-libmt32emu_2_8_3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ mt32emu.spec ++++++ --- /var/tmp/diff_new_pack.D0vi1f/_old 2026-06-08 14:28:04.903930823 +0200 +++ /var/tmp/diff_new_pack.D0vi1f/_new 2026-06-08 14:28:04.907930989 +0200 @@ -17,10 +17,10 @@ %define s_name munt-lib%{name}_%{s_ver} -%define s_ver 2_8_2 +%define s_ver 2_8_3 %define sover 2 Name: mt32emu -Version: 2.8.2 +Version: 2.8.3 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_2.tar.gz -> munt-libmt32emu_2_8_3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_2/.github/workflows/build-appimages.yml new/munt-libmt32emu_2_8_3/.github/workflows/build-appimages.yml --- old/munt-libmt32emu_2_8_2/.github/workflows/build-appimages.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/munt-libmt32emu_2_8_3/.github/workflows/build-appimages.yml 2026-06-06 15:58:54.000000000 +0200 @@ -0,0 +1,104 @@ +name: Build appimages + +on: + workflow_dispatch + +jobs: + build-appimages: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Checkout Qt + uses: actions/download-artifact@v8 + with: + path: ${{ github.workspace }} + github-token: ${{ secrets.GITHUB_TOKEN }} + repository: sergm/munt + run-id: 26723258340 + artifact-ids: 7319942079 + + - name: Unpack dependencies + run: | + mkdir qt + tar xf qt_6_11_1_linux_x64.tgz -C qt + + - name: Get linuxdeploy + run: | + wget -q https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage + chmod a+x linuxdeploy-x86_64.AppImage + + - name: Patch cmake script for mt32emu-qt + run: echo "qt_import_plugins(mt32emu-qt INCLUDE Qt6::QGtk3ThemePlugin)" >> mt32emu_qt/CMakeLists.txt + + - name: Prepare AppDir + run: | + mkdir -p build/mt32emu_smf2wav/AppDir/usr/share/pixmaps + cp mt32emu_qt/res/icons/256x256/munt.png build/mt32emu_smf2wav/AppDir/usr/share/pixmaps/munt.png + mkdir build/mt32emu_smf2wav/AppDir/usr/share/applications + cat <<'EOF' >> build/mt32emu_smf2wav/AppDir/usr/share/applications/smf2wav.desktop + [Desktop Entry] + Name=mt32emu-smf2wav + Comment=MT-32 SMF to WAVE conversion + Exec=mt32emu-smf2wav + Icon=munt + NoDisplay=false + StartupNotify=false + Terminal=true + Type=Application + Categories=AudioVideo; + EOF + + - name: Assemble + run: | + cat <<'EOF' >> build.sh + #!/bin/bash + set -e + dnf update -y + dnf install -y gcc-toolset-10-gcc-c++ cmake ninja-build file \ + gtk3-devel libX11-devel xcb-util-devel xcb-util-cursor-devel xcb-util-image-devel \ + xcb-util-keysyms-devel xcb-util-renderutil-devel xcb-util-wm-devel libxkbcommon-devel \ + libxkbcommon-x11-devel pulseaudio-libs-devel portaudio-devel jack-audio-connection-kit-devel + source /opt/rh/gcc-toolset-10/enable + cd /home/munt + cmake -S . -B build/mt32emu_smf2wav -G Ninja \ + -D BUILD_SNAPSHOTS=ON \ + -D BUILD_TESTING=OFF \ + -D CMAKE_BUILD_TYPE:STRING=Release \ + -D CMAKE_INSTALL_PREFIX:PATH=build/mt32emu_smf2wav/AppDir/usr \ + -D libmt32emu_PACKAGE_TYPE:STRING=Runtime \ + -D munt_WITH_MT32EMU_QT:BOOL=OFF + cmake -S . -B build/mt32emu_qt -G Ninja \ + -D BUILD_SNAPSHOTS=ON \ + -D BUILD_TESTING=OFF \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_INSTALL_PREFIX:PATH=build/mt32emu_qt/AppDir/usr \ + -D CMAKE_PREFIX_PATH=/home/munt/qt/stage \ + -D libmt32emu_PACKAGE_TYPE=Runtime \ + -D mt32emu-qt_USE_JACK_DYNAMIC_LOADING:BOOL=ON \ + -D mt32emu-qt_USE_PULSEAUDIO_DYNAMIC_LOADING=OFF \ + -D munt_WITH_MT32EMU_SMF2WAV:BOOL=OFF + cmake --build build/mt32emu_smf2wav + cmake --build build/mt32emu_qt + cmake --install build/mt32emu_smf2wav --component Runtime --strip + ./linuxdeploy-x86_64.AppImage --appimage-extract-and-run --appdir=build/mt32emu_smf2wav/AppDir -o appimage + cmake --install build/mt32emu_qt --component Runtime --strip + ./linuxdeploy-x86_64.AppImage --appimage-extract-and-run --appdir=build/mt32emu_qt/AppDir -o appimage + EOF + chmod a+x build.sh + podman run --mount type=bind,source=.,destination=/home/munt \ + --rm \ + ghcr.io/almalinux/8-toolbox /home/munt/build.sh + + - uses: actions/upload-artifact@v7 + name: Upload mt32emu_smf2wav-x86_64.AppImage + with: + path: ${{ github.workspace }}/mt32emu-smf2wav-x86_64.AppImage + archive: false + + - uses: actions/upload-artifact@v7 + name: Upload MT-32_Emulator-x86_64.AppImage + with: + path: ${{ github.workspace }}/MT-32_Emulator-x86_64.AppImage + archive: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_2/.github/workflows/build-mt32emu-qt.yml new/munt-libmt32emu_2_8_3/.github/workflows/build-mt32emu-qt.yml --- old/munt-libmt32emu_2_8_2/.github/workflows/build-mt32emu-qt.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/munt-libmt32emu_2_8_3/.github/workflows/build-mt32emu-qt.yml 2026-06-06 15:58:54.000000000 +0200 @@ -0,0 +1,167 @@ +name: Build fat mt32emu-qt binary + +on: + workflow_dispatch + +jobs: + build-mt32emu-qt-windows: + runs-on: windows-latest + + defaults: + run: + shell: cmd + working-directory: ${{ github.workspace }} + + steps: + - uses: actions/checkout@v4 + + - name: Checkout portaudio + uses: actions/download-artifact@v8 + with: + name: portaudio-win64.tgz + path: ${{ github.workspace }} + github-token: ${{ secrets.GITHUB_TOKEN }} + repository: sergm/munt + run-id: 26477630535 + + - name: Checkout Qt + uses: actions/download-artifact@v8 + with: + name: qt_6_11_1_win64.tgz + path: ${{ github.workspace }} + github-token: ${{ secrets.GITHUB_TOKEN }} + repository: sergm/munt + run-id: 26478191762 + + - name: Unpack dependencies + run: | + mkdir portaudio + tar xf portaudio-win64.tgz -C portaudio + tar xf qt_6_11_1_win64.tgz + + - name: Get Jack + run: | + git clone --depth=1 --revision=refs/tags/v1.9.22 https://github.com/jackaudio/jack2.git + type NUL > jack2\libjack64.lib + + - name: Assemble + run: > + "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" && + cmake -S . -B build -G Ninja + -D BUILD_SNAPSHOTS=ON + -D BUILD_TESTING=OFF + -D CMAKE_BUILD_TYPE=Release + -D CMAKE_MSVC_RUNTIME_LIBRARY:STRING="MultiThreaded$<$<CONFIG:Debug>:Debug>" + -D CMAKE_PREFIX_PATH=${{ github.workspace }}/stage + -D JACK_INCLUDE_DIR:PATH=${{ github.workspace }}/jack2/common + -D JACK_LIBRARY:FILEPATH=${{ github.workspace }}/jack2/libjack64.lib + -D PORTAUDIO_INCLUDE_DIR=${{ github.workspace }}/portaudio/stage/include + -D PORTAUDIO_LIBRARY=${{ github.workspace }}/portaudio/stage/lib/portaudio_static_x64.lib + -D libmt32emu_PACKAGE_TYPE=Runtime + -D mt32emu-qt_USE_JACK_DYNAMIC_LOADING:BOOL=ON + -D munt_WITH_MT32EMU_SMF2WAV:BOOL=OFF + -D munt_WITH_MT32EMU_WIN32DRV:BOOL=OFF && + cmake --build build && + cmake --install build --prefix snapshot --component Runtime + + - name: Package + run: | + cd snapshot + move bin\mt32emu-qt.exe . + move share\doc . + rmdir /s/q bin share + + - uses: actions/upload-artifact@v7 + name: Upload + with: + path: ${{ github.workspace }}/snapshot + name: mt32emu_qt_win11_x64 + archive: true + + build-mt32emu-qt-macos: + runs-on: macos-latest + + defaults: + run: + shell: bash + working-directory: ${{ github.workspace }} + + steps: + - uses: actions/checkout@v4 + + - name: Checkout portaudio + uses: actions/download-artifact@v8 + with: + name: portaudio-macos.tgz + path: ${{ github.workspace }} + github-token: ${{ secrets.GITHUB_TOKEN }} + repository: sergm/munt + run-id: 26477630535 + + - name: Checkout Qt + uses: actions/download-artifact@v8 + with: + name: qt_6_11_1_macos.tgz + path: ${{ github.workspace }} + github-token: ${{ secrets.GITHUB_TOKEN }} + repository: sergm/munt + run-id: 26478191762 + + - name: Unpack dependencies + run: | + mkdir portaudio + tar xf portaudio-macos.tgz -C portaudio + tar xf qt_6_11_1_macos.tgz + + - name: Build Resources + run: | + mkdir MT32Emu.iconset + cd MT32Emu.iconset + ln ../mt32emu_qt/res/icons/256x256/munt.png . + sips -z 16 16 munt.png --out icon_16x16.png + sips -z 32 32 munt.png --out [email protected] + sips -z 32 32 munt.png --out icon_32x32.png + sips -z 64 64 munt.png --out [email protected] + sips -z 128 128 munt.png --out icon_128x128.png + sips -z 256 256 munt.png --out [email protected] + sips -z 256 256 munt.png --out icon_256x256.png + sips -z 512 512 munt.png --out [email protected] + sips -z 512 512 munt.png --out icon_512x512.png + sips -z 1024 1024 munt.png --out [email protected] + cd .. + iconutil -c icns MT32Emu.iconset + + - name: Configure + run: > + cmake -S . -B build -G Ninja + -D BUILD_SNAPSHOTS=ON + -D BUILD_TESTING=OFF + -D CMAKE_BUILD_TYPE=Release + -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=13.0 + -D CMAKE_PREFIX_PATH=${{ github.workspace }}/stage + -D MACOSX_BUNDLE_ICON_FILE:STRING=MT32Emu.icns + -D PORTAUDIO_INCLUDE_DIR=${{ github.workspace }}/portaudio/stage/include + -D PORTAUDIO_LIBRARY=${{ github.workspace }}/portaudio/stage/lib/libportaudio.a + -D libmt32emu_PACKAGE_TYPE=Runtime + -D munt_WITH_MT32EMU_SMF2WAV:BOOL=OFF + + - name: Build + run: cmake --build build + + - name: Package + run: | + cmake --install build --prefix snapshot --component Runtime --strip + cd snapshot + mv bin/mt32emu-qt.app . + mv share/doc . + rm -rf bin share + strip mt32emu-qt.app/Contents/MacOS/mt32emu-qt + mkdir mt32emu-qt.app/Contents/Resources + mv ../MT32Emu.icns mt32emu-qt.app/Contents/Resources + tar czf ../mt32emu_qt_macos_arm64.tgz * + + - uses: actions/upload-artifact@v7 + name: Upload + with: + path: ${{ github.workspace }}/mt32emu_qt_macos_arm64.tgz + archive: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_2/.github/workflows/build-portaudio.yml new/munt-libmt32emu_2_8_3/.github/workflows/build-portaudio.yml --- old/munt-libmt32emu_2_8_2/.github/workflows/build-portaudio.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/munt-libmt32emu_2_8_3/.github/workflows/build-portaudio.yml 2026-06-06 15:58:54.000000000 +0200 @@ -0,0 +1,75 @@ +name: Build PortAudio + +on: + workflow_dispatch + +jobs: + build-portaudio-windows: + runs-on: windows-latest + + defaults: + run: + shell: cmd + working-directory: ${{ github.workspace }} + + steps: + - name: Get sources + run: git clone --depth=1 --revision=refs/tags/v19.7.0 https://github.com/PortAudio/portaudio + + - name: Assemble + run: > + "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" && + cmake -S portaudio -B build -G Ninja + -D CMAKE_BUILD_TYPE=Release + -D CMAKE_INSTALL_PREFIX=stage + -D CMAKE_POLICY_VERSION_MINIMUM=3.5 + -D PA_BUILD_SHARED=OFF && + cmake --build build && + cmake --install build --prefix stage + + - name: Pack + run: tar czf portaudio-win64.tgz stage + + - uses: actions/upload-artifact@v7 + name: Upload + with: + path: ${{ github.workspace }}/portaudio-win64.tgz + name: portaudio-win64 + archive: false + + build-portaudio-macos: + runs-on: macos-latest + + defaults: + run: + shell: bash + working-directory: ${{ github.workspace }} + + steps: + - name: Get sources + run: git clone --depth=1 --revision=refs/tags/v19.7.0 https://github.com/PortAudio/portaudio + + - name: Configure + run: > + cmake -S portaudio -B build -G Ninja + -D CMAKE_BUILD_TYPE=Release + -D CMAKE_INSTALL_PREFIX=stage + -D CMAKE_POLICY_VERSION_MINIMUM=3.5 + -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=13.0 + -D PA_BUILD_SHARED=OFF + + - name: Build + run: cmake --build build + + - name: Stage + run: cmake --install build --prefix stage + + - name: Pack + run: tar czf portaudio-macos.tgz stage + + - uses: actions/upload-artifact@v7 + name: Upload + with: + path: ${{ github.workspace }}/portaudio-macos.tgz + name: portaudio-macos + archive: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_2/.github/workflows/build-qt.yml new/munt-libmt32emu_2_8_3/.github/workflows/build-qt.yml --- old/munt-libmt32emu_2_8_2/.github/workflows/build-qt.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/munt-libmt32emu_2_8_3/.github/workflows/build-qt.yml 2026-06-06 15:58:54.000000000 +0200 @@ -0,0 +1,127 @@ +name: Build Qt + +on: + workflow_dispatch + +jobs: + build-qt-windows: + runs-on: windows-latest + + defaults: + run: + shell: cmd + working-directory: ${{ github.workspace }} + + steps: + - name: Get super repo + run: git clone --depth=1 --revision=refs/tags/v6.11.1 https://code.qt.io/qt/qt5.git + + - name: Get submodules + working-directory: ${{ github.workspace }}/qt5 + run: git submodule update --init --depth=1 qtbase + + - name: Assemble + run: > + "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" && + cmake -S qt5 -B build -G Ninja + -D BUILD_SHARED_LIBS:BOOL=OFF + -D CMAKE_BUILD_TYPE=Release + -D CMAKE_INSTALL_PREFIX=stage + -D FEATURE_static_runtime:BOOL=ON + -D FEATURE_printsupport:BOOL=OFF + -D FEATURE_testlib:BOOL=OFF + -D FEATURE_sql:BOOL=OFF + -D FEATURE_xml:BOOL=OFF && + cmake --build build && + cmake --install build + + - name: Pack + run: tar czf qt_6_11_1_win64.tgz stage + + - uses: actions/upload-artifact@v7 + name: Upload + with: + path: ${{ github.workspace }}/qt_6_11_1_win64.tgz + archive: false + + build-qt-macos: + runs-on: macos-latest + + defaults: + run: + shell: bash + working-directory: ${{ github.workspace }} + + steps: + - name: Get super repo + run: git clone --depth=1 --revision=refs/tags/v6.11.1 https://code.qt.io/qt/qt5.git + + - name: Get submodules + working-directory: ${{ github.workspace }}/qt5 + run: git submodule update --init --depth=1 qtbase qtshadertools qtmultimedia + + - name: Configure + run: > + cmake -S qt5 -B build -G Ninja + -D BUILD_SHARED_LIBS:BOOL=OFF + -D CMAKE_BUILD_TYPE=Release + -D CMAKE_INSTALL_PREFIX=stage + -D FEATURE_printsupport:BOOL=OFF + -D FEATURE_testlib:BOOL=OFF + -D FEATURE_sql:BOOL=OFF + -D FEATURE_xml:BOOL=OFF + + - name: Build + run: cmake --build build + + - name: Stage + run: cmake --install build + + - name: Pack + run: tar czf qt_6_11_1_macos.tgz stage + + - uses: actions/upload-artifact@v7 + name: Upload + with: + path: ${{ github.workspace }}/qt_6_11_1_macos.tgz + archive: false + + build-qt-linux: + runs-on: ubuntu-latest + + steps: + - name: Assemble + run: | + cat <<'EOF' >> build.sh + #!/bin/bash + set -e + dnf update -y + dnf install -y gcc-toolset-10-gcc-c++ cmake ninja-build \ + gtk3-devel libX11-devel xcb-util-devel xcb-util-cursor-devel xcb-util-image-devel \ + xcb-util-keysyms-devel xcb-util-renderutil-devel xcb-util-wm-devel libxkbcommon-devel \ + libxkbcommon-x11-devel pulseaudio-libs-devel + source /opt/rh/gcc-toolset-10/enable + mkdir /home/munt/qt + cd /home/munt/qt + git clone --depth=1 --branch=v6.11.1 https://code.qt.io/qt/qt5.git + cd qt5 + git submodule update --init --depth=1 qtbase qtshadertools qtmultimedia + cd .. + cmake -S qt5 -B build -G Ninja -D BUILD_SHARED_LIBS:BOOL=OFF -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=stage \ + -D FEATURE_androiddeployqt:BOOL=OFF -D FEATURE_network:BOOL=OFF \ + -D FEATURE_pdf:BOOL=OFF -D FEATURE_printsupport:BOOL=OFF -D FEATURE_testlib:BOOL=OFF -D FEATURE_sql:BOOL=OFF \ + -D FEATURE_xml:BOOL=OFF -D INPUT_libjpeg:STRING=no + cmake --build build + cmake --install build + tar czf qt_6_11_1_linux_x64.tgz stage + EOF + chmod a+x build.sh + podman run --mount type=bind,source=.,destination=/home/munt \ + --rm \ + ghcr.io/almalinux/8-toolbox /home/munt/build.sh + + - uses: actions/upload-artifact@v7 + name: Upload + with: + path: ${{ github.workspace }}/qt/qt_6_11_1_linux_x64.tgz + archive: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_2/.github/workflows/build-release-packages.yml new/munt-libmt32emu_2_8_3/.github/workflows/build-release-packages.yml --- old/munt-libmt32emu_2_8_2/.github/workflows/build-release-packages.yml 2026-05-24 22:11:28.000000000 +0200 +++ new/munt-libmt32emu_2_8_3/.github/workflows/build-release-packages.yml 2026-06-06 15:58:54.000000000 +0200 @@ -114,3 +114,78 @@ with: path: ${{ github.workspace }}/build/mt32emu-qt-*.deb archive: false + + build-rpms: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Assemble + run: | + cat <<'EOF' >> build.sh + #!/bin/bash + set -e + dnf update -y + dnf install -y gcc-c++ cmake ninja-build rpm-build doctest-devel \ + qt5-qtmultimedia-devel pulseaudio-libs-devel portaudio-devel jack-audio-connection-kit-devel + cd /home/munt + cmake -S mt32emu -B build/mt32emu -G Ninja \ + -D CMAKE_BUILD_TYPE=Release \ + -D libmt32emu_PACKAGE_TYPE=Runtime \ + -D libmt32emu_WITH_VERSION_TAGGING=ON \ + -D libmt32emu_WITH_SYMBOL_VERSIONING=ON + cmake --build build/mt32emu + cd build/mt32emu + ctest -V + cpack -G RPM + cmake -D libmt32emu_PACKAGE_TYPE=Devel . + cpack -G RPM + rpm -i libmt32emu-*.rpm + cd /home/munt + cmake -S mt32emu_smf2wav -B build/mt32emu_smf2wav -G Ninja \ + -D CMAKE_BUILD_TYPE=Release + cmake --build build/mt32emu_smf2wav + cd build/mt32emu_smf2wav + cpack -G RPM + cd /home/munt + cmake -S mt32emu_qt -B build/mt32emu_qt -G Ninja \ + -D CMAKE_BUILD_TYPE=Release \ + -D mt32emu-qt_USE_JACK_DYNAMIC_LOADING=ON \ + -D mt32emu-qt_USE_PULSEAUDIO_DYNAMIC_LOADING=OFF + cmake --build build/mt32emu_qt + cd build/mt32emu_qt + cpack -G RPM + EOF + chmod a+x build.sh + podman run --hostname alma8-toolbox.muntemu.org \ + --mount type=bind,source=.,destination=/home/munt \ + --rm \ + ghcr.io/almalinux/8-toolbox /home/munt/build.sh + + - uses: actions/upload-artifact@v7 + name: Upload libmt32emu-devel + with: + path: ${{ github.workspace }}/build/mt32emu/libmt32emu-devel-*.rpm + archive: false + + - name: Wipe libmt32emu-devel + run: rm build/mt32emu/libmt32emu-devel-*.rpm + + - uses: actions/upload-artifact@v7 + name: Upload libmt32emu + with: + path: ${{ github.workspace }}/build/mt32emu/libmt32emu-*.rpm + archive: false + + - uses: actions/upload-artifact@v7 + name: Upload mt32emu-smf2wav + with: + path: ${{ github.workspace }}/build/mt32emu_smf2wav/mt32emu-smf2wav-*.rpm + archive: false + + - uses: actions/upload-artifact@v7 + name: Upload mt32emu-qt + with: + path: ${{ github.workspace }}/build/mt32emu_qt/mt32emu-qt-*.rpm + archive: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_2/.github/workflows/build-snapshots.yml new/munt-libmt32emu_2_8_3/.github/workflows/build-snapshots.yml --- old/munt-libmt32emu_2_8_2/.github/workflows/build-snapshots.yml 2026-05-24 22:11:28.000000000 +0200 +++ new/munt-libmt32emu_2_8_3/.github/workflows/build-snapshots.yml 2026-06-06 15:58:54.000000000 +0200 @@ -7,107 +7,42 @@ branches: [ "master" ] jobs: - build-ubuntu-snapshot: - runs-on: ubuntu-latest + build-snapshots: + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] defaults: run: shell: bash - working-directory: ${{ github.workspace }} steps: - uses: actions/checkout@v4 - - name: Install dependencies + - name: Prepare build environment + if: runner.os == 'Windows' + run: | + export MINGW64_PATH="/c/msys64/mingw64/bin:/c/msys64/usr/bin" + echo $MINGW64_PATH >> $GITHUB_PATH + echo BUILD_PATH="PATH=$MINGW64_PATH:\$PATH" >> $GITHUB_ENV + + - name: Install Ubuntu dependencies + if: runner.os == 'Linux' 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 + - name: Install macOS homebrew dependencies + if: runner.os == 'macOS' run: | brew update brew install doctest portaudio jack qtmultimedia - - name: Configure + - name: Install Windows MSYS64 dependencies + if: runner.os == 'Windows' 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 @@ -116,28 +51,34 @@ mingw-w64-x86_64-jack2 mingw-w64-x86_64-qt6-multimedia - - name: Configure + - name: Configuration run: > - PATH=$MINGW64_PATH:$PATH - cmake -S . -B build - -G Ninja + ${{ env.BUILD_PATH }} + 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: PATH=$MINGW64_PATH:$PATH cmake --build build + run: ${{ env.BUILD_PATH }} cmake --build build - name: Test working-directory: ${{ github.workspace }}/build - run: PATH=$MINGW64_PATH:$PATH ctest -V + run: ctest -V - name: Package munt monolith working-directory: ${{ github.workspace }}/build - run: cpack -G ZIP + run: > + cpack -G ${{ case( + runner.os == 'Linux', 'DEB', + runner.os == 'macOS', 'TXZ', + 'ZIP' + ) }} - uses: actions/upload-artifact@v7 name: Upload munt with: - path: ${{ github.workspace }}/build/munt-*.zip + path: ${{ github.workspace }}/build/munt-*.${{ case(runner.os == 'Linux', 'deb', runner.os == 'macOS', 'tar.xz', 'zip') }} archive: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_2/cmake/project_data.cmake new/munt-libmt32emu_2_8_3/cmake/project_data.cmake --- old/munt-libmt32emu_2_8_2/cmake/project_data.cmake 2026-05-24 22:11:28.000000000 +0200 +++ new/munt-libmt32emu_2_8_3/cmake/project_data.cmake 2026-06-06 15:58:54.000000000 +0200 @@ -4,5 +4,5 @@ set(munt_VERSION_MAJOR 2) set(munt_VERSION_MINOR 8) -set(munt_VERSION_PATCH 1) +set(munt_VERSION_PATCH 2) 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_2/mt32emu/NEWS.txt new/munt-libmt32emu_2_8_3/mt32emu/NEWS.txt --- old/munt-libmt32emu_2_8_2/mt32emu/NEWS.txt 2026-05-24 22:11:28.000000000 +0200 +++ new/munt-libmt32emu_2_8_3/mt32emu/NEWS.txt 2026-06-06 15:58:54.000000000 +0200 @@ -1,3 +1,14 @@ +2026-06-06: + + 2.8.3 released. + + * Reworked sanity checks for short MIDI messages. It's a continuation of (#134). Apparently, + Windows applications routinely submit garbage in the unused data bytes of packed 32-bit + short messages. Therefore, we now check the used (in the MIDI sense) bytes only. + Additionally, unsupported messages are now better handled and no longer produce misleading + debug output when enabled. (#147) + + 2026-05-24: 2.8.2 released. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_2/mt32emu/cmake/project_data.cmake new/munt-libmt32emu_2_8_3/mt32emu/cmake/project_data.cmake --- old/munt-libmt32emu_2_8_2/mt32emu/cmake/project_data.cmake 2026-05-24 22:11:28.000000000 +0200 +++ new/munt-libmt32emu_2_8_3/mt32emu/cmake/project_data.cmake 2026-06-06 15:58:54.000000000 +0200 @@ -4,5 +4,5 @@ set(libmt32emu_VERSION_MAJOR 2) set(libmt32emu_VERSION_MINOR 8) -set(libmt32emu_VERSION_PATCH 2) +set(libmt32emu_VERSION_PATCH 3) 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_2/mt32emu/src/Synth.cpp new/munt-libmt32emu_2_8_3/mt32emu/src/Synth.cpp --- old/munt-libmt32emu_2_8_2/mt32emu/src/Synth.cpp 2026-05-24 22:11:28.000000000 +0200 +++ new/munt-libmt32emu_2_8_3/mt32emu/src/Synth.cpp 2026-06-06 15:58:54.000000000 +0200 @@ -1160,13 +1160,27 @@ void Synth::playMsgNow(Bit32u msg) { if (!opened) return; + Bit8u command = Bit8u((msg & 0x0000F0) >> 4); + // NOTE: Active sense IS implemented in real hardware. However, realtime processing is clearly out of the library scope. // It is assumed that realtime consumers of the library respond to these MIDI events as appropriate. + if (command == 0x0F) { +#if MT32EMU_MONITOR_MIDI > 0 + printDebug("Unsupported MIDI System Common / Realtime: 0x%08x", msg); +#endif + return; + } + + if (command < 8) { +#if MT32EMU_MONITOR_MIDI > 0 + printDebug("playMsgNow for msg=0x%08x relies on running status; unsupported", msg); +#endif + return; + } - Bit8u command = Bit8u((msg & 0x0000F0) >> 4); Bit8u chan = Bit8u(msg & 0x00000F); Bit8u data1 = Bit8u((msg & 0x00FF00) >> 8); - Bit8u data2 = Bit8u((msg & 0xFF0000) >> 16); + Bit8u data2 = ((command & 0x0E) == 0x0C) ? 0 : Bit8u((msg & 0xFF0000) >> 16); if (data1 > 127 || data2 > 127) { #if MT32EMU_MONITOR_MIDI > 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_2/mt32emu/src/Synth.h new/munt-libmt32emu_2_8_3/mt32emu/src/Synth.h --- old/munt-libmt32emu_2_8_2/mt32emu/src/Synth.h 2026-05-24 22:11:28.000000000 +0200 +++ new/munt-libmt32emu_2_8_3/mt32emu/src/Synth.h 2026-06-06 15:58:54.000000000 +0200 @@ -379,12 +379,14 @@ // Calls from multiple threads must be synchronised, although, no synchronisation is required with the rendering thread. // The methods return false if the MIDI event queue is full and the message cannot be enqueued. - // Enqueues a single short MIDI message to play at specified time. The message must contain a status byte. + // Enqueues a single short MIDI message to play at specified time. The message must contain a status byte and one or two data + // bytes (as appropriate for the MIDI command). MT32EMU_EXPORT bool playMsg(Bit32u msg, Bit32u timestamp); // Enqueues a single well formed System Exclusive MIDI message to play at specified time. MT32EMU_EXPORT bool playSysex(const Bit8u *sysex, Bit32u len, Bit32u timestamp); - // Enqueues a single short MIDI message to be processed ASAP. The message must contain a status byte. + // Enqueues a single short MIDI message to be processed ASAP. The message must contain a status byte and one or two data + // bytes (as appropriate for the MIDI command). MT32EMU_EXPORT bool playMsg(Bit32u msg); // Enqueues a single well formed System Exclusive MIDI message to be processed ASAP. MT32EMU_EXPORT bool playSysex(const Bit8u *sysex, Bit32u len); @@ -394,8 +396,8 @@ // sequential MIDI events, and a sequence of NoteOn and immediately succeeding NoteOff messages is always silent. // A thread that invokes these methods must be explicitly synchronised with the thread performing sample rendering or be the same. - // Sends a short MIDI message to the synth for immediate playback. The message must contain a status byte and two data bytes, - // otherwise it is ignored. + // Sends a short MIDI message to the synth for immediate playback. The message must contain a status byte and one or two data + // bytes (as appropriate for the MIDI command), otherwise it is ignored. // See the WARNING above. MT32EMU_EXPORT void playMsgNow(Bit32u msg); // Sends unpacked short MIDI message to the synth for immediate playback. All the message parameters must be within the supported diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_2/mt32emu/src/c_interface/c_interface.h new/munt-libmt32emu_2_8_3/mt32emu/src/c_interface/c_interface.h --- old/munt-libmt32emu_2_8_2/mt32emu/src/c_interface/c_interface.h 2026-05-24 22:11:28.000000000 +0200 +++ new/munt-libmt32emu_2_8_3/mt32emu/src/c_interface/c_interface.h 2026-06-06 15:58:54.000000000 +0200 @@ -355,12 +355,18 @@ */ MT32EMU_EXPORT void MT32EMU_C_CALL mt32emu_play_short_message_at(mt32emu_const_context context, mt32emu_bit32u message, mt32emu_bit32u timestamp); -/** Enqueues a single short MIDI message to be processed ASAP. The message must contain a status byte. */ +/** + * Enqueues a single short MIDI message to be processed ASAP. The message must contain a status byte and one or two data + * bytes (as appropriate for the MIDI command). + */ MT32EMU_EXPORT mt32emu_return_code MT32EMU_C_CALL mt32emu_play_msg(mt32emu_const_context context, mt32emu_bit32u msg); /** Enqueues a single well formed System Exclusive MIDI message to be processed ASAP. */ MT32EMU_EXPORT mt32emu_return_code MT32EMU_C_CALL mt32emu_play_sysex(mt32emu_const_context context, const mt32emu_bit8u *sysex, mt32emu_bit32u len); -/** Enqueues a single short MIDI message to play at specified time. The message must contain a status byte. */ +/** + * Enqueues a single short MIDI message to play at specified time. The message must contain a status byte and one or two data + * bytes (as appropriate for the MIDI command). + */ MT32EMU_EXPORT mt32emu_return_code MT32EMU_C_CALL mt32emu_play_msg_at(mt32emu_const_context context, mt32emu_bit32u msg, mt32emu_bit32u timestamp); /** Enqueues a single well formed System Exclusive MIDI message to play at specified time. */ MT32EMU_EXPORT mt32emu_return_code MT32EMU_C_CALL mt32emu_play_sysex_at(mt32emu_const_context context, const mt32emu_bit8u *sysex, mt32emu_bit32u len, mt32emu_bit32u timestamp); @@ -372,8 +378,8 @@ */ /** - * Sends a short MIDI message to the synth for immediate playback. The message must contain a status byte and two data bytes, - * otherwise it is ignored. + * Sends a short MIDI message to the synth for immediate playback. The message must contain a status byte and one or two data + * bytes (as appropriate for the MIDI command), otherwise it is ignored. * See the WARNING above. */ MT32EMU_EXPORT void MT32EMU_C_CALL mt32emu_play_msg_now(mt32emu_const_context context, mt32emu_bit32u msg); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_2/mt32emu/src/test/SynthTest.cpp new/munt-libmt32emu_2_8_3/mt32emu/src/test/SynthTest.cpp --- old/munt-libmt32emu_2_8_2/mt32emu/src/test/SynthTest.cpp 2026-05-24 22:11:28.000000000 +0200 +++ new/munt-libmt32emu_2_8_3/mt32emu/src/test/SynthTest.cpp 2026-06-06 15:58:54.000000000 +0200 @@ -462,6 +462,8 @@ CHECK_FALSE(synth.isActive()); + SUBCASE("Unsupported MIDI System Realtime") { synth.playMsgNow(0xFE); } + SUBCASE("Packed message lacking data bytes") { synth.playMsgNow(0xFFFFFF91); } SUBCASE("Unpacked message lacking data bytes") { synth.playMsgOnPart(0, 9, 36, 240); } @@ -475,6 +477,31 @@ CHECK_FALSE(synth.isActive()); } +TEST_CASE("Synth ignores invalid values in unused data bytes of packed short MIDI messages") { + Synth synth; + ROMSet romSet; + romSet.initMT32New(); + openSynth(synth, romSet); + + SUBCASE("Packed message with 2 data bytes and garbage in the most significant byte") { + sendSineWaveSysex(synth, 1); + CHECK_FALSE(synth.isActive()); + synth.playMsgNow(0xFF443691); + CHECK(synth.isActive()); + } + + SUBCASE("Packed message with garbage in the unused data byte") { + Bit8u data[2]; + synth.readMemory(0x00C070, 2, data); + CHECK(data[0] == 0); + CHECK(data[1] == 0); + synth.playMsgNow(0x8856C8); + synth.readMemory(0x00C070, 2, data); + CHECK(data[0] == 1); + CHECK(data[1] == 22); + } +} + TEST_CASE("Synth should set Master Volume via SysEx and override optionally") { Synth synth; ROMSet romSet; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_2/mt32emu_qt/NEWS.txt new/munt-libmt32emu_2_8_3/mt32emu_qt/NEWS.txt --- old/munt-libmt32emu_2_8_2/mt32emu_qt/NEWS.txt 2026-05-24 22:11:28.000000000 +0200 +++ new/munt-libmt32emu_2_8_3/mt32emu_qt/NEWS.txt 2026-06-06 15:58:54.000000000 +0200 @@ -1,3 +1,9 @@ +2026-06-06: + + 1.12.2 released. + + * Updated mt32emu library to version 2.8.3. + 2026-05-24: 1.12.1 released. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_2/mt32emu_qt/cmake/project_data.cmake new/munt-libmt32emu_2_8_3/mt32emu_qt/cmake/project_data.cmake --- old/munt-libmt32emu_2_8_2/mt32emu_qt/cmake/project_data.cmake 2026-05-24 22:11:28.000000000 +0200 +++ new/munt-libmt32emu_2_8_3/mt32emu_qt/cmake/project_data.cmake 2026-06-06 15:58:54.000000000 +0200 @@ -4,5 +4,5 @@ set(mt32emu_qt_VERSION_MAJOR 1) set(mt32emu_qt_VERSION_MINOR 12) -set(mt32emu_qt_VERSION_PATCH 1) +set(mt32emu_qt_VERSION_PATCH 2) 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_2/mt32emu_smf2wav/cmake/project_data.cmake new/munt-libmt32emu_2_8_3/mt32emu_smf2wav/cmake/project_data.cmake --- old/munt-libmt32emu_2_8_2/mt32emu_smf2wav/cmake/project_data.cmake 2026-05-24 22:11:28.000000000 +0200 +++ new/munt-libmt32emu_2_8_3/mt32emu_smf2wav/cmake/project_data.cmake 2026-06-06 15:58:54.000000000 +0200 @@ -4,5 +4,5 @@ set(mt32emu_smf2wav_VERSION_MAJOR 1) set(mt32emu_smf2wav_VERSION_MINOR 9) -set(mt32emu_smf2wav_VERSION_PATCH 2) +set(mt32emu_smf2wav_VERSION_PATCH 3) 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_2/mt32emu_win32drv/NEWS.txt new/munt-libmt32emu_2_8_3/mt32emu_win32drv/NEWS.txt --- old/munt-libmt32emu_2_8_2/mt32emu_win32drv/NEWS.txt 2026-05-24 22:11:28.000000000 +0200 +++ new/munt-libmt32emu_2_8_3/mt32emu_win32drv/NEWS.txt 2026-06-06 15:58:54.000000000 +0200 @@ -1,3 +1,9 @@ +2026-06-06: + + 1.9.2 released. + + * Updated mt32emu library to version 2.8.3. + 2026-05-24: 1.9.1 released. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/munt-libmt32emu_2_8_2/mt32emu_win32drv/cmake/project_data.cmake new/munt-libmt32emu_2_8_3/mt32emu_win32drv/cmake/project_data.cmake --- old/munt-libmt32emu_2_8_2/mt32emu_win32drv/cmake/project_data.cmake 2026-05-24 22:11:28.000000000 +0200 +++ new/munt-libmt32emu_2_8_3/mt32emu_win32drv/cmake/project_data.cmake 2026-06-06 15:58:54.000000000 +0200 @@ -4,5 +4,5 @@ set(mt32emu_win32drv_VERSION_MAJOR 1) set(mt32emu_win32drv_VERSION_MINOR 9) -set(mt32emu_win32drv_VERSION_PATCH 1) +set(mt32emu_win32drv_VERSION_PATCH 2) set(mt32emu_win32drv_VERSION "${mt32emu_win32drv_VERSION_MAJOR}.${mt32emu_win32drv_VERSION_MINOR}.${mt32emu_win32drv_VERSION_PATCH}")
