Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package fluidsynth for openSUSE:Factory 
checked in at 2025-04-16 20:37:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fluidsynth (Old)
 and      /work/SRC/openSUSE:Factory/.fluidsynth.new.30101 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "fluidsynth"

Wed Apr 16 20:37:58 2025 rev:78 rq:1269596 version:2.4.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/fluidsynth/fluidsynth.changes    2025-03-18 
17:41:21.349676757 +0100
+++ /work/SRC/openSUSE:Factory/.fluidsynth.new.30101/fluidsynth.changes 
2025-04-20 19:52:29.410176371 +0200
@@ -1,0 +2,16 @@
+Tue Apr 15 10:43:26 UTC 2025 - Martin Hauke <mar...@gmx.de>
+
+- Update to version 2.4.5
+  * Fix SDL3 intercepting signals, causing CTRL+C to not quit
+    fluidsynth.
+  * Fix a few flaws in the AWE32 NRPN implementation.
+  * A regression introduced in 2.4.4 broke drum preset selection
+    for XG MIDIs.
+  * Fix fluidsynth's systemd user daemon being unable to create
+    lock file on some distros.
+  * Fix fluidsynth ignoring initialFilterFc generator limits.
+  * A regression introduced in 2.3.6 prevented SF2 NRPN messages
+    from being processed correctly.
+- Use ldconfig_scriptlets macro.
+
+-------------------------------------------------------------------

Old:
----
  fluidsynth-2.4.4.tar.gz

New:
----
  fluidsynth-2.4.5.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ fluidsynth.spec ++++++
--- /var/tmp/diff_new_pack.4Qqpvh/_old  2025-04-20 19:52:29.926197846 +0200
+++ /var/tmp/diff_new_pack.4Qqpvh/_new  2025-04-20 19:52:29.926197846 +0200
@@ -18,7 +18,7 @@
 
 %define sover   3
 Name:           fluidsynth
-Version:        2.4.4
+Version:        2.4.5
 Release:        0
 Summary:        A Real-Time Software Synthesizer That Uses Soundfont(tm)
 License:        LGPL-2.1-or-later
@@ -102,8 +102,7 @@
 %postun
 %systemd_user_postun %{name}.service
 
-%post -n libfluidsynth%{sover} -p /sbin/ldconfig
-%postun -n libfluidsynth%{sover} -p /sbin/ldconfig
+%ldconfig_scriptlets -n libfluidsynth%{sover}
 
 %files
 %license LICENSE

++++++ fluidsynth-2.4.4.tar.gz -> fluidsynth-2.4.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.4/.azure/azure-pipelines-win.yml 
new/fluidsynth-2.4.5/.azure/azure-pipelines-win.yml
--- old/fluidsynth-2.4.4/.azure/azure-pipelines-win.yml 2025-03-16 
18:51:19.000000000 +0100
+++ new/fluidsynth-2.4.5/.azure/azure-pipelines-win.yml 2025-04-13 
14:23:24.000000000 +0200
@@ -17,7 +17,7 @@
       - 'README.md'
 
 variables:
-    sdl3-url: 
'https://github.com/libsdl-org/SDL/releases/download/release-3.2.0/SDL3-devel-3.2.0-VC.zip'
+    sdl3-url: 
'https://github.com/libsdl-org/SDL/releases/download/release-3.2.10/SDL3-devel-3.2.10-VC.zip'
       
 jobs:
 - job: WindowsXP
@@ -66,23 +66,30 @@
         7z x -aos -- libsndfile-dev.zip > NUL || exit -1
         7z x -aos -- sdl3-dev.zip > NUL || exit -1
         rm *.zip
-        cd SDL3-*
-        cp -rf * ..
-        cd ..
-        rm -rf SDL3-*
         cd libsndfile-*
         cp -rf * ..
         cd ..
         rm -rf libsndfile-*
         cd $(Build.ArtifactStagingDirectory)\libinstpatch-XP-$(platform)
         cp -rf * d:\deps\
+        REM this will create deps\bin
         mv -f * ..
         cd ..
         rmdir $(Build.ArtifactStagingDirectory)\libinstpatch-XP-$(platform)\
+        cd d:\deps\SDL3-*
+        REM this is for public binary distribution
+        COPY lib\$(platformAlt)\SDL3.dll $(Build.ArtifactStagingDirectory)\bin\
+        REM this is for unit test execution
+        COPY lib\$(platformAlt)\SDL3* d:\deps\bin
+        cp -rf * ..
+        cd ..
+        rm -rf SDL3-*
         cd d:\deps
         dir
         cd lib
         dir
+        cd ..\bin
+        dir
         DEL /F C:\Strawberry\perl\bin\pkg-config.bat
       displayName: 'Prerequisites'
     - script: |
@@ -96,7 +103,6 @@
     - script: |
         @ECHO ON
         SET "PATH=d:\deps\bin;%PATH%"
-        COPY d:\deps\lib\$(platformAlt)\SDL3* d:\deps\bin
         cd build || exit -1
         cmake --build . --config Release --target check || exit -1
       displayName: 'Execute Unittests'
@@ -188,24 +194,25 @@
 
 - job: WindowsMinGW
   variables:
-    artifact-prefix: "fluidsynth-mingw"
     sdl3-subdir: 'x86_64-w64-mingw32'
   strategy:
     matrix:
       x64:
         CMAKE_FLAGS: ""
+        artifact-prefix: "fluidsynth-mingw"
         platform: x64
         gtk-bundle: $(gtk-bundle-x64)
         libsndfile-url: $(libsndfile-url-x64)
         mingw-url: $(mingw-url-x64)
-        sdl3-url: 
'https://github.com/libsdl-org/SDL/releases/download/release-3.2.0/SDL3-devel-3.2.0-mingw.zip'
+        sdl3-url: 
'https://github.com/libsdl-org/SDL/releases/download/release-3.2.10/SDL3-devel-3.2.10-mingw.tar.gz'
       x64-static:
         CMAKE_FLAGS: '-DBUILD_SHARED_LIBS=0'
+        artifact-prefix: "fluidsynth-mingw-static"
         platform: x64
         gtk-bundle: $(gtk-bundle-x64)
         libsndfile-url: $(libsndfile-url-x64)
         mingw-url: $(mingw-url-x64)
-        sdl3-url: 
'https://github.com/libsdl-org/SDL/releases/download/release-3.2.0/SDL3-devel-3.2.0-mingw.zip'
+        sdl3-url: 
'https://github.com/libsdl-org/SDL/releases/download/release-3.2.10/SDL3-devel-3.2.10-mingw.tar.gz'
   pool:
     vmImage: 'windows-2019'
   steps:
@@ -225,12 +232,12 @@
         curl -LfsS -o gtk-bundle-dev.zip $(gtk-bundle) || exit -1
         curl -LfsS -o libsndfile-dev.zip $(libsndfile-url) || exit -1
         curl -LfsS -o mingw.zip $(mingw-url) || exit -1
-        curl -LfsS -o sdl3.zip $(sdl3-url) || exit -1
+        curl -LfsS -o sdl3.tar.gz $(sdl3-url) || exit -1
         7z x -aos -- gtk-bundle-dev.zip > NUL || exit -1
         7z x -aos -- libsndfile-dev.zip > NUL || exit -1
         7z x -aos -- mingw.zip > NUL || exit -1
-        7z x -aos -- sdl3.zip > NUL || exit -1
-        rm *.zip
+        tar xzf sdl3.tar.gz > NUL || exit -1
+        rm *.zip *.tar.gz
         cd SDL3-*
         cp -rf * ..
         cd ..
@@ -282,6 +289,7 @@
         xcopy d:\deps\bin\libgomp-1.dll $(Build.ArtifactStagingDirectory)\bin
         xcopy d:\deps\bin\libstdc++-6.dll $(Build.ArtifactStagingDirectory)\bin
         xcopy d:\deps\bin\libwinpthread-1.dll 
$(Build.ArtifactStagingDirectory)\bin
+        xcopy d:\deps\$(sdl3-subdir)\bin\SDL3.dll 
$(Build.ArtifactStagingDirectory)\bin
         REM xcopy test $(Build.ArtifactStagingDirectory)\bin /s
         del $(Build.ArtifactStagingDirectory)\bin\concrt*.dll
         del $(Build.ArtifactStagingDirectory)\bin\vcruntime*.dll
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.4/.cirrus.yml 
new/fluidsynth-2.4.5/.cirrus.yml
--- old/fluidsynth-2.4.4/.cirrus.yml    2025-03-16 18:51:19.000000000 +0100
+++ new/fluidsynth-2.4.5/.cirrus.yml    2025-04-13 14:23:24.000000000 +0200
@@ -3,7 +3,7 @@
     name: FreeBSD
     freebsd_instance:
         matrix:
-            image_family: freebsd-14-1
+            image_family: freebsd-14-2
             image_family: freebsd-13-4
 
     install_script: pwd && ls -la && pkg update --force && pkg install -y 
cmake glib alsa-lib ladspa portaudio pulseaudio pkgconf sdl2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.4/.github/workflows/linux.yml 
new/fluidsynth-2.4.5/.github/workflows/linux.yml
--- old/fluidsynth-2.4.4/.github/workflows/linux.yml    2025-03-16 
18:51:19.000000000 +0100
+++ new/fluidsynth-2.4.5/.github/workflows/linux.yml    2025-04-13 
14:23:24.000000000 +0200
@@ -27,27 +27,18 @@
     # well on Windows or Mac.  You can convert this to a matrix build if you 
need
     # cross-platform coverage.
     # See: 
https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     strategy:
       matrix:
         CC: [""]
         CXX: [""]
         CMAKE_FLAGS: ["-Denable-profiling=1","-Denable-floats=1 
-Denable-profiling=1","-Denable-floats=1","-Denable-trap-on-fpe=1","-Denable-fpe-check=1","-Denable-ipv6=0","-Denable-network=0","-Denable-aufile=0","-DBUILD_SHARED_LIBS=0","-Denable-ubsan=1
 -Denable-debug=1", "-Denable-debug=1 -DCMAKE_C_FLAGS_DEBUG=-fuse-ld=gold"]
         include:
-          - CC: "clang-7"
-            CXX: "clang++-7"
-            CMAKE_FLAGS: ""
-          - CC: "clang-8"
-            CXX: "clang++-8"
-            CMAKE_FLAGS: ""
-          - CC: "clang-10"
-            CXX: "clang++-10"
-            CMAKE_FLAGS: ""
           - CC: "clang-12"
             CXX: "clang++-12"
             CMAKE_FLAGS: ""
-          - CC: "clang-10"
-            CXX: "clang++-10"
+          - CC: "clang-12"
+            CXX: "clang++-12"
             CMAKE_FLAGS: "-DBUILD_SHARED_LIBS=0"
 # clang9 is covered by openSUSE Leap 15.2
 # clang11 is covered by openSUSE Leap 15.3
@@ -64,15 +55,10 @@
     - name: Install Dependencies
       run: |
         sudo apt-get -yq --no-install-suggests --no-install-recommends install 
\
-          clang-7 \
-          clang-8 \
-          clang-10 \
           clang-12 \
           clang-tidy \
           cmake \
           cmake-data \
-          g++-7 \
-          g++-8 \
           ladspa-sdk \
           libasound2-dev \
           libdbus-1-dev \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.4/CMakeLists.txt 
new/fluidsynth-2.4.5/CMakeLists.txt
--- old/fluidsynth-2.4.4/CMakeLists.txt 2025-03-16 18:51:19.000000000 +0100
+++ new/fluidsynth-2.4.5/CMakeLists.txt 2025-04-13 14:23:24.000000000 +0200
@@ -47,7 +47,7 @@
 # FluidSynth package version
 set ( FLUIDSYNTH_VERSION_MAJOR 2 )
 set ( FLUIDSYNTH_VERSION_MINOR 4 )
-set ( FLUIDSYNTH_VERSION_MICRO 4 )
+set ( FLUIDSYNTH_VERSION_MICRO 5 )
 set ( VERSION 
"${FLUIDSYNTH_VERSION_MAJOR}.${FLUIDSYNTH_VERSION_MINOR}.${FLUIDSYNTH_VERSION_MICRO}"
 )
 set ( FLUIDSYNTH_VERSION ${VERSION} )
 
@@ -62,7 +62,7 @@
 # This is not exactly the same algorithm as the libtool one, but the results 
are the same.
 set ( LIB_VERSION_CURRENT 3 )
 set ( LIB_VERSION_AGE 3 )
-set ( LIB_VERSION_REVISION 4 )
+set ( LIB_VERSION_REVISION 5 )
 set ( LIB_VERSION_INFO
       "${LIB_VERSION_CURRENT}.${LIB_VERSION_AGE}.${LIB_VERSION_REVISION}" )
 
@@ -679,7 +679,7 @@
             message ( STATUS "Found SDL2 version ${SDL2_VERSION}, but the 
minimum required is 2.0.4" )
         else ( SDL2_VERSION VERSION_LESS "2.0.4" )
             message ( STATUS "Found SDL2: ${SDL2_LIBRARIES} (version: 
${SDL2_VERSION})" )
-            set ( SDL2_SUPPORT TRUE )
+            set ( SDL2_SUPPORT ${SDL2_FOUND} )
             list ( APPEND PC_REQUIRES_PRIV "sdl2")
         endif ( SDL2_VERSION VERSION_LESS "2.0.4" )
     else ( SDL2_FOUND )
@@ -692,7 +692,7 @@
     find_package ( SDL3 QUIET CONFIG COMPONENTS SDL3 )
     if ( SDL3_FOUND )
         message ( STATUS "Found SDL3: ${SDL3_LIBRARIES} (version: 
${SDL3_VERSION})" )
-        set ( SDL3_SUPPORT TRUE )
+        set ( SDL3_SUPPORT ${SDL3_FOUND} )
         list ( APPEND PC_REQUIRES_PRIV "sdl3")
     endif ( SDL3_FOUND )
 endif ( enable-sdl3 )
@@ -917,6 +917,9 @@
         configure_file ( fluidsynth.service.in
         ${FluidSynth_BINARY_DIR}/fluidsynth.service @ONLY )
 
+        configure_file ( fluidsynth.tmpfiles.in
+        ${FluidSynth_BINARY_DIR}/fluidsynth.tmpfiles @ONLY )
+
         configure_file ( fluidsynth.conf.in
         ${FluidSynth_BINARY_DIR}/fluidsynth.conf @ONLY )
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.4/contrib/fluidsynth.spec 
new/fluidsynth-2.4.5/contrib/fluidsynth.spec
--- old/fluidsynth-2.4.4/contrib/fluidsynth.spec        2025-03-16 
18:51:19.000000000 +0100
+++ new/fluidsynth-2.4.5/contrib/fluidsynth.spec        2025-04-13 
14:23:24.000000000 +0200
@@ -95,9 +95,10 @@
 
 %if 0%{?suse_version}
 
-# manually install systemd service files
+# manually install systemd files
 install -Dm 644 build/fluidsynth.conf 
%{buildroot}%{_fillupdir}/sysconfig.%{name}
 install -Dm 644 build/fluidsynth.service 
%{buildroot}%{_unitdir}/%{name}.service
+install -Dm 644 build/fluidsynth.tmpfiles 
%{buildroot}%{_tmpfilesdir}/%{name}.conf
 install -d %{buildroot}%{_sbindir}
 ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rc%{name}
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.4/doc/fluidsettings.xml 
new/fluidsynth-2.4.5/doc/fluidsettings.xml
--- old/fluidsynth-2.4.4/doc/fluidsettings.xml  2025-03-16 18:51:19.000000000 
+0100
+++ new/fluidsynth-2.4.5/doc/fluidsettings.xml  2025-04-13 14:23:24.000000000 
+0200
@@ -181,7 +181,7 @@
                     <li>gs: (default) CC0 becomes the bank number, CC32 is 
ignored.</li>
                     <li>gm: ignores CC0 and CC32 messages.</li>
                     <li>mma: bank is calculated as CC0*128+CC32.</li>
-                    <li>xg: If CC0 is equal to 120, 126, or 127 then channel 
is set to drum and the bank number is set to 128 (CC32 is ignored). Otherwise 
the channel is set to melodic and CC32 is the bank number. Note that you need 
fluidsynth &gt;=2.3.5 for this to work correctly, previous versions behaved 
incorrectly.</li>
+                    <li>xg: If CC0 is equal to 120, 126, or 127 then channel 
is set to drum mode and the bank number is set to 128. CC32 is ignored in this 
case. If CC0 has a different value, the channel is set to melodic and CC32 
becomes the bank number. Note that before fluidsynth 2.3.5 the logic for CC0 
was broken.</li>
                 </ul>
             </desc>
         </setting>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.4/doc/fluidsynth-v20-devdoc.txt 
new/fluidsynth-2.4.5/doc/fluidsynth-v20-devdoc.txt
--- old/fluidsynth-2.4.4/doc/fluidsynth-v20-devdoc.txt  2025-03-16 
18:51:19.000000000 +0100
+++ new/fluidsynth-2.4.5/doc/fluidsynth-v20-devdoc.txt  2025-04-13 
14:23:24.000000000 +0200
@@ -8,8 +8,8 @@
 \author David Henningsson
 \author Tom Moebert
 \author Copyright &copy; 2003-2025 Peter Hanappe, Conrad Berhörster, Antoine 
Schmitt, Pedro López-Cabanillas, Josh Green, David Henningsson, Tom Moebert
-\version Revision 2.4.4
-\date 2025-03-15
+\version Revision 2.4.5
+\date 2025-04-12
 
 All the source code examples in this document are in the public domain; you 
can use them as you please. This document is licensed under the Creative 
Commons Attribution-Share Alike 3.0 Unported License. To view a copy of this 
license, visit https://creativecommons.org/licenses/by-sa/3.0/ . The FluidSynth 
library is distributed under the GNU Lesser General Public License. A copy of 
the GNU Lesser General Public License is contained in the FluidSynth package; 
if not, visit https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt or write 
to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
MA 02110-1301 USA.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.4/fluidsynth.service.in 
new/fluidsynth-2.4.5/fluidsynth.service.in
--- old/fluidsynth-2.4.4/fluidsynth.service.in  2025-03-16 18:51:19.000000000 
+0100
+++ new/fluidsynth-2.4.5/fluidsynth.service.in  2025-04-13 14:23:24.000000000 
+0200
@@ -5,7 +5,7 @@
 After=pipewire.service pulseaudio.service
 Wants=pipewire.service pulseaudio.service
 # If you need more than one instance, use `systemctl edit` to override this:
-ConditionPathExists=!/run/lock/fluidsynth.lock
+ConditionPathExists=!/run/lock/fluidsynth/fluidsynth.lock
 ConditionUser=!@system
 
 [Service]
@@ -27,8 +27,8 @@
 EnvironmentFile=@FLUID_DAEMON_ENV_FILE@
 EnvironmentFile=-%h/.config/fluidsynth
 ExecStart=@CMAKE_INSTALL_FULL_BINDIR@/fluidsynth -is $OTHER_OPTS $SOUND_FONT
-ExecStartPre=touch /run/lock/fluidsynth.lock
-ExecStopPost=rm -f /run/lock/fluidsynth.lock
+ExecStartPre=touch /run/lock/fluidsynth/fluidsynth.lock
+ExecStopPost=rm -f /run/lock/fluidsynth/fluidsynth.lock
 
 [Install]
 WantedBy=default.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.4/fluidsynth.tmpfiles.in 
new/fluidsynth-2.4.5/fluidsynth.tmpfiles.in
--- old/fluidsynth-2.4.4/fluidsynth.tmpfiles.in 1970-01-01 01:00:00.000000000 
+0100
+++ new/fluidsynth-2.4.5/fluidsynth.tmpfiles.in 2025-04-13 14:23:24.000000000 
+0200
@@ -0,0 +1 @@
+d /run/lock/fluidsynth 0777 root root
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.4/src/drivers/fluid_sdl3.c 
new/fluidsynth-2.4.5/src/drivers/fluid_sdl3.c
--- old/fluidsynth-2.4.4/src/drivers/fluid_sdl3.c       2025-03-16 
18:51:19.000000000 +0100
+++ new/fluidsynth-2.4.5/src/drivers/fluid_sdl3.c       2025-04-13 
14:23:24.000000000 +0200
@@ -199,15 +199,9 @@
     fluid_settings_register_str(settings, "audio.sdl3.device", "default", 0);
     fluid_settings_add_option(settings, "audio.sdl3.device", "default");
 
-    if(!SDL_InitSubSystem(SDL_INIT_AUDIO))
-    {
-        FLUID_LOG(FLUID_WARN, "SDL3 subsystem not initialized, SDL3 audio 
driver won't be usable");
-        return;
-    }
-
     if(!SDL_WasInit(SDL_INIT_AUDIO))
     {
-        FLUID_LOG(FLUID_WARN, "SDL3 not initialized, SDL3 audio driver won't 
be usable");
+        FLUID_LOG(FLUID_WARN, "SDL3 not initialized, SDL3 audio driver won't 
be usable. Have you called SDL_Init(SDL_INIT_AUDIO) ?");
         return;
     }
 
@@ -308,16 +302,9 @@
     char *device;
     const char *dev_name;
 
-    /* Check if SDL library has been started */
-    if(!SDL_InitSubSystem(SDL_INIT_AUDIO))
-    {
-        FLUID_LOG(FLUID_WARN, "SDL3 subsystem not initialized, SDL3 audio 
driver won't be usable");
-        return NULL;
-    }
-
     if(!SDL_WasInit(SDL_INIT_AUDIO))
     {
-        FLUID_LOG(FLUID_ERR, "Failed to create SDL3 audio driver, because the 
audio subsystem of SDL3 is not initialized.");
+        FLUID_LOG(FLUID_ERR, "Failed to create SDL3 audio driver, because the 
audio subsystem of SDL3 is not initialized. Have you called 
SDL_Init(SDL_INIT_AUDIO) ?");
         return NULL;
     }
 
@@ -474,10 +461,7 @@
 
         FLUID_FREE(dev->render_buf);
         FLUID_FREE(dev);
-
-        SDL_QuitSubSystem(SDL_INIT_AUDIO);
     }
-
 }
 
 #endif /* SDL3_SUPPORT */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.4/src/fluidsynth.c 
new/fluidsynth-2.4.5/src/fluidsynth.c
--- old/fluidsynth-2.4.4/src/fluidsynth.c       2025-03-16 18:51:19.000000000 
+0100
+++ new/fluidsynth-2.4.5/src/fluidsynth.c       2025-04-13 14:23:24.000000000 
+0200
@@ -35,10 +35,12 @@
 
 #if SDL3_SUPPORT
 #include <SDL3/SDL.h>
+#define SDL_OK 1
 #endif
 
 #if SDL2_SUPPORT
 #include <SDL.h>
+#define SDL_OK 0
 #endif
 
 #if PIPEWIRE_SUPPORT
@@ -400,16 +402,23 @@
     }
 #endif
 
-#if SDL2_SUPPORT
+#if SDL2_SUPPORT || SDL3_SUPPORT
     // Tell SDL that it shouldn't intercept signals, otherwise SIGINT and 
SIGTERM won't quit fluidsynth
-    SDL_SetHint(SDL_HINT_NO_SIGNAL_HANDLERS, "1");
-    if(SDL_Init(SDL_INIT_AUDIO) != 0)
+    i = SDL_SetHint(SDL_HINT_NO_SIGNAL_HANDLERS, "1");
+    if(i != SDL_OK)
+    {
+        fprintf(stderr, "Warning: Unable disable SDL3 signal handlers: %s\n", 
SDL_GetError());
+    }
+    if(SDL_Init(SDL_INIT_AUDIO) != SDL_OK)
     {
-        fprintf(stderr, "Warning: Unable to initialize SDL2 Audio: %s", 
SDL_GetError());
+        fprintf(stderr, "Warning: Unable to initialize SDL3 Audio: %s\n", 
SDL_GetError());
     }
     else
     {
-        atexit(SDL_Quit);
+        if(atexit(SDL_Quit))
+        {
+            fprintf(stderr, "Warning: Unable register SDL_Quit exit handler");
+        }
     }
 #endif
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.4/src/rvoice/fluid_iir_filter.cpp 
new/fluidsynth-2.4.5/src/rvoice/fluid_iir_filter.cpp
--- old/fluidsynth-2.4.4/src/rvoice/fluid_iir_filter.cpp        2025-03-16 
18:51:19.000000000 +0100
+++ new/fluidsynth-2.4.5/src/rvoice/fluid_iir_filter.cpp        2025-04-13 
14:23:24.000000000 +0200
@@ -32,7 +32,7 @@
     const IIR_COEFF_T period = (IIR_COEFF_T)(2.0 * M_PI / sample_rate);
     for(int fres_cents = FRES_MIN, i=0; fres_cents <= FRES_MAX; fres_cents += 
CENTS_STEP, i++)
     {
-        fluid_real_t fres = fluid_ct2hz(fres_cents);
+        IIR_COEFF_T fres = 
static_cast<IIR_COEFF_T>(fluid_ct2hz(static_cast<fluid_real_t>(fres_cents)));
         IIR_COEFF_T omega = period * fres;
         IIR_COEFF_T sin_coeff = std::sin(omega);
         IIR_COEFF_T cos_coeff = std::cos(omega);
@@ -62,7 +62,7 @@
      * into account for both significant frequency relocation and for
      * bandwidth readjustment'. */
 
-    unsigned tab_idx = (fres - FRES_MIN) / CENTS_STEP;
+    unsigned tab_idx = (static_cast<unsigned>(fres) - FRES_MIN) / CENTS_STEP;
     R sin_coeff = sincos_table[tab_idx].sin;
     R cos_coeff = sincos_table[tab_idx].cos;
     R alpha_coeff = sin_coeff / (2.0f * q);
@@ -168,21 +168,21 @@
         fluid_real_t dsp_hist2 = iir_filter->hist2;
 
         /* IIR filter coefficients */
-        float dsp_a1 = iir_filter->a1;
-        float dsp_a2 = iir_filter->a2;
-        float dsp_b02 = iir_filter->b02;
-        float dsp_b1 = iir_filter->b1;
+        IIR_COEFF_T dsp_a1 = iir_filter->a1;
+        IIR_COEFF_T dsp_a2 = iir_filter->a2;
+        IIR_COEFF_T dsp_b02 = iir_filter->b02;
+        IIR_COEFF_T dsp_b1 = iir_filter->b1;
 
         int fres_incr_count = iir_filter->fres_incr_count;
         int q_incr_count = iir_filter->q_incr_count;
         
         fluid_real_t dsp_amp = iir_filter->amp;
         fluid_real_t dsp_amp_incr = iir_filter->amp_incr;
-        float fres = iir_filter->last_fres;
-        float q = iir_filter->last_q;
+        IIR_COEFF_T fres = static_cast<IIR_COEFF_T>(iir_filter->last_fres);
+        IIR_COEFF_T q = static_cast<IIR_COEFF_T>(iir_filter->last_q);
         
-        const float fres_incr = iir_filter->fres_incr;
-        const float q_incr = iir_filter->q_incr;
+        const IIR_COEFF_T fres_incr = 
static_cast<IIR_COEFF_T>(iir_filter->fres_incr);
+        const IIR_COEFF_T q_incr = 
static_cast<IIR_COEFF_T>(iir_filter->q_incr);
 
         /* filter (implement the voice filter according to SoundFont standard) 
*/
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.4/src/rvoice/fluid_iir_filter.h 
new/fluidsynth-2.4.5/src/rvoice/fluid_iir_filter.h
--- old/fluidsynth-2.4.4/src/rvoice/fluid_iir_filter.h  2025-03-16 
18:51:19.000000000 +0100
+++ new/fluidsynth-2.4.5/src/rvoice/fluid_iir_filter.h  2025-04-13 
14:23:24.000000000 +0200
@@ -56,10 +56,10 @@
     /* filter coefficients */
     /* The coefficients are normalized to a0. */
     /* b0 and b2 are identical => b02 */
-    float b02;             /* b0 / a0 */
-    float b1;              /* b1 / a0 */
-    float a1;              /* a0 / a0 */
-    float a2;              /* a1 / a0 */
+    IIR_COEFF_T b02;             /* b0 / a0 */
+    IIR_COEFF_T b1;              /* b1 / a0 */
+    IIR_COEFF_T a1;              /* a0 / a0 */
+    IIR_COEFF_T a2;              /* a1 / a0 */
 
     fluid_real_t hist1, hist2;      /* Sample history for the IIR filter */
     int filter_startup;             /* Flag: If set, the filter parameters 
will be set directly. Else it changes smoothly. */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.4/src/synth/fluid_chan.c 
new/fluidsynth-2.4.5/src/synth/fluid_chan.c
--- old/fluidsynth-2.4.4/src/synth/fluid_chan.c 2025-03-16 18:51:19.000000000 
+0100
+++ new/fluidsynth-2.4.5/src/synth/fluid_chan.c 2025-04-13 14:23:24.000000000 
+0200
@@ -131,9 +131,6 @@
         chan->override_gen_default[i].flags = GEN_UNUSED;
         chan->override_gen_default[i].val = 0.0f;
     }
-    // Not all MIDIs initialize the IIR filter coefficient, e.g. Uplift.mid.
-    // A default value is not documented, hence I'm assuming zero here.
-    chan->awe32_filter_coeff = 0;
 
     if(is_all_ctrl_off)
     {
@@ -297,8 +294,7 @@
 
     style = chan->synth->bank_select;
 
-    if(style == FLUID_BANK_STYLE_GM ||
-            style == FLUID_BANK_STYLE_GS)
+    if(style == FLUID_BANK_STYLE_GM || style == FLUID_BANK_STYLE_GS)
     {
         return;    /* ignored */
     }
@@ -307,6 +303,10 @@
 
     if(style == FLUID_BANK_STYLE_XG)
     {
+        if(chan->channel_type == CHANNEL_TYPE_DRUM)
+        {
+            return; // bankLSB is ignored for drum channels
+        }
         newval = (oldval & ~BANK_MASKVAL) | (banklsb << BANK_SHIFTVAL);
     }
     else /* style == FLUID_BANK_STYLE_MMA */
@@ -324,6 +324,7 @@
     int oldval, newval, style;
 
     style = chan->synth->bank_select;
+    oldval = chan->sfont_bank_prog;
 
     if(style == FLUID_BANK_STYLE_XG)
     {
@@ -331,17 +332,21 @@
         /* The number "120" was based on several keyboards having drums at 120 
- 127,
            reference: 
https://lists.nongnu.org/archive/html/fluid-dev/2011-02/msg00003.html */
         chan->channel_type = (120 == bankmsb || 126 == bankmsb || 127 == 
bankmsb) ? CHANNEL_TYPE_DRUM : CHANNEL_TYPE_MELODIC;
-        return;
-    }
+        if(chan->channel_type == CHANNEL_TYPE_MELODIC)
+        {
+            // bankMSB is ignored for meldodic channels
+            return;
+        }
 
-    if(style == FLUID_BANK_STYLE_GM )
+        // ...but for drum channels, hardcode SF2 drum bank 128. Ideally, we 
should use bankMSB as bank number.
+        // But we'd need to ensure that it's not a melodic preset, see #1524.
+        newval = (oldval & ~BANK_MASKVAL) | (128 << BANK_SHIFTVAL);
+    }
+    else if(style == FLUID_BANK_STYLE_GM )
     {
         return;    /* ignored */
     }
-
-    oldval = chan->sfont_bank_prog;
-
-    if(style == FLUID_BANK_STYLE_GS)
+    else if(style == FLUID_BANK_STYLE_GS)
     {
         if(chan->channel_type == CHANNEL_TYPE_DRUM)
         {
@@ -355,7 +360,6 @@
     }
 
     chan->sfont_bank_prog = newval;
-
 }
 
 /* Get SoundFont ID, MIDI bank and/or program.  Use NULL to ignore a value. */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.4/src/synth/fluid_chan.h 
new/fluidsynth-2.4.5/src/synth/fluid_chan.h
--- old/fluidsynth-2.4.4/src/synth/fluid_chan.h 2025-03-16 18:51:19.000000000 
+0100
+++ new/fluidsynth-2.4.5/src/synth/fluid_chan.h 2025-04-13 14:23:24.000000000 
+0200
@@ -124,8 +124,6 @@
     /* NRPN system */
     enum fluid_gen_type nrpn_select;      /* Generator ID of SoundFont NRPN 
message */
     char nrpn_active;      /* 1 if data entry CCs are for NRPN, 0 if RPN */
-
-    char awe32_filter_coeff;
     
     /* The values of the generators, set by NRPN messages, or by
      * fluid_synth_set_gen(), are cached in the channel so they can be
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.4/src/synth/fluid_mod.c 
new/fluidsynth-2.4.5/src/synth/fluid_mod.c
--- old/fluidsynth-2.4.4/src/synth/fluid_mod.c  2025-03-16 18:51:19.000000000 
+0100
+++ new/fluidsynth-2.4.5/src/synth/fluid_mod.c  2025-04-13 14:23:24.000000000 
+0200
@@ -635,7 +635,7 @@
     static const char invalid_cc_src[] =
         "Invalid modulator, using CC source %s.src%d=%d";
     static const char src1_is_none[] =
-        "Modulator with source 1 none %s.src1=%d";
+        "Modulator with source 1 set to none %s.src1=%d";
 
     /* checks valid non cc sources */
     if(!fluid_mod_check_non_cc_source(mod, 1)) /* check src1 */
@@ -649,12 +649,9 @@
     }
 
     /*
-      When src1 is non CC source FLUID_MOD_NONE, the modulator is valid but
-      the output of this modulator will be forced to 0 at synthesis time.
-      Also this modulator cannot be used to overwrite a default modulator (as
-      there is no default modulator with src1 source equal to FLUID_MOD_NONE).
-      Consequently it is useful to return FALSE to indicate this modulator
-      being useless. It will be removed later with others invalid modulators.
+      When src1 is non CC source FLUID_MOD_NONE, the modulator is valid, yet 
it's pretty unusual
+      which is why it deserves a warning. However, it's totally legal. A 
use-case could be a
+      constant modulator that is meant to apply some offset to a generator.
     */
     if(fluid_mod_is_src1_none(mod))
     {
@@ -663,7 +660,7 @@
             FLUID_LOG(FLUID_WARN, src1_is_none, name, mod->src1);
         }
 
-        return FALSE;
+        return TRUE;
     }
 
     if(!fluid_mod_check_non_cc_source(mod, 0)) /* check src2 */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.4/src/synth/fluid_synth.c 
new/fluidsynth-2.4.5/src/synth/fluid_synth.c
--- old/fluidsynth-2.4.4/src/synth/fluid_synth.c        2025-03-16 
18:51:19.000000000 +0100
+++ new/fluidsynth-2.4.5/src/synth/fluid_synth.c        2025-04-13 
14:23:24.000000000 +0200
@@ -300,6 +300,21 @@
   #endif
 #endif
 
+/*
+ * Disable OpenMP thread affinity on Android to prevent crashes.
+ *
+ * On several Android devices (particularly Xiaomi), OpenMP's attempt to set 
thread
+ * affinity fails with EINVAL, causing process abortion during parallel 
SoundFont loading.
+ * This is due to an unresolved bug in Android NDK's OpenMP implementation
+ * (see https://github.com/android/ndk/issues/1180).
+ */
+#ifdef __ANDROID__
+    if (setenv("KMP_AFFINITY", "disabled", 1) != 0)
+    {
+        FLUID_LOG(FLUID_WARN, "Failed to disable KMP_AFFINITY, OpenMP crashes 
may occur on some devices!");
+    }
+#endif
+
     init_dither();
 
     /* custom_breath2att_mod is not a default modulator specified in SF2.01.
@@ -1836,6 +1851,11 @@
             if((fluid_channel_get_cc(chan, NRPN_MSB) == 120)
                     && (fluid_channel_get_cc(chan, NRPN_LSB) < 100))
             {
+                if(num == DATA_ENTRY_LSB)
+                {
+                    // SF2 NRPNs must be processed, after having received 
DATA_LSB and DATA_MSB in that order.
+                    break;
+                }
                 nrpn_select = chan->nrpn_select;
 
                 if(nrpn_select < GEN_LAST)
@@ -7616,66 +7636,6 @@
     }
 }
 
-// The "SB AWE32 Developer's Information Pack" provides a lookup table for the 
filter resonance.
-// Instead of a single Q value, a high and low Q value is given. This suggests 
a variable-Q filter design, which is
-// incompatible to fluidsynth's IIR filter. Therefore we need to somehow 
derive a single Q value.
-// Options are:
-// * mean
-// * geometric distance (sqrt(q_lo * q_hi))
-// * either q_lo or q_hi
-// * linear interpolation between low and high fc
-// * log interpolation between low and high fc
-static fluid_real_t
-calc_awe32_filter_q(int data, fluid_real_t* fc)
-{
-    typedef struct
-    {
-        fluid_real_t fc_lo;
-        fluid_real_t fc_hi;
-        fluid_real_t q_lo;
-        fluid_real_t q_hi;
-        fluid_real_t dc_atten;
-    } awe32_q;
-
-    // Q in dB
-    static const awe32_q awe32_q_table[] =
-    {
-        {92, 22000, 5.f, 0.f, -0.0f },  /* coef 0 */
-        {93, 8500, 6.f, 0.5f, -0.5f },  /* coef 1 */
-        {94, 8300, 8.f, 1.f, -1.2f },   /* coef 2 */
-        {95, 8200, 10.f, 2.f, -1.8f },  /* coef 3 */
-        {96, 8100, 11.f, 3.f, -2.5f },  /* coef 4 */
-        {97, 8000, 13.f, 4.f, -3.3f },  /* coef 5 */
-        {98, 7900, 14.f, 5.f, -4.1f },  /* coef 6 */
-        {99, 7800, 16.f, 6.f, -5.5f},   /* coef 7 */
-        {100, 7700, 17.f, 7.f, -6.0f },  /* coef 8 */
-        {100, 7500, 19.f, 9.f, -6.6f },  /* coef 9 */
-        {100, 7400, 20.f, 10.f, -7.2f }, /* coef 10 */
-        {100, 7300, 22.f, 11.f, -7.9f }, /* coef 11 */
-        {100, 7200, 23.f, 13.f, -8.5f }, /* coef 12 */
-        {100, 7100, 25.f, 15.f, -9.3f }, /* coef 13 */
-        {100, 7100, 26.f, 16.f, -10.1f },/* coef 14 */
-        {100, 7000, 28.f, 18.f, -11.0f}, /* coef 15 */
-    };
-
-    const awe32_q* tab;
-    fluid_real_t alpha;
-
-    fluid_clip(data, 0, 127);
-    data /= 8;
-    tab = &awe32_q_table[data];
-    
-    fluid_clip(*fc, tab->fc_lo, tab->fc_hi);
-    
-    alpha = (*fc - tab->fc_lo) / (tab->fc_hi - tab->fc_lo);
-
-    // linearly interpolate between high and low Q
-    return 10 * /* cB */ (tab->q_lo * (1.0f - alpha) + tab->q_hi * alpha);
-
-    // alternatively: log interpolation
-    // return 10 * /* cB */ FLUID_POW(tab->q_hi, alpha) * FLUID_POW(tab->q_lo, 
1.0f - alpha);
-}
-
 /**
  * This implementation is based on "Frequently Asked Questions for SB AWE32" 
http://archive.gamedev.net/archive/reference/articles/article445.html
  * as well as on the "SB AWE32 Developer's Information Pack" 
https://github.com/user-attachments/files/15757220/adip301.pdf
@@ -7720,7 +7680,7 @@
 
     enum fluid_gen_type sf2_gen = awe32_to_sf2_gen[gen];
     int is_realtime = FALSE, i;
-    fluid_real_t converted_sf2_generator_value, q;
+    fluid_real_t converted_sf2_generator_value;
 
     // The AWE32 NRPN docs say that a value of 8192 is considered to be the 
middle, i.e. zero.
     // However, it looks like for those generators which work in range 
[0,127], the AWE32 only inspects the DATA_LSB, i.e. and not doing this 
subtraction. Found while investigating Uplift.mid.
@@ -7797,15 +7757,18 @@
             // Yes, DO NOT use data here, Uplift.mid doesn't set DATA_MSB=64, 
therefore we would always get a negative value after subtracting 8192.
             // Since Uplift.mid sounds fine on hardware though, it seems like 
AWE32 only inspects DATA_LSB in this case.
             // conversion continues below!
-            converted_sf2_generator_value = (data_lsb * 62 /* Hz */);
-            FLUID_LOG(FLUID_DBG, "AWE32 IIR Fc: %f 
Hz",converted_sf2_generator_value);
+            converted_sf2_generator_value = (data_lsb * 59 /* cents! not as 
stated Hz by the AWE32 docs!!! */);
+            converted_sf2_generator_value += 4500 /* cents */; // minimum 
should be around 110 Hz, derived by experiments, see #1473
+            FLUID_LOG(FLUID_DBG, "AWE32 IIR Fc: %f cents", 
converted_sf2_generator_value);
             is_realtime = TRUE;
             break;
 
         case GEN_FILTERQ:
-            FLUID_LOG(FLUID_DBG, "AWE32 IIR Q Tab: %d",data_lsb);
-            synth->channel[chan]->awe32_filter_coeff = data_lsb;
-            return;
+            fluid_clip(data_lsb, 0, 127);
+            converted_sf2_generator_value = data_lsb * (fluid_real_t)((22.0 /* 
dB */ / 127.0 /* NPRN steps*/) * 10.0) /* cB */;
+            FLUID_LOG(FLUID_DBG, "AWE32 IIR Q: %f cB", 
converted_sf2_generator_value);
+            is_realtime = TRUE;
+            break;
 
         // Note: The description in the official "SB AWE32 Developer's 
Information Pack" is probably wrong.
         // There it says: "Positive data value causes a positive phase (from 0 
to maximum) filter modulation
@@ -7849,21 +7812,6 @@
             return;
     }
     
-    if(sf2_gen == GEN_FILTERFC)
-    {
-        int coef = synth->channel[chan]->awe32_filter_coeff;
-        // The cutoff at fc seems to be very steep for SoundBlaster! hardware. 
Listening tests have shown that lowering the cutoff frequency by 1000Hz gives a 
closer signal to the SB! hardware filter...
-        converted_sf2_generator_value -= 1000;
-        q = calc_awe32_filter_q(coef, &converted_sf2_generator_value);
-        FLUID_LOG(FLUID_DBG, "AWE32 IIR Fc (corrected): %f Hz", 
converted_sf2_generator_value);
-        FLUID_LOG(FLUID_DBG, "AWE32 IIR Q: %f cB", q);
-
-        converted_sf2_generator_value = 
fluid_hz2ct(converted_sf2_generator_value /* Hz */);
-
-        // Safe the "true initial Q"
-        fluid_channel_set_override_gen_default(synth->channel[chan], 
GEN_FILTERQ, q);
-    }
-    
     fluid_channel_set_override_gen_default(synth->channel[chan], sf2_gen, 
converted_sf2_generator_value);
 
     for (i = 0; is_realtime && i < synth->polyphony; i++)
@@ -7877,12 +7825,6 @@
             fluid_voice_update_param(voice, sf2_gen);
             
             FLUID_LOG(FLUID_DBG, "AWE32 Realtime: adjusting voice id %d, 
generator %d, chan %d", fluid_voice_get_id(voice), sf2_gen, chan);
-            if(sf2_gen == GEN_FILTERFC)
-            {
-                // also sets the calculated Q
-                fluid_voice_gen_set(voice, GEN_FILTERQ, q);
-                fluid_voice_update_param(voice, GEN_FILTERQ);
-            }
         }
     }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.4/src/synth/fluid_voice.c 
new/fluidsynth-2.4.5/src/synth/fluid_voice.c
--- old/fluidsynth-2.4.4/src/synth/fluid_voice.c        2025-03-16 
18:51:19.000000000 +0100
+++ new/fluidsynth-2.4.5/src/synth/fluid_voice.c        2025-04-13 
14:23:24.000000000 +0200
@@ -861,10 +861,12 @@
         break;
 
     case GEN_FILTERFC:
+        fluid_clip(x, FRES_MIN, FRES_MAX);
         UPDATE_RVOICE_GENERIC_R1(fluid_iir_filter_set_fres, 
&voice->rvoice->resonant_filter, x);
         break;
 
     case GEN_FILTERQ:
+        fluid_clip(x, 0.f, 960.f);
         UPDATE_RVOICE_GENERIC_R1(fluid_iir_filter_set_q, 
&voice->rvoice->resonant_filter, x);
         break;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.4/test/CMakeLists.txt 
new/fluidsynth-2.4.5/test/CMakeLists.txt
--- old/fluidsynth-2.4.4/test/CMakeLists.txt    2025-03-16 18:51:19.000000000 
+0100
+++ new/fluidsynth-2.4.5/test/CMakeLists.txt    2025-04-13 14:23:24.000000000 
+0200
@@ -47,254 +47,303 @@
 
 # Prepare the manual test suite down here
 if(NOT DEFINED GENERAL_USER_GS2)
-    add_custom_target(check_manual
-        COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red "In order to run 
the manual test suite, you need to set variable GENERAL_USER_GS2 to the path of 
the soundfont.")
-else()
-
-    set(IIR_FILTER_RENDER_DIR "${CMAKE_CURRENT_BINARY_DIR}/manual/iir_filter")
-    set(AWE32_NRPN_RENDER_DIR "${CMAKE_CURRENT_BINARY_DIR}/manual/awe32_nrpn")
-    set(SFSPEC_RENDER_DIR 
"${CMAKE_CURRENT_BINARY_DIR}/manual/SoundFont-Spec-Test")
-    set(PORTAMENTO_RENDER_DIR "${CMAKE_CURRENT_BINARY_DIR}/manual/portamento")
-    set(REVERB_RENDER_DIR "${CMAKE_CURRENT_BINARY_DIR}/manual/reverb")
-    set(EXCL_RENDER_DIR "${CMAKE_CURRENT_BINARY_DIR}/manual/exclusive_class")
-    set(DSPINTERP_RENDER_DIR "${CMAKE_CURRENT_BINARY_DIR}/manual/dsp_interp")
-    set(DYNSAM_RENDER_DIR 
"${CMAKE_CURRENT_BINARY_DIR}/manual/dynamic-sample-loading")
-    set(STACKEDSF_RENDER_DIR "${CMAKE_CURRENT_BINARY_DIR}/manual/stacked_sf2")
-
-    if(LIBSNDFILE_SUPPORT)
-      set(FEXT "wav")
-    else()
-      set(FEXT "raw")
-    endif()
-
-    # Add an empty pseudo target
-    add_custom_target(check_manual)
-
-    add_custom_target(create_iir_dir
-        COMMAND ${CMAKE_COMMAND} -E make_directory ${IIR_FILTER_RENDER_DIR} 
${AWE32_NRPN_RENDER_DIR} ${SFSPEC_RENDER_DIR} ${PORTAMENTO_RENDER_DIR} 
${REVERB_RENDER_DIR} ${EXCL_RENDER_DIR} ${DSPINTERP_RENDER_DIR} 
${DYNSAM_RENDER_DIR} ${STACKEDSF_RENDER_DIR}
-        VERBATIM)
-
-    add_custom_target(render1415
-        COMMAND fluidsynth -R 0 -C 0 -g 1 -F 
${IIR_FILTER_RENDER_DIR}/1415_the-nervous-filter.${FEXT} "The Nervous Filter 
trimmed.mid" ${GENERAL_USER_GS2}
-        COMMENT "Rendering testfile of issue 1415"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/iir_filter/1415_the-nervous-filter/
-        VERBATIM
-    )
-
-    add_custom_target(render1417
-        COMMAND fluidsynth -R 0 -C 0 -g 1 -F 
${IIR_FILTER_RENDER_DIR}/1417_filter-envelope-noise.${FEXT} 
filter-envelope-noise.mid ${GENERAL_USER_GS2}
-        COMMENT "Rendering testfile of issue 1417"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/iir_filter/1417_filter-envelope-noise/
-        VERBATIM
-    )
-
-    add_custom_target(render1424
-        COMMAND fluidsynth -R 0 -C 0 -g 1 -F 
${IIR_FILTER_RENDER_DIR}/1424_clicks-on-ModEnv-FilterFc-change.${FEXT} 1424.mid 
echo_drops.sf2
-        COMMENT "Rendering testfile of issue 1424"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/iir_filter/1424_clicks-on-ModEnv-FilterFc-change/
-        VERBATIM
-    )
-
-    add_custom_target(render1427
-        COMMAND fluidsynth -R 0 -C 0 -g 5 -F 
${IIR_FILTER_RENDER_DIR}/1427_high-Q-note-cutoff.${FEXT} 
high_Q_note_cutoff_test.mid high_Q_note_cutoff_test.sf2
-        COMMENT "Rendering testfile of issue 1427"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/iir_filter/1427_high-Q-note-cutoff/
-        VERBATIM
-    )
-
-    add_custom_target(renderRealtimeIIR
-        COMMAND fluidsynth -R 0 -C 0 -g 0.5 -niq "high poly audio breakup.mid" 
"high poly preset test.sf2" # -F "${IIR_FILTER_RENDER_DIR}/1481 high poly audio 
breakup.${FEXT}"
-        COMMENT "Realtime-Rendering testfile of issue 1481"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/iir_filter/1481_realtime-playback/
-        VERBATIM
-    )
-
-    add_custom_target(render1481
-        COMMAND fluidsynth -R 0 -C 0 -g 1.8 -F 
${IIR_FILTER_RENDER_DIR}/1481_cutoff-resolution.${FEXT} "filter resolution 
test.mid" "filter resolution test.sf2"
-        COMMENT "Rendering testfile of issue 1481"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/iir_filter/1481_cutoff-resolution/
-        VERBATIM
-    )
-
-    add_custom_target(renderAltitude
-        COMMAND fluidsynth -R 1 -C 1 -f fluidsynth.cfg -o 
synth.default-soundfont="../../sf2/synthgs-sf2_04-compat.sf2" -F 
${AWE32_NRPN_RENDER_DIR}/Altitude.${FEXT} Altitude.mid 
-        COMMENT "Rendering AWE32 NRPN test file Altitude.mid"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/awe32_nrpn/Altitude/
-        VERBATIM
-    )
-
-    add_custom_target(renderFilter
-        COMMAND fluidsynth -R 0 -C 0 -g 0.5 -F "${AWE32_NRPN_RENDER_DIR}/The 
Nervous Filter GenUserGS2.sf2.${FEXT}" "The Nervous Filter.mid" 
${GENERAL_USER_GS2}
-        COMMAND fluidsynth -R 0 -C 0 -g 0.5 -F "${AWE32_NRPN_RENDER_DIR}/The 
Nervous Filter 1mgm.sf2.${FEXT}" "The Nervous Filter.mid" "1mgm.sf2"
-        COMMAND fluidsynth -R 0 -C 0 -g 0.5 -F "${AWE32_NRPN_RENDER_DIR}/The 
Nervous Filter GM_Roland.sf2.${FEXT}" "The Nervous Filter.mid" "GM_Roland.sf2"
-        COMMENT "Rendering AWE32 NRPN test file The Nervous Filter.mid"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/awe32_nrpn/Filter/
-        VERBATIM
-    )
-
-    add_custom_target(renderUplift
-        COMMAND fluidsynth -R 1 -C 0 -g 0.7 -F 
${AWE32_NRPN_RENDER_DIR}/Uplift-fixed.${FEXT} Uplift-fixed.mid Uplift.sf2
-        COMMENT "Rendering AWE32 NRPN test file Uplift.mid"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/awe32_nrpn/Uplift/
-        VERBATIM
-    )
-
-    add_custom_target(render1TOWOW
-        COMMAND fluidsynth -R 0 -C 0 -g 0.5 -F 
"${PORTAMENTO_RENDER_DIR}/1TOWOW_reduced_to_A3_C4.${FEXT}" 
"1TOWOW_reduced_to_A3_C4.mid" ${GENERAL_USER_GS2}
-        COMMAND fluidsynth -R 0 -C 0 -g 0.5 -F 
"${PORTAMENTO_RENDER_DIR}/1TOWOW.${FEXT}" "1TOWOW.MID" ${GENERAL_USER_GS2}
-        COMMENT "Rendering Portamento tests"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/portamento/
-        VERBATIM
-    )
-
-    add_custom_target(renderDescent8
-        COMMAND fluidsynth -R 1 -C 1 -g 0.5 -F 
${PORTAMENTO_RENDER_DIR}/Game08.${FEXT} Game08.mid ${GENERAL_USER_GS2}
-        COMMENT "Rendering Descent Game 8"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/portamento/
-        VERBATIM
-    )
-
-    add_custom_target(renderSfSpecTest
-        COMMAND fluidsynth -R 1 -C 1 -g 0.5 -F 
${SFSPEC_RENDER_DIR}/sf_spec_test.${FEXT} sf_spec_test.mid sf_spec_test.sf2
-        COMMENT "Rendering Christian Collins' SF2 spec test"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/SoundFont-Spec-Test/
-        VERBATIM
-    )
-
-    add_custom_target(render1455
-        COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=0.0 -F 
${REVERB_RENDER_DIR}/mrbumpys_rev_width_test_000.0.${FEXT} 
mrbumpys_rev_width_test.mid ${GENERAL_USER_GS2}
-        COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=0.5 -F 
${REVERB_RENDER_DIR}/mrbumpys_rev_width_test_000.5.${FEXT} 
mrbumpys_rev_width_test.mid ${GENERAL_USER_GS2}
-        COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=1.0 -F 
${REVERB_RENDER_DIR}/mrbumpys_rev_width_test_001.0.${FEXT} 
mrbumpys_rev_width_test.mid ${GENERAL_USER_GS2}
-        COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=5.0 -F 
${REVERB_RENDER_DIR}/mrbumpys_rev_width_test_005.0.${FEXT} 
mrbumpys_rev_width_test.mid ${GENERAL_USER_GS2}
-        COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=10  -F 
${REVERB_RENDER_DIR}/mrbumpys_rev_width_test_010.0.${FEXT} 
mrbumpys_rev_width_test.mid ${GENERAL_USER_GS2}
-        COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=50  -F 
${REVERB_RENDER_DIR}/mrbumpys_rev_width_test_050.0.${FEXT} 
mrbumpys_rev_width_test.mid ${GENERAL_USER_GS2}
-        COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=100 -F 
${REVERB_RENDER_DIR}/mrbumpys_rev_width_test_100.0.${FEXT} 
mrbumpys_rev_width_test.mid ${GENERAL_USER_GS2}
-        COMMENT "Rendering Christian Collins' reverb test issue 1455"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/reverb/
-        VERBATIM
-    )
-    
-    add_custom_target(render1496
-        COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=0.0 -F 
${REVERB_RENDER_DIR}/1496.${FEXT} mrbumpys_rev_width_test.mid 1496.sf2
-        COMMENT "Rendering reverb test issue 1496"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/reverb/
-        VERBATIM
-    )
-
-    set(DK64SF2 "../sf2/ANMP-data/soundfonts/N64/DK64.sf2")
-    add_custom_target(renderDK64JJU
-        COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=0.0 -F 
${REVERB_RENDER_DIR}/DK64_sparse04_000.0.${FEXT} DK64_sparse04.mid ${DK64SF2}
-        COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=0.5 -F 
${REVERB_RENDER_DIR}/DK64_sparse04_000.5.${FEXT} DK64_sparse04.mid ${DK64SF2}
-        COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=1.0 -F 
${REVERB_RENDER_DIR}/DK64_sparse04_001.0.${FEXT} DK64_sparse04.mid ${DK64SF2}
-        COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=5.0 -F 
${REVERB_RENDER_DIR}/DK64_sparse04_005.0.${FEXT} DK64_sparse04.mid ${DK64SF2}
-        COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=10  -F 
${REVERB_RENDER_DIR}/DK64_sparse04_010.0.${FEXT} DK64_sparse04.mid ${DK64SF2}
-        COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=50  -F 
${REVERB_RENDER_DIR}/DK64_sparse04_050.0.${FEXT} DK64_sparse04.mid ${DK64SF2}
-        COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=100 -F 
${REVERB_RENDER_DIR}/DK64_sparse04_100.0.${FEXT} DK64_sparse04.mid ${DK64SF2}
-        COMMENT "Praise Grant Kirkhope!"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/reverb/
-        VERBATIM
-    )
-
-    add_custom_target(renderExcl
-        COMMAND fluidsynth -R 0 -C 0 -g 1.4 -F "${EXCL_RENDER_DIR}/exclusive 
class cutoff speed.${FEXT}" "exclusive class cutoff speed.mid" "exclusive class 
cutoff speed.sf2"
-        COMMAND fluidsynth -R 0 -C 0 -g 1.4 -o synth.note-cut=0 -F 
"${EXCL_RENDER_DIR}/MIDInotecut0.${FEXT}" "MIDInotecut.mid" ${GENERAL_USER_GS2}
-        COMMAND fluidsynth -R 0 -C 0 -g 1.4 -o synth.note-cut=1 -F 
"${EXCL_RENDER_DIR}/MIDInotecut1.${FEXT}" "MIDInotecut.mid" ${GENERAL_USER_GS2}
-        COMMAND fluidsynth -R 0 -C 0 -g 1.4 -o synth.note-cut=2 -F 
"${EXCL_RENDER_DIR}/MIDInotecut2.${FEXT}" "MIDInotecut.mid" ${GENERAL_USER_GS2}
-        COMMAND fluidsynth -R 0 -C 0 -g 1.4 -F "${EXCL_RENDER_DIR}/percussion 
note cutoff.${FEXT}" "percussion note cutoff.mid" ${GENERAL_USER_GS2}
-        COMMAND fluidsynth -R 0 -C 0 -g 1.4 -F 
"${EXCL_RENDER_DIR}/percussion-test.${FEXT}" "percussion-test.mid" 
${GENERAL_USER_GS2}
-        COMMENT "Rendering exclusive class cutoff tests"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/exclusive_class/
-        VERBATIM
-    )
+    set ( GENERAL_USER_GS2 
"${CMAKE_CURRENT_SOURCE_DIR}/manual/sf2/GeneralUser-GS/GeneralUser-GS.sf2" )
+endif()
 
-    add_custom_target(rendere1m1
-        COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.note-cut=0 -F 
"${EXCL_RENDER_DIR}/e1m1_GeneralUser2_notecut0.${FEXT}" "e1m1.mid" 
${GENERAL_USER_GS2}
-        COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.note-cut=0 -F 
"${EXCL_RENDER_DIR}/e1m1_gzdoom_notecut0.${FEXT}" "e1m1.mid" "../sf2/gzdoom.sf2"
-        COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.note-cut=1 -F 
"${EXCL_RENDER_DIR}/e1m1_GeneralUser2_notecut1.${FEXT}" "e1m1.mid" 
${GENERAL_USER_GS2}
-        COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.note-cut=1 -F 
"${EXCL_RENDER_DIR}/e1m1_gzdoom_notecut1.${FEXT}" "e1m1.mid" "../sf2/gzdoom.sf2"
-        COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.note-cut=2 -F 
"${EXCL_RENDER_DIR}/e1m1_GeneralUser2_notecut2.${FEXT}" "e1m1.mid" 
${GENERAL_USER_GS2}
-        COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.note-cut=2 -F 
"${EXCL_RENDER_DIR}/e1m1_gzdoom_notecut2.${FEXT}" "e1m1.mid" "../sf2/gzdoom.sf2"
-        COMMENT "Rendering Doom E1M1 with note-cut 0,1,2"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/exclusive_class/
-        VERBATIM
-    )
+set(IIR_FILTER_RENDER_DIR "${CMAKE_CURRENT_BINARY_DIR}/manual/iir_filter")
+set(AWE32_NRPN_RENDER_DIR "${CMAKE_CURRENT_BINARY_DIR}/manual/awe32_nrpn")
+set(SFSPEC_RENDER_DIR "${CMAKE_CURRENT_BINARY_DIR}/manual/SoundFont-Spec-Test")
+set(GUGDEMO_RENDER_DIR "${CMAKE_CURRENT_BINARY_DIR}/manual/sf2/GeneralUser-GS")
+set(PORTAMENTO_RENDER_DIR "${CMAKE_CURRENT_BINARY_DIR}/manual/portamento")
+set(REVERB_RENDER_DIR "${CMAKE_CURRENT_BINARY_DIR}/manual/reverb")
+set(EXCL_RENDER_DIR "${CMAKE_CURRENT_BINARY_DIR}/manual/exclusive_class")
+set(DSPINTERP_RENDER_DIR "${CMAKE_CURRENT_BINARY_DIR}/manual/dsp_interp")
+set(DYNSAM_RENDER_DIR 
"${CMAKE_CURRENT_BINARY_DIR}/manual/dynamic-sample-loading")
+set(BANKSELECT_RENDER_DIR 
"${CMAKE_CURRENT_BINARY_DIR}/manual/midi-bank-select")
+set(STACKEDSF_RENDER_DIR "${CMAKE_CURRENT_BINARY_DIR}/manual/stacked_sf2")
 
-    add_custom_target(renderdspInterp
-        COMMAND fluidsynth -R 0 -C 0 -g 0.6 -F "${DSPINTERP_RENDER_DIR}/sample 
interpolation test.${FEXT}" "sample interpolation test.mid" "sample 
interpolation test.sf2"
-        COMMENT "Rendering Interpolation examples"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/dsp_interp/
-        VERBATIM
-    )
+if(LIBSNDFILE_SUPPORT)
+    set(FEXT "wav")
+else()
+    set(FEXT "raw")
+endif()
 
-    add_custom_target(render1484
-        COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.dynamic-sample-loading=1 
-F "${DYNSAM_RENDER_DIR}/DrTebz_dynamic-sample-loading_on.${FEXT}" 
"dynamic-sample-loading_test.mid" "DrTebz.sf2"
-        COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.dynamic-sample-loading=0 
-F "${DYNSAM_RENDER_DIR}/DrTebz_dynamic-sample-loading_off.${FEXT}" 
"dynamic-sample-loading_test.mid" "DrTebz.sf2"
-        COMMENT "Rendering dynamic sample loading test"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/dynamic-sample-loading/
-        VERBATIM
-    )
-    add_custom_target(render1505
-        COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.dynamic-sample-loading=1 
-F "${DYNSAM_RENDER_DIR}/ran_dynamic-sample-loading_on.${FEXT}" 
${GENERAL_USER_GS2} "ran.dls" "ran.mid"
-        COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.dynamic-sample-loading=0 
-F "${DYNSAM_RENDER_DIR}/ran_dynamic-sample-loading_off.${FEXT}" 
${GENERAL_USER_GS2} "ran.dls" "ran.mid"
-        COMMENT "Rendering dynamic sample loading test"
-        DEPENDS fluidsynth create_iir_dir
-        WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/dynamic-sample-loading/
-        VERBATIM
-    )
+# Add an empty pseudo target
+add_custom_target(check_manual)
 
-    if ( LIBINSTPATCH_SUPPORT )
-        add_custom_target(renderStreetwise
-            COMMAND fluidsynth -R 0 -C 0 -g 0.6 -F 
"${STACKEDSF_RENDER_DIR}/Streetwise.${FEXT}" "Streetwise.mid" 
${GENERAL_USER_GS2} "Streetwise.dls"
-            COMMENT "Rendering testcase for stacked soundfonts"
-            DEPENDS fluidsynth create_iir_dir
-            WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/stacked_sf2/Streetwise/
-            VERBATIM
-        )
-    else ( LIBINSTPATCH_SUPPORT )
-        add_custom_target(renderStreetwise
-            COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red "Cannot render 
Streetwise, no DLS support!"
-            COMMENT "Rendering testcase for stacked soundfonts"
-        )
-    endif (LIBINSTPATCH_SUPPORT )
-
-    # Add a dependency so that rendering targets depends on check_manual
-    add_dependencies(check_manual render1415)
-    add_dependencies(check_manual render1417)
-    add_dependencies(check_manual render1424)
-    add_dependencies(check_manual render1427)
-    add_dependencies(check_manual renderAltitude)
-    add_dependencies(check_manual renderFilter)
-    add_dependencies(check_manual renderUplift)
-    add_dependencies(check_manual render1TOWOW)
-    add_dependencies(check_manual renderDescent8)
-    add_dependencies(check_manual renderSfSpecTest)
-    add_dependencies(check_manual render1455)
-    add_dependencies(check_manual renderDK64JJU)
-    add_dependencies(check_manual renderExcl)
-    add_dependencies(check_manual rendere1m1)
-    add_dependencies(check_manual renderdspInterp)
-    add_dependencies(check_manual render1484)
-    add_dependencies(check_manual renderRealtimeIIR)
-    add_dependencies(check_manual render1481)
-    add_dependencies(check_manual renderStreetwise)
+add_custom_target(create_iir_dir
+    COMMAND ${CMAKE_COMMAND} -E make_directory ${IIR_FILTER_RENDER_DIR} 
${AWE32_NRPN_RENDER_DIR} ${SFSPEC_RENDER_DIR} ${PORTAMENTO_RENDER_DIR} 
${REVERB_RENDER_DIR} ${EXCL_RENDER_DIR} ${DSPINTERP_RENDER_DIR} 
${DYNSAM_RENDER_DIR} ${STACKEDSF_RENDER_DIR} ${GUGDEMO_RENDER_DIR} 
${BANKSELECT_RENDER_DIR}
+    VERBATIM)
+
+add_custom_target(render1415
+    COMMAND fluidsynth -R 0 -C 0 -g 1 -F 
${IIR_FILTER_RENDER_DIR}/1415_the-nervous-filter.${FEXT} "The Nervous Filter 
trimmed.mid" ${GENERAL_USER_GS2}
+    COMMENT "Rendering testfile of issue 1415"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/iir_filter/1415_the-nervous-filter/
+    VERBATIM
+)
+
+add_custom_target(render1417
+    COMMAND fluidsynth -R 0 -C 0 -g 1 -F 
${IIR_FILTER_RENDER_DIR}/1417_filter-envelope-noise.${FEXT} 
filter-envelope-noise.mid ${GENERAL_USER_GS2}
+    COMMENT "Rendering testfile of issue 1417"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/iir_filter/1417_filter-envelope-noise/
+    VERBATIM
+)
+
+add_custom_target(render1424
+    COMMAND fluidsynth -R 0 -C 0 -g 1 -F 
${IIR_FILTER_RENDER_DIR}/1424_clicks-on-ModEnv-FilterFc-change.${FEXT} 1424.mid 
echo_drops.sf2
+    COMMENT "Rendering testfile of issue 1424"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/iir_filter/1424_clicks-on-ModEnv-FilterFc-change/
+    VERBATIM
+)
+
+add_custom_target(render1427
+    COMMAND fluidsynth -R 0 -C 0 -g 5 -F 
${IIR_FILTER_RENDER_DIR}/1427_high-Q-note-cutoff.${FEXT} 
high_Q_note_cutoff_test.mid high_Q_note_cutoff_test.sf2
+    COMMENT "Rendering testfile of issue 1427"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/iir_filter/1427_high-Q-note-cutoff/
+    VERBATIM
+)
+
+add_custom_target(renderRealtimeIIR
+    COMMAND fluidsynth -R 0 -C 0 -g 0.5 -niq "high poly audio breakup.mid" 
"high poly preset test.sf2" # -F "${IIR_FILTER_RENDER_DIR}/1481 high poly audio 
breakup.${FEXT}"
+    COMMENT "Realtime-Rendering testfile of issue 1481"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/iir_filter/1481_realtime-playback/
+    VERBATIM
+)
+
+add_custom_target(render1481
+    COMMAND fluidsynth -R 0 -C 0 -g 1.8 -F 
${IIR_FILTER_RENDER_DIR}/1481_cutoff-resolution.${FEXT} "filter resolution 
test.mid" "filter resolution test.sf2"
+    COMMENT "Rendering testfile of issue 1481"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/iir_filter/1481_cutoff-resolution/
+    VERBATIM
+)
+
+add_custom_target(renderAltitude
+    COMMAND fluidsynth -R 1 -C 1 -f fluidsynth.cfg -o 
"synth.default-soundfont=../../sf2/synthgs-sf2_04-compat.sf2" -F 
${AWE32_NRPN_RENDER_DIR}/Altitude.${FEXT} Altitude.mid
+    COMMENT "Rendering AWE32 NRPN test file Altitude.mid"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/awe32_nrpn/Altitude/
+    VERBATIM
+)
+
+add_custom_target(renderFilter
+    COMMAND fluidsynth -R 0 -C 0 -g 0.5 -F "${AWE32_NRPN_RENDER_DIR}/The 
Nervous Filter GenUserGS2.sf2.${FEXT}" "The Nervous Filter.mid" 
${GENERAL_USER_GS2}
+    COMMAND fluidsynth -R 0 -C 0 -g 0.5 -F "${AWE32_NRPN_RENDER_DIR}/The 
Nervous Filter 1mgm.sf2.${FEXT}" "The Nervous Filter.mid" "1mgm.sf2"
+    COMMAND fluidsynth -R 0 -C 0 -g 0.5 -F "${AWE32_NRPN_RENDER_DIR}/The 
Nervous Filter GM_Roland.sf2.${FEXT}" "The Nervous Filter.mid" "GM_Roland.sf2"
+    COMMENT "Rendering AWE32 NRPN test file The Nervous Filter.mid"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/awe32_nrpn/Filter/
+    VERBATIM
+)
+
+add_custom_target(renderUplift
+    COMMAND fluidsynth -R 1 -C 0 -g 0.7 -f fluidsynth.cfg -o 
"synth.default-soundfont=../../sf2/synthgs-sf2_04-compat.sf2" -F 
${AWE32_NRPN_RENDER_DIR}/Uplift-fixed.${FEXT} Uplift-fixed.mid
+    COMMENT "Rendering AWE32 NRPN test file Uplift.mid"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/awe32_nrpn/Uplift/
+    VERBATIM
+)
+
+add_custom_target(renderChrisNRPN
+    COMMAND fluidsynth -R 0 -C 0 -g 1.8 -F 
${AWE32_NRPN_RENDER_DIR}/filter_NRPN_test.${FEXT} "filter_NRPN_test.mid" 
"filter_NRPN_test.sf2"
+    COMMENT "Rendering Chris' AWE32 NRPN filter test file"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY 
"${CMAKE_CURRENT_SOURCE_DIR}/manual/SoundFont-Spec-Test/NRPN test - filter/"
+)
+
+add_custom_target(renderHybridCol
+    COMMAND fluidsynth -R 1 -C 1 -g 0.7 -F "${AWE32_NRPN_RENDER_DIR}/HYBRID 
Collage NRPN.${FEXT}" "HYBRID Collage NRPN.mid" ${GENERAL_USER_GS2}
+    COMMAND fluidsynth -R 1 -C 1 -g 1.5 -F "${AWE32_NRPN_RENDER_DIR}/HYBRID 
Collage wah-guitar.${FEXT}" "HYBRID Collage wah-guitar.mid" ${GENERAL_USER_GS2}
+    COMMENT "Rendering Christian's HYBRID Collage"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/awe32_nrpn/HYBRID.Collage/
+    VERBATIM
+)
+
+add_custom_target(render1TOWOW
+    COMMAND fluidsynth -R 0 -C 0 -g 0.5 -F 
"${PORTAMENTO_RENDER_DIR}/1TOWOW_reduced_to_A3_C4.${FEXT}" 
"1TOWOW_reduced_to_A3_C4.mid" ${GENERAL_USER_GS2}
+    COMMAND fluidsynth -R 0 -C 0 -g 0.5 -F 
"${PORTAMENTO_RENDER_DIR}/1TOWOW.${FEXT}" "1TOWOW.MID" ${GENERAL_USER_GS2}
+    COMMENT "Rendering Portamento tests"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/portamento/
+    VERBATIM
+)
+
+add_custom_target(renderDescent8
+    COMMAND fluidsynth -R 1 -C 1 -g 0.5 -F 
${PORTAMENTO_RENDER_DIR}/Game08.${FEXT} Game08.mid ${GENERAL_USER_GS2}
+    COMMENT "Rendering Descent Game 8"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/portamento/
+    VERBATIM
+)
+
+add_custom_target(renderSfSpecTest
+    COMMAND fluidsynth -R 1 -C 1 -g 0.5 -F 
${SFSPEC_RENDER_DIR}/sf_spec_test.${FEXT} sf_spec_test.mid sf_spec_test.sf2
+    COMMENT "Rendering Christian Collins' SF2 spec test"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/SoundFont-Spec-Test/
+    VERBATIM
+)
+
+add_custom_target(render1455
+    COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=0.0 -F 
${REVERB_RENDER_DIR}/mrbumpys_rev_width_test_000.0.${FEXT} 
mrbumpys_rev_width_test.mid ${GENERAL_USER_GS2}
+    COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=0.5 -F 
${REVERB_RENDER_DIR}/mrbumpys_rev_width_test_000.5.${FEXT} 
mrbumpys_rev_width_test.mid ${GENERAL_USER_GS2}
+    COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=1.0 -F 
${REVERB_RENDER_DIR}/mrbumpys_rev_width_test_001.0.${FEXT} 
mrbumpys_rev_width_test.mid ${GENERAL_USER_GS2}
+    COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=5.0 -F 
${REVERB_RENDER_DIR}/mrbumpys_rev_width_test_005.0.${FEXT} 
mrbumpys_rev_width_test.mid ${GENERAL_USER_GS2}
+    COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=10  -F 
${REVERB_RENDER_DIR}/mrbumpys_rev_width_test_010.0.${FEXT} 
mrbumpys_rev_width_test.mid ${GENERAL_USER_GS2}
+    COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=50  -F 
${REVERB_RENDER_DIR}/mrbumpys_rev_width_test_050.0.${FEXT} 
mrbumpys_rev_width_test.mid ${GENERAL_USER_GS2}
+    COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=100 -F 
${REVERB_RENDER_DIR}/mrbumpys_rev_width_test_100.0.${FEXT} 
mrbumpys_rev_width_test.mid ${GENERAL_USER_GS2}
+    COMMENT "Rendering Christian Collins' reverb test issue 1455"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/reverb/
+    VERBATIM
+)
+
+add_custom_target(render1496
+    COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=0.0 -F 
${REVERB_RENDER_DIR}/1496.${FEXT} mrbumpys_rev_width_test.mid 1496.sf2
+    COMMENT "Rendering reverb test issue 1496"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/reverb/
+    VERBATIM
+)
+
+set(DK64SF2 "../sf2/ANMP-data/soundfonts/N64/DK64.sf2")
+add_custom_target(renderDK64JJU
+    COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=0.0 -F 
${REVERB_RENDER_DIR}/DK64_sparse04_000.0.${FEXT} DK64_sparse04.mid ${DK64SF2}
+    COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=0.5 -F 
${REVERB_RENDER_DIR}/DK64_sparse04_000.5.${FEXT} DK64_sparse04.mid ${DK64SF2}
+    COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=1.0 -F 
${REVERB_RENDER_DIR}/DK64_sparse04_001.0.${FEXT} DK64_sparse04.mid ${DK64SF2}
+    COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=5.0 -F 
${REVERB_RENDER_DIR}/DK64_sparse04_005.0.${FEXT} DK64_sparse04.mid ${DK64SF2}
+    COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=10  -F 
${REVERB_RENDER_DIR}/DK64_sparse04_010.0.${FEXT} DK64_sparse04.mid ${DK64SF2}
+    COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=50  -F 
${REVERB_RENDER_DIR}/DK64_sparse04_050.0.${FEXT} DK64_sparse04.mid ${DK64SF2}
+    COMMAND fluidsynth -R 1 -C 0 -g 0.5 -o synth.reverb.width=100 -F 
${REVERB_RENDER_DIR}/DK64_sparse04_100.0.${FEXT} DK64_sparse04.mid ${DK64SF2}
+    COMMENT "Praise Grant Kirkhope!"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/reverb/
+    VERBATIM
+)
+
+add_custom_target(renderExcl
+    COMMAND fluidsynth -R 0 -C 0 -g 1.4 -F "${EXCL_RENDER_DIR}/exclusive class 
cutoff speed.${FEXT}" "exclusive class cutoff speed.mid" "exclusive class 
cutoff speed.sf2"
+    COMMAND fluidsynth -R 0 -C 0 -g 1.4 -o synth.note-cut=0 -F 
"${EXCL_RENDER_DIR}/MIDInotecut0.${FEXT}" "MIDInotecut.mid" ${GENERAL_USER_GS2}
+    COMMAND fluidsynth -R 0 -C 0 -g 1.4 -o synth.note-cut=1 -F 
"${EXCL_RENDER_DIR}/MIDInotecut1.${FEXT}" "MIDInotecut.mid" ${GENERAL_USER_GS2}
+    COMMAND fluidsynth -R 0 -C 0 -g 1.4 -o synth.note-cut=2 -F 
"${EXCL_RENDER_DIR}/MIDInotecut2.${FEXT}" "MIDInotecut.mid" ${GENERAL_USER_GS2}
+    COMMAND fluidsynth -R 0 -C 0 -g 1.4 -F "${EXCL_RENDER_DIR}/percussion note 
cutoff.${FEXT}" "percussion note cutoff.mid" ${GENERAL_USER_GS2}
+    COMMAND fluidsynth -R 0 -C 0 -g 1.4 -F 
"${EXCL_RENDER_DIR}/percussion-test.${FEXT}" "percussion-test.mid" 
${GENERAL_USER_GS2}
+    COMMENT "Rendering exclusive class cutoff tests"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/exclusive_class/
+    VERBATIM
+)
+
+add_custom_target(rendere1m1
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.note-cut=0 -F 
"${EXCL_RENDER_DIR}/e1m1_GeneralUser2_notecut0.${FEXT}" "e1m1.mid" 
${GENERAL_USER_GS2}
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.note-cut=0 -F 
"${EXCL_RENDER_DIR}/e1m1_gzdoom_notecut0.${FEXT}" "e1m1.mid" "../sf2/gzdoom.sf2"
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.note-cut=1 -F 
"${EXCL_RENDER_DIR}/e1m1_GeneralUser2_notecut1.${FEXT}" "e1m1.mid" 
${GENERAL_USER_GS2}
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.note-cut=1 -F 
"${EXCL_RENDER_DIR}/e1m1_gzdoom_notecut1.${FEXT}" "e1m1.mid" "../sf2/gzdoom.sf2"
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.note-cut=2 -F 
"${EXCL_RENDER_DIR}/e1m1_GeneralUser2_notecut2.${FEXT}" "e1m1.mid" 
${GENERAL_USER_GS2}
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.note-cut=2 -F 
"${EXCL_RENDER_DIR}/e1m1_gzdoom_notecut2.${FEXT}" "e1m1.mid" "../sf2/gzdoom.sf2"
+    COMMENT "Rendering Doom E1M1 with note-cut 0,1,2"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/exclusive_class/
+    VERBATIM
+)
+
+add_custom_target(renderdspInterp
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -F "${DSPINTERP_RENDER_DIR}/sample 
interpolation test.${FEXT}" "sample interpolation test.mid" "sample 
interpolation test.sf2"
+    COMMENT "Rendering Interpolation examples"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/manual/dsp_interp/
+    VERBATIM
+)
+
+add_custom_target(render1484
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.dynamic-sample-loading=1 -F 
"${DYNSAM_RENDER_DIR}/DrTebz_dynamic-sample-loading_on.${FEXT}" 
"dynamic-sample-loading_test.mid" "DrTebz.sf2"
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.dynamic-sample-loading=0 -F 
"${DYNSAM_RENDER_DIR}/DrTebz_dynamic-sample-loading_off.${FEXT}" 
"dynamic-sample-loading_test.mid" "DrTebz.sf2"
+    COMMENT "Rendering dynamic sample loading test"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/dynamic-sample-loading/
+    VERBATIM
+)
+
+add_custom_target(render1505
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.dynamic-sample-loading=1 -F 
"${DYNSAM_RENDER_DIR}/ran_dynamic-sample-loading_on.${FEXT}" 
${GENERAL_USER_GS2} "ran.dls" "ran.mid"
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -o synth.dynamic-sample-loading=0 -F 
"${DYNSAM_RENDER_DIR}/ran_dynamic-sample-loading_off.${FEXT}" 
${GENERAL_USER_GS2} "ran.dls" "ran.mid"
+    COMMENT "Rendering dynamic sample loading test"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/dynamic-sample-loading/
+    VERBATIM
+)
+
+add_custom_target(renderGeneralUserDemo
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -F 
"${GUGDEMO_RENDER_DIR}/Bond.${FEXT}" ${GENERAL_USER_GS2} "Bond.mid"
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -F 
"${GUGDEMO_RENDER_DIR}/Breakout.${FEXT}" ${GENERAL_USER_GS2} "Breakout.mid"
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -F 
"${GUGDEMO_RENDER_DIR}/Dance.${FEXT}" ${GENERAL_USER_GS2} "Dance.mid"
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -F "${GUGDEMO_RENDER_DIR}/Earth Day - 
by Richard Audd (fixed).${FEXT}" ${GENERAL_USER_GS2} "Earth Day - by Richard 
Audd (fixed).mid"
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -F 
"${GUGDEMO_RENDER_DIR}/J-cycle.${FEXT}" ${GENERAL_USER_GS2} "J-cycle.mid"
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -F 
"${GUGDEMO_RENDER_DIR}/Jump!.${FEXT}" ${GENERAL_USER_GS2} "Jump!.mid"
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -F "${GUGDEMO_RENDER_DIR}/Santa Claus 
is Comin' to Town.${FEXT}" ${GENERAL_USER_GS2} "Santa Claus is Comin' to 
Town.mid"
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -F "${GUGDEMO_RENDER_DIR}/The HYBRID 
Collage (v2.0) - by S. Christian Collins.${FEXT}" ${GENERAL_USER_GS2} "The 
HYBRID Collage (v2.0) - by S. Christian Collins.mid"
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -F "${GUGDEMO_RENDER_DIR}/Umi no Mieru 
Machi.${FEXT}" ${GENERAL_USER_GS2} "Umi no Mieru Machi.mid"
+    COMMENT "Rendering General User MIDI Demos"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY 
"${CMAKE_CURRENT_SOURCE_DIR}/manual/sf2/GeneralUser-GS/demo MIDIs"
+    VERBATIM
+)
+
+add_custom_target(renderBankSelect
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -F 
"${BANKSELECT_RENDER_DIR}/Dance_GM.${FEXT}" ${GENERAL_USER_GS2} "Dance_GM.mid"
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -F 
"${BANKSELECT_RENDER_DIR}/Dance_GM2.${FEXT}" ${GENERAL_USER_GS2} "Dance_GM2.mid"
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -F 
"${BANKSELECT_RENDER_DIR}/Dance_GS.${FEXT}" ${GENERAL_USER_GS2} "Dance_GS.mid"
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -F 
"${BANKSELECT_RENDER_DIR}/Dance_original.${FEXT}" ${GENERAL_USER_GS2} 
"Dance_original.mid"
+    COMMAND fluidsynth -R 0 -C 0 -g 0.6 -F 
"${BANKSELECT_RENDER_DIR}/Dance_XG.${FEXT}" ${GENERAL_USER_GS2} "Dance_XG.mid"
+    COMMENT "Rendering MIDI Bank selection tests"
+    DEPENDS fluidsynth create_iir_dir
+    WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/manual/midi-bank-select"
+    VERBATIM
+)
+
+if ( LIBINSTPATCH_SUPPORT )
+    add_custom_target(renderStreetwise
+        COMMAND fluidsynth -R 0 -C 0 -g 0.6 -F 
"${STACKEDSF_RENDER_DIR}/Streetwise.${FEXT}" "Streetwise.mid" 
${GENERAL_USER_GS2} "Streetwise.dls"
+        COMMENT "Rendering testcase for stacked soundfonts"
+        DEPENDS fluidsynth create_iir_dir
+        WORKING_DIRECTORY 
${CMAKE_CURRENT_SOURCE_DIR}/manual/stacked_sf2/Streetwise/
+        VERBATIM
+    )
+else ( LIBINSTPATCH_SUPPORT )
+    add_custom_target(renderStreetwise
+        COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red "Cannot render 
Streetwise, no DLS support!"
+        COMMENT "Rendering testcase for stacked soundfonts"
+    )
+endif (LIBINSTPATCH_SUPPORT )
+
+# Add a dependency so that rendering targets depends on check_manual
+add_dependencies(check_manual render1415)
+add_dependencies(check_manual render1417)
+add_dependencies(check_manual render1424)
+add_dependencies(check_manual render1427)
+add_dependencies(check_manual renderAltitude)
+add_dependencies(check_manual renderFilter)
+add_dependencies(check_manual renderUplift)
+add_dependencies(check_manual renderChrisNRPN)
+add_dependencies(check_manual renderHybridCol)
+add_dependencies(check_manual render1TOWOW)
+add_dependencies(check_manual renderDescent8)
+add_dependencies(check_manual renderSfSpecTest)
+add_dependencies(check_manual render1455)
+add_dependencies(check_manual renderDK64JJU)
+add_dependencies(check_manual renderExcl)
+add_dependencies(check_manual rendere1m1)
+add_dependencies(check_manual renderdspInterp)
+add_dependencies(check_manual render1484)
+add_dependencies(check_manual renderRealtimeIIR)
+add_dependencies(check_manual render1481)
+add_dependencies(check_manual renderStreetwise)
+add_dependencies(check_manual renderGeneralUserDemo)
+add_dependencies(check_manual renderBankSelect)
 
-endif()

Reply via email to