Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package fluidsynth for openSUSE:Factory checked in at 2021-11-24 23:54:08 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/fluidsynth (Old) and /work/SRC/openSUSE:Factory/.fluidsynth.new.1895 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fluidsynth" Wed Nov 24 23:54:08 2021 rev:63 rq:932926 version:2.2.4 Changes: -------- --- /work/SRC/openSUSE:Factory/fluidsynth/fluidsynth.changes 2021-10-19 23:03:30.473264244 +0200 +++ /work/SRC/openSUSE:Factory/.fluidsynth.new.1895/fluidsynth.changes 2021-11-24 23:54:09.928540859 +0100 @@ -1,0 +2,9 @@ +Mon Nov 22 09:58:54 CET 2021 - ti...@suse.de + +- Update to 2.2.4: + * Per-channel `ALL_SOUND_OFF` when seeking/stopping player + * Fix windows related encoding problems + * Rewind playlist when calling `fluid_player_play` after all loops are complete + * Fix MinGW related static linking issues + +------------------------------------------------------------------- Old: ---- fluidsynth-2.2.2.tar.gz New: ---- fluidsynth-2.2.4.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ fluidsynth.spec ++++++ --- /var/tmp/diff_new_pack.YDn9BT/_old 2021-11-24 23:54:10.528538845 +0100 +++ /var/tmp/diff_new_pack.YDn9BT/_new 2021-11-24 23:54:10.536538818 +0100 @@ -18,7 +18,7 @@ %define sover 3 Name: fluidsynth -Version: 2.2.2 +Version: 2.2.4 Release: 0 Summary: A Real-Time Software Synthesizer That Uses Soundfont(tm) License: LGPL-2.1-or-later ++++++ fluidsynth-2.2.2.tar.gz -> fluidsynth-2.2.4.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/.azure/azure-pipelines-mac.yml new/fluidsynth-2.2.4/.azure/azure-pipelines-mac.yml --- old/fluidsynth-2.2.2/.azure/azure-pipelines-mac.yml 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/.azure/azure-pipelines-mac.yml 2021-11-21 16:40:48.000000000 +0100 @@ -15,23 +15,35 @@ jobs: - job: macOS + strategy: + matrix: + 10_14: + imageName: 'macOS-10.14' + 10_15: + imageName: 'macOS-10.15' + 11_0: + imageName: 'macos-11' + pool: - vmImage: 'macOS-10.14' + vmImage: $(imageName) # recommended by https://github.com/Homebrew/brew/issues/2491#issuecomment-294207661 # brew update || brew update # brew upgrade $PACKAGES steps: - script: | + set -ex PACKAGES="glib gobject-introspection libsndfile pkg-config jack dbus-glib pulseaudio portaudio sdl2 libomp" brew install $PACKAGES displayName: 'Prerequisites' - script: | + set -ex mkdir build && cd build export PKG_CONFIG_PATH="/usr/local/opt/libffi/lib/pkgconfig" cmake -Werror=dev -DCMAKE_INSTALL_PREFIX=$(Build.ArtifactStagingDirectory) -DCMAKE_BUILD_TYPE=Release -DCMAKE_VERBOSE_MAKEFILE=1 -DNO_GUI=1 .. - make -j`nproc` + make -j3 displayName: 'Compile fluidsynth' - script: | + set -ex cd build || exit -1 - make -j`nproc` check || exit -1 + make -j3 check || exit -1 displayName: 'Execute Unittests' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/.azure/azure-pipelines-win.yml new/fluidsynth-2.2.4/.azure/azure-pipelines-win.yml --- old/fluidsynth-2.2.2/.azure/azure-pipelines-win.yml 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/.azure/azure-pipelines-win.yml 2021-11-21 16:40:48.000000000 +0100 @@ -152,6 +152,12 @@ gtk-bundle: $(gtk-bundle-x64) libsndfile-url: $(libsndfile-url-x64) mingw-url: $(mingw-url-x64) + x64-static: + CMAKE_FLAGS: '-DBUILD_SHARED_LIBS=0' + platform: x64 + gtk-bundle: $(gtk-bundle-x64) + libsndfile-url: $(libsndfile-url-x64) + mingw-url: $(mingw-url-x64) pool: vmImage: 'windows-2019' steps: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/.github/workflows/linux.yml new/fluidsynth-2.2.4/.github/workflows/linux.yml --- old/fluidsynth-2.2.2/.github/workflows/linux.yml 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/.github/workflows/linux.yml 2021-11-21 16:40:48.000000000 +0100 @@ -25,26 +25,22 @@ 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"] + 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: "gcc-7" - CXX: "g++-7" - CMAKE_FLAGS: "" - - CC: "gcc-8" - CXX: "g++-8" - CMAKE_FLAGS: "-Denable-debug=1 -DCMAKE_C_FLAGS_DEBUG=-fuse-ld=gold" - CC: "clang-7" CXX: "clang++-7" CMAKE_FLAGS: "" - CC: "clang-8" CXX: "clang++-8" CMAKE_FLAGS: "" - - CC: "clang-9" - CXX: "clang++-9" - CMAKE_FLAGS: "" - CC: "clang-10" CXX: "clang++-10" CMAKE_FLAGS: "" + - CC: "clang-12" + CXX: "clang++-12" + CMAKE_FLAGS: "" +# clang9 is covered by openSUSE Leap 15.2 +# clang11 is covered by openSUSE Leap 15.3 steps: - uses: actions/checkout@v2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/.obs/workflows.yml new/fluidsynth-2.2.4/.obs/workflows.yml --- old/fluidsynth-2.2.2/.obs/workflows.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/fluidsynth-2.2.4/.obs/workflows.yml 2021-11-21 16:40:48.000000000 +0100 @@ -0,0 +1,5 @@ +workflow: + steps: + - branch_package: + source_project: home:derselbst:anmp + source_package: fluidsynth diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/AUTHORS new/fluidsynth-2.2.4/AUTHORS --- old/fluidsynth-2.2.2/AUTHORS 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/AUTHORS 2021-11-21 16:40:48.000000000 +0100 @@ -152,3 +152,4 @@ Jean-jacques Ceresa Vladimir Davidovich Tam??s Korodi +Evan Miller diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/CMakeLists.txt new/fluidsynth-2.2.4/CMakeLists.txt --- old/fluidsynth-2.2.2/CMakeLists.txt 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/CMakeLists.txt 2021-11-21 16:40:48.000000000 +0100 @@ -30,7 +30,7 @@ endif() project ( FluidSynth C CXX ) -set ( CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake_admin ) +list( APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake_admin ) # FluidSynth package name set ( PACKAGE "fluidsynth" ) @@ -38,7 +38,7 @@ # FluidSynth package version set ( FLUIDSYNTH_VERSION_MAJOR 2 ) set ( FLUIDSYNTH_VERSION_MINOR 2 ) -set ( FLUIDSYNTH_VERSION_MICRO 2 ) +set ( FLUIDSYNTH_VERSION_MICRO 4 ) set ( VERSION "${FLUIDSYNTH_VERSION_MAJOR}.${FLUIDSYNTH_VERSION_MINOR}.${FLUIDSYNTH_VERSION_MICRO}" ) set ( FLUIDSYNTH_VERSION "\"${VERSION}\"" ) @@ -53,7 +53,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 0 ) -set ( LIB_VERSION_REVISION 2 ) +set ( LIB_VERSION_REVISION 4 ) set ( LIB_VERSION_INFO "${LIB_VERSION_CURRENT}.${LIB_VERSION_AGE}.${LIB_VERSION_REVISION}" ) @@ -90,6 +90,7 @@ option ( enable-pulseaudio "compile PulseAudio support (if it is available)" on ) option ( enable-readline "compile readline lib line editing (if it is available)" on ) option ( enable-threads "enable multi-threading support (such as parallel voice synthesis)" on ) +option ( enable-openmp "enable OpenMP support (parallelization of soundfont decoding, vectorization of voice mixing, etc.)" on ) # Platform specific options if ( CMAKE_SYSTEM MATCHES "Linux|FreeBSD|DragonFly" ) @@ -200,12 +201,12 @@ unset ( ENABLE_UBSAN CACHE ) if ( CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID STREQUAL "Intel" ) - if ( NOT APPLE AND NOT OS2 ) + if ( NOT APPLE AND NOT OS2 AND NOT EMSCRIPTEN ) set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed" ) set ( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined" ) - endif ( NOT APPLE AND NOT OS2 ) + endif ( NOT APPLE AND NOT OS2 AND NOT EMSCRIPTEN ) # define some warning flags set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -W -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wno-unused-parameter -Wdeclaration-after-statement -Werror=implicit-function-declaration" ) @@ -332,6 +333,10 @@ if ( MINGW ) set ( MINGW32 1 ) add_compile_options ( -mms-bitfields ) + # mman-win32 + if ( HAVE_SYS_MMAN_H ) + set ( WINDOWS_LIBS "${WINDOWS_LIBS};mman" ) + endif () endif ( MINGW ) else ( WIN32 ) # Check PThreads, but not in Windows @@ -513,6 +518,7 @@ # Mandatory libraries: glib and gthread pkg_check_modules ( GLIB REQUIRED glib-2.0>=2.6.5 gthread-2.0>=2.6.5 ) + list( APPEND PC_REQUIRES_PRIV "glib-2.0" "gthread-2.0") if ( GLIB_glib-2.0_VERSION AND GLIB_glib-2.0_VERSION VERSION_LESS "2.26.0" ) message ( WARNING "Your version of glib is very old. This may cause problems with fluidsynth's sample cache on Windows. Consider updating to glib 2.26 or newer!" ) @@ -527,6 +533,7 @@ pkg_check_modules ( LIBSNDFILE sndfile>=1.0.0 ) set ( LIBSNDFILE_SUPPORT ${LIBSNDFILE_FOUND} ) if ( LIBSNDFILE_SUPPORT ) + list( APPEND PC_REQUIRES_PRIV "sndfile") message (DEBUG "LIBSNDFILE_STATIC_LIBRARIES: ${LIBSNDFILE_STATIC_LIBRARIES}") message (DEBUG "LIBSNDFILE_STATIC_LINK_LIBRARIES: ${LIBSNDFILE_STATIC_LINK_LIBRARIES}") message (DEBUG "LIBSNDFILE_STATIC_LDFLAGS: ${LIBSNDFILE_STATIC_LDFLAGS}") @@ -548,6 +555,9 @@ if ( enable-pulseaudio ) pkg_check_modules ( PULSE libpulse-simple>=0.9.8 ) set ( PULSE_SUPPORT ${PULSE_FOUND} ) + if ( PULSE_SUPPORT ) + list( APPEND PC_REQUIRES_PRIV "libpulse-simple") + endif ( PULSE_SUPPORT ) else ( enable-pulseaudio ) unset_pkg_config ( PULSE ) endif ( enable-pulseaudio ) @@ -556,6 +566,9 @@ if ( enable-alsa ) pkg_check_modules ( ALSA alsa>=0.9.1 ) set ( ALSA_SUPPORT ${ALSA_FOUND} ) + if ( ALSA_SUPPORT ) + list( APPEND PC_REQUIRES_PRIV "alsa") + endif ( ALSA_SUPPORT ) else ( enable-alsa ) unset_pkg_config ( ALSA ) endif ( enable-alsa ) @@ -564,6 +577,9 @@ if ( enable-portaudio ) pkg_check_modules ( PORTAUDIO portaudio-2.0>=19 ) set ( PORTAUDIO_SUPPORT ${PORTAUDIO_FOUND} ) + if ( PORTAUDIO_SUPPORT ) + list( APPEND PC_REQUIRES_PRIV "portaudio-2.0") + endif () else ( enable-portaudio ) unset_pkg_config ( PORTAUDIO ) endif ( enable-portaudio ) @@ -572,6 +588,9 @@ if ( enable-jack ) pkg_check_modules ( JACK jack ) set ( JACK_SUPPORT ${JACK_FOUND} ) + if ( JACK_SUPPORT ) + list( APPEND PC_REQUIRES_PRIV "jack") + endif () else ( enable-jack ) unset_pkg_config ( JACK ) endif ( enable-jack ) @@ -582,6 +601,7 @@ if ( LASH_FOUND ) set ( LASH_SUPPORT 1 ) add_definitions ( -DHAVE_LASH ) + list( APPEND PC_REQUIRES_PRIV "lash-1.0") endif ( LASH_FOUND ) else ( enable-lash ) unset_pkg_config ( LASH ) @@ -592,6 +612,9 @@ if ( enable-systemd ) pkg_check_modules ( SYSTEMD libsystemd ) set ( SYSTEMD_SUPPORT ${SYSTEMD_FOUND} ) + if ( SYSTEMD_SUPPORT ) + list( APPEND PC_REQUIRES_PRIV "libsystemd") + endif ( SYSTEMD_SUPPORT ) else ( enable-systemd ) unset_pkg_config ( SYSTEMD ) endif ( enable-systemd ) @@ -600,6 +623,9 @@ if ( enable-dbus ) pkg_check_modules ( DBUS dbus-1>=1.0.0 ) set ( DBUS_SUPPORT ${DBUS_FOUND} ) + if ( DBUS_SUPPORT ) + list( APPEND PC_REQUIRES_PRIV "dbus-1") + endif () else ( enable-dbus ) unset_pkg_config ( DBUS ) endif ( enable-dbus ) @@ -610,6 +636,7 @@ if ( LADSPA_SUPPORT ) pkg_check_modules ( GMODULE REQUIRED gmodule-2.0>=2.6.5 ) set ( LADSPA 1 ) + list( APPEND PC_REQUIRES_PRIV "gmodule-2.0") endif ( LADSPA_SUPPORT ) endif ( enable-ladspa ) @@ -617,25 +644,30 @@ if ( enable-libinstpatch ) pkg_check_modules ( LIBINSTPATCH libinstpatch-1.0>=1.1.0 ) set ( LIBINSTPATCH_SUPPORT ${LIBINSTPATCH_FOUND} ) + if ( LIBINSTPATCH_SUPPORT ) + list( APPEND PC_REQUIRES_PRIV "libinstpatch-1.0") + endif (LIBINSTPATCH_SUPPORT ) endif ( enable-libinstpatch ) unset ( SDL2_SUPPORT CACHE ) if ( enable-sdl2 ) pkg_check_modules ( SDL2 sdl2 ) set ( SDL2_SUPPORT ${SDL2_FOUND} ) + if ( SDL2_SUPPORT ) + list( APPEND PC_REQUIRES_PRIV "sdl2") + endif ( SDL2_SUPPORT ) else ( enable-sdl2 ) unset_pkg_config ( SDL2 ) endif ( enable-sdl2 ) unset ( OBOE_SUPPORT CACHE ) - unset ( OBOE_LIBS CACHE ) if ( enable-oboe ) pkg_check_modules ( OBOE oboe-1.0 ) if ( OBOE_FOUND ) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set ( OBOE_SUPPORT 1 ) - set ( OBOE_LIBS ${OBOE_LIBRARIES} ) + list( APPEND PC_REQUIRES_PRIV "oboe-1.0") endif ( OBOE_FOUND ) endif ( enable-oboe ) @@ -643,10 +675,12 @@ unset ( READLINE_LIBS CACHE ) if ( enable-readline ) pkg_check_modules ( READLINE readline ) - if ( NOT READLINE_FOUND ) + if ( READLINE_FOUND ) + list( APPEND PC_REQUIRES_PRIV "readline") + else ( READLINE_FOUND ) find_package ( READLINE ) set ( READLINE_FOUND ${HAVE_READLINE} ) - endif ( NOT READLINE_FOUND ) + endif ( READLINE_FOUND ) if ( READLINE_FOUND ) set ( WITH_READLINE 1 ) set ( READLINE_LIBS ${READLINE_LIBRARIES} ) @@ -698,7 +732,7 @@ unset ( HAVE_OPENMP CACHE ) find_package ( OpenMP QUIET ) -if ( OpenMP_FOUND OR OpenMP_C_FOUND ) +if (enable-openmp AND ( OpenMP_FOUND OR OpenMP_C_FOUND ) ) message(STATUS "Found OpenMP ${OpenMP_C_SPEC_DATE}") # require at least OMP 4.0 if ( ( NOT OpenMP_C_SPEC_DATE LESS "201307" ) OR NOT ( OpenMP_C_VERSION VERSION_LESS "4.0" ) ) @@ -774,6 +808,18 @@ endif ( HAVE_INETNTOP ) endif ( enable-ipv6 ) +unset ( HAVE_SOCKLEN_T CACHE ) +set ( CMAKE_EXTRA_INCLUDE_FILES_SAVE ${CMAKE_EXTRA_INCLUDE_FILES} ) +if ( WIN32 ) + set ( CMAKE_EXTRA_INCLUDE_FILES "winsock2.h;ws2tcpip.h" ) +else ( WIN32 ) + set ( CMAKE_EXTRA_INCLUDE_FILES sys/socket.h ) +endif ( WIN32 ) +check_type_size ( socklen_t SOCKLEN_T ) +set ( CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES_SAVE} ) +if ( HAVE_SOCKLEN_T ) + set ( HAVE_SOCKLEN_T 1 ) +endif ( HAVE_SOCKLEN_T ) # General configuration file configure_file ( ${CMAKE_SOURCE_DIR}/src/config.cmake @@ -816,7 +862,7 @@ set ( includedir "\${prefix}/${INCLUDE_INSTALL_DIR}" ) endif () -if ( CMAKE_VERSION VERSION_GREATER_EQUAL "3.12.0" ) +if ( CMAKE_VERSION VERSION_EQUAL "3.12.0" OR CMAKE_VERSION VERSION_GREATER "3.12.0" ) # retrieve all the private libs we depend on get_target_property ( LIBS_PRIVATE libfluidsynth INTERFACE_LINK_LIBRARIES) # make a copy @@ -837,7 +883,9 @@ set ( LIBS_PRIVATE "" ) set ( LIBS_PRIVATE_WITH_PATH "" ) message ( DEPRECATION "Your version of CMake is old. A complete pkg-config file can not created. Get cmake 3.13.3 or newer." ) -endif ( CMAKE_VERSION VERSION_GREATER_EQUAL "3.12.0" ) +endif ( CMAKE_VERSION VERSION_EQUAL "3.12.0" OR CMAKE_VERSION VERSION_GREATER "3.12.0" ) + +list ( JOIN PC_REQUIRES_PRIV " " PC_REQUIRES_PRIV_JOINED ) configure_file ( fluidsynth.pc.in ${CMAKE_BINARY_DIR}/fluidsynth.pc IMMEDIATE @ONLY ) @@ -846,10 +894,6 @@ # Extra targets for Unix build environments if ( UNIX ) - # RPM spec - configure_file ( fluidsynth.spec.in - ${CMAKE_BINARY_DIR}/fluidsynth.spec IMMEDIATE @ONLY ) - if ( DEFINED FLUID_DAEMON_ENV_FILE) configure_file ( fluidsynth.service.in ${CMAKE_BINARY_DIR}/fluidsynth.service @ONLY ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/contrib/baselibs.conf new/fluidsynth-2.2.4/contrib/baselibs.conf --- old/fluidsynth-2.2.2/contrib/baselibs.conf 1970-01-01 01:00:00.000000000 +0100 +++ new/fluidsynth-2.2.4/contrib/baselibs.conf 2021-11-21 16:40:48.000000000 +0100 @@ -0,0 +1 @@ +libfluidsynth2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/contrib/debian.changelog new/fluidsynth-2.2.4/contrib/debian.changelog --- old/fluidsynth-2.2.2/contrib/debian.changelog 1970-01-01 01:00:00.000000000 +0100 +++ new/fluidsynth-2.2.4/contrib/debian.changelog 2021-11-21 16:40:48.000000000 +0100 @@ -0,0 +1,23 @@ +fluidsynth (1.1.8-1) unstable; urgency=low + + - Update to version 1.1.8: + * fix build against glib < 2.30 (#202) + * fix dsound audio driver on windows (#215) + * fix a bug around `synth.audio-groups` setting, which caused improper multi-channel rendering (#225) + * cmake 3.0.2 is now required + * compilation with clang is now possible + * build fixes on OS/2 (thanks to @komh) + + -- Tom Moebert <tom.m...@googlemail.com> Fri, 13 Oct 2017 15:53:00 +0000 + +fluidsynth (1.1.7-1) unstable; urgency=low + + * OBS snapshot. + + -- Rui Nuno Capela <rn...@rncbc.org> Tue, 5 Sep 2017 20:00:00 +0000 + +fluidsynth (1.1.6-1) unstable; urgency=low + + * OBS snapshot. + + -- Rui Nuno Capela <rn...@rncbc.org> Sun, 19 Aug 2012 23:45:01 +0000 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/contrib/debian.compat new/fluidsynth-2.2.4/contrib/debian.compat --- old/fluidsynth-2.2.2/contrib/debian.compat 1970-01-01 01:00:00.000000000 +0100 +++ new/fluidsynth-2.2.4/contrib/debian.compat 2021-11-21 16:40:48.000000000 +0100 @@ -0,0 +1 @@ +9 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/contrib/debian.control new/fluidsynth-2.2.4/contrib/debian.control --- old/fluidsynth-2.2.2/contrib/debian.control 1970-01-01 01:00:00.000000000 +0100 +++ new/fluidsynth-2.2.4/contrib/debian.control 2021-11-21 16:40:48.000000000 +0100 @@ -0,0 +1,34 @@ +Source: fluidsynth +Priority: optional +Section: sound +Maintainer: Rui Nuno Capela <rn...@rncbc.org> +Build-Depends: debhelper (>= 5.0.0), cmake, pkg-config, libdb-dev, libjack-dev, libasound2-dev, + libsndfile-dev, libglib2.0-dev +Standards-Version: 3.7.2 + +Package: libfluidsynth1 +Section: libs +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: FluidSynth is a real-time software synthesizer + FluidSynth is a real-time software synthesizer based on + the SoundFont 2 specifications. + +Package: libfluidsynth-dev +Section: libdevel +Architecture: any +Depends: libfluidsynth1 (= ${source:Version}) +Description: FluidSynth is a real-time software synthesizer + FluidSynth is a real-time software synthesizer based on + the SoundFont 2 specifications. + This package contains the header file required for compiling + hosts and plugins. + +Package: fluidsynth +Section: sound +Architecture: any +Depends: libfluidsynth1 (= ${source:Version}) +Description: FluidSynth is a real-time software synthesizer + FluidSynth is a real-time software synthesizer based on + the SoundFont 2 specifications. + This package contains the command-line utilities. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/contrib/debian.copyright new/fluidsynth-2.2.4/contrib/debian.copyright --- old/fluidsynth-2.2.2/contrib/debian.copyright 1970-01-01 01:00:00.000000000 +0100 +++ new/fluidsynth-2.2.4/contrib/debian.copyright 2021-11-21 16:40:48.000000000 +0100 @@ -0,0 +1,30 @@ +This package was debianized by Rui Nuno Capela <rn...@rncbc.org> on +Mon, 25 Jun 2007 10:42:40 +0100. + +It was downloaded from http://www.fluidsynth.org + +Upstream Author: Rui Nuno Capela <rn...@rncbc.org> + +Copyright: + + Copyright (C) 2003-2015, rncbc aka Rui Nuno Capela. All rights reserved. + +License: + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +The Debian packaging is (C) 2007-2013, Rui Nuno Capela <rn...@rncbc.org> and +is licensed under the GPL, see `/usr/share/common-licenses/GPL'. + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/contrib/debian.fluidsynth.install new/fluidsynth-2.2.4/contrib/debian.fluidsynth.install --- old/fluidsynth-2.2.2/contrib/debian.fluidsynth.install 1970-01-01 01:00:00.000000000 +0100 +++ new/fluidsynth-2.2.4/contrib/debian.fluidsynth.install 2021-11-21 16:40:48.000000000 +0100 @@ -0,0 +1,2 @@ +debian/tmp/usr/bin/* +debian/tmp/usr/share/* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/contrib/debian.libfluidsynth-dev.install new/fluidsynth-2.2.4/contrib/debian.libfluidsynth-dev.install --- old/fluidsynth-2.2.2/contrib/debian.libfluidsynth-dev.install 1970-01-01 01:00:00.000000000 +0100 +++ new/fluidsynth-2.2.4/contrib/debian.libfluidsynth-dev.install 2021-11-21 16:40:48.000000000 +0100 @@ -0,0 +1,3 @@ +debian/tmp/usr/include/* +debian/tmp/usr/lib*/*.so +debian/tmp/usr/lib*/pkgconfig/*.pc diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/contrib/debian.libfluidsynth1.install new/fluidsynth-2.2.4/contrib/debian.libfluidsynth1.install --- old/fluidsynth-2.2.2/contrib/debian.libfluidsynth1.install 1970-01-01 01:00:00.000000000 +0100 +++ new/fluidsynth-2.2.4/contrib/debian.libfluidsynth1.install 2021-11-21 16:40:48.000000000 +0100 @@ -0,0 +1 @@ +debian/tmp/usr/lib*/lib*.so.* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/contrib/debian.rules new/fluidsynth-2.2.4/contrib/debian.rules --- old/fluidsynth-2.2.2/contrib/debian.rules 1970-01-01 01:00:00.000000000 +0100 +++ new/fluidsynth-2.2.4/contrib/debian.rules 2021-11-21 16:40:48.000000000 +0100 @@ -0,0 +1,98 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# GNU copyright 1997 to 1999 by Joey Hess. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +# This is the debhelper compatibility version to use. +#export DH_COMPAT=7 + +# These are used for cross-compiling and for saving the configure script +# from having to guess our platform (since we know it already) +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) + + +ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS))) + CFLAGS += -g +endif +ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) + INSTALL_PROGRAM += -s +endif + +config.status: CMakeLists.txt + dh_testdir + + # Add here commands to configure the package. + cmake -DCMAKE_INSTALL_PREFIX=/usr -DLIB_INSTALL_DIR=/usr/lib . + +build: build-stamp +build-stamp: config.status + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + + # the build should fail if the tests are not successful + #$(MAKE) check + + touch build-stamp + +clean: + dh_testdir + dh_testroot + rm -f build-stamp + + # Add here commands to clean up after the build process. + #-$(MAKE) distclean + + dh_clean -a + +install: build + dh_testdir + dh_testroot + dh_clean -k -a + dh_installdirs + + # Add here commands to install the package into debian/tmp + $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_install -a --list-missing +# dh_installchangelogs -a ChangeLog +# dh_installdocs -a +# dh_installexamples +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_installinit +# dh_installcron +# dh_installinfo +# dh_installman +# dh_link + dh_strip -a + dh_compress -a + dh_fixperms -a +# dh_perl +# dh_python + dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/contrib/fluidsynth.dsc new/fluidsynth-2.2.4/contrib/fluidsynth.dsc --- old/fluidsynth-2.2.2/contrib/fluidsynth.dsc 1970-01-01 01:00:00.000000000 +0100 +++ new/fluidsynth-2.2.4/contrib/fluidsynth.dsc 2021-11-21 16:40:48.000000000 +0100 @@ -0,0 +1,8 @@ +Format: 1.0 +Source: fluidsynth +Version: 2.2.0-1 +Binary: fluidsynth, libfluidsynth1, libfluidsynth-dev +Maintainer: Rui Nuno Capela <rn...@rncbc.org> +Architecture: any +Standards-Version: 3.7.2 +Build-Depends: debhelper (>= 5.0.0), cmake, pkg-config, libdb-dev, libjack-dev, libasound2-dev, libsndfile-dev, libglib2.0-dev diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/contrib/fluidsynth.spec new/fluidsynth-2.2.4/contrib/fluidsynth.spec --- old/fluidsynth-2.2.2/contrib/fluidsynth.spec 1970-01-01 01:00:00.000000000 +0100 +++ new/fluidsynth-2.2.4/contrib/fluidsynth.spec 2021-11-21 16:40:48.000000000 +0100 @@ -0,0 +1,142 @@ +# +# spec file for package fluidsynth +# +# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +# fix build for older distros and architectures where _fillupdir is +# not yet defined by using the old path as recommended by +# https://en.opensuse.org/openSUSE:Packaging_Conventions_RPM_Macros#.25_fillupdir +%if ! %{defined _fillupdir} + %define _fillupdir /var/adm/fillup-templates +%endif + +Name: fluidsynth +Version: 2.2.2 +Release: 0 +Summary: A Real-Time Software Synthesizer That Uses Soundfont(tm) +License: LGPL-2.1-or-later +Group: Productivity/Multimedia/Sound/Midi +Url: http://www.fluidsynth.org/ +Source: https://github.com/FluidSynth/%{name}/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz +Source1000: baselibs.conf +BuildRequires: cmake >= 3.1.0 +BuildRequires: gcc-c++ +%if 0%{?is_opensuse} +BuildRequires: ladspa-devel +%endif +BuildRequires: pkgconfig +BuildRequires: readline-devel +BuildRequires: pkgconfig(alsa) +BuildRequires: pkgconfig(dbus-1) +BuildRequires: pkgconfig(jack) +BuildRequires: pkgconfig(libinstpatch-1.0) >= 1.1.0 +BuildRequires: pkgconfig(libpulse) +BuildRequires: pkgconfig(sndfile) +%if 0%{?suse_version} +%{?systemd_requires} +PreReq: %fillup_prereq +%endif + +%description +FluidSynth (formerly IIWU Synth) is a real-time software synthesizer +based on the SoundFont(tm) 2 specifications. It can read MIDI events +from the MIDI input device and render them to the audio device. It +can also play MIDI files. + +%package devel +Summary: Development package for the fluidsynth library +Group: Development/Libraries/C and C++ +Requires: glibc-devel +Requires: libfluidsynth3 = %{version} +Provides: libfluidsynth-devel = %{version} + +%description devel +This package contains the files needed to compile programs that use the +fluidsynth library. + +%package -n libfluidsynth3 +Summary: Library for Fluidsynth +Group: System/Libraries + +%description -n libfluidsynth3 +This package contains the shared library for Fluidsynth. + +%prep +%setup -q + +%build +%cmake \ + -DFLUID_DAEMON_ENV_FILE=%{_fillupdir}/sysconfig.%{name} \ + -Denable-lash=0 +%cmake_build + +%check +%cmake +%if 0%{?fedora_version} || 0%{?mageia} +%cmake_build --target check +%else +%cmake_build check +%endif + +%install +%cmake_install + +%if 0%{?suse_version} + +# manually install systemd service files +install -Dm 644 build/fluidsynth.conf %{buildroot}%{_fillupdir}/sysconfig.%{name} +install -Dm 644 build/fluidsynth.service %{buildroot}%{_unitdir}/%{name}.service +install -d %{buildroot}%{_sbindir} +ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rc%{name} + +%pre +%service_add_pre %{name}.service + +%post +%fillup_only +%service_add_post %{name}.service + +%preun +%service_del_preun %{name}.service + +%postun +%service_del_postun %{name}.service + +%endif + +%post -n libfluidsynth3 -p /sbin/ldconfig +%postun -n libfluidsynth3 -p /sbin/ldconfig + +%files +%license LICENSE +%doc AUTHORS ChangeLog README.md THANKS TODO +%{_mandir}/man?/* +%{_bindir}/* +%if 0%{?suse_version} +%{_unitdir}/%{name}.service +%{_sbindir}/rc%{name} +%{_fillupdir}/sysconfig.%{name} +%endif + +%files devel +%{_libdir}/lib*.so +%{_includedir}/* +%{_libdir}/pkgconfig/*.pc + +%files -n libfluidsynth3 +%{_libdir}/lib*.so.* + +%changelog diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/doc/fluidsettings.xml new/fluidsynth-2.2.4/doc/fluidsettings.xml --- old/fluidsynth-2.2.2/doc/fluidsettings.xml 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/doc/fluidsettings.xml 2021-11-21 16:40:48.000000000 +0100 @@ -591,6 +591,15 @@ </desc> </setting> <setting> + <name>oboe.error-recovery-mode</name> + <type>str</type> + <def>Reconnect</def> + <vals>Reconnect, Stop</vals> + <desc> + Sets the error recovery mode when audio device error such as earphone disconnection occurred. It reconnects by default (same as OpenSLES behavior), but can be stopped if Stop is specified. + </desc> + </setting> + <setting> <name>oss.device</name> <type>str</type> <def>/dev/dsp</def> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/doc/fluidsynth-v20-devdoc.txt new/fluidsynth-2.2.4/doc/fluidsynth-v20-devdoc.txt --- old/fluidsynth-2.2.2/doc/fluidsynth-v20-devdoc.txt 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/doc/fluidsynth-v20-devdoc.txt 2021-11-21 16:40:48.000000000 +0100 @@ -8,8 +8,8 @@ \author David Henningsson \author Tom Moebert \author Copyright © 2003-2021 Peter Hanappe, Conrad Berh??rster, Antoine Schmitt, Pedro L??pez-Cabanillas, Josh Green, David Henningsson, Tom Moebert -\version Revision 2.2.2 -\date 2021-07-09 +\version Revision 2.2.4 +\date 2021-11-21 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.2.2/fluidsynth.pc.in new/fluidsynth-2.2.4/fluidsynth.pc.in --- old/fluidsynth-2.2.2/fluidsynth.pc.in 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/fluidsynth.pc.in 2021-11-21 16:40:48.000000000 +0100 @@ -6,6 +6,7 @@ Name: FluidSynth Description: Software SoundFont synth Version: @VERSION@ +Requires.private: @PC_REQUIRES_PRIV_JOINED@ Libs: -L${libdir} -lfluidsynth Libs.private: @LIBS_PRIVATE_JOINED@ @LIBS_PRIVATE_WITH_PATH_JOINED@ Cflags: -I${includedir} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/fluidsynth.spec.in new/fluidsynth-2.2.4/fluidsynth.spec.in --- old/fluidsynth-2.2.2/fluidsynth.spec.in 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/fluidsynth.spec.in 1970-01-01 01:00:00.000000000 +0100 @@ -1,76 +0,0 @@ - -%define name @PACKAGE@ -%define version @VERSION@ -%define release 1 -%define prefix /usr - -Summary: A real-time software synthesizer based on SoundFont 2 specifications. -Name: %{name} -Version: %{version} -Release: %{release} -Prefix: %{prefix} -Copyright: LGPL -Group: Sound -Source: https://savannah.nongnu.org/download/fluid/stable.pkg/%{version}/fluidsynth-%{version}.tar.gz -URL: https://www.fluidsynth.org/ -BuildRoot: /var/tmp/%{name}-%{version} - -%description -FluidSynth is a real-time software synthesizer based on the SoundFont -2 specifications. FluidSynth can read MIDI events from MIDI input -devices and render them to audio devices using SoundFont files to -define the instrument sounds. It can also play MIDI files and supports -real time effect control via SoundFont modulators and MIDI -controls. FluidSynth can be interfaced to other programs in different -ways, including linking as a shared library. - -%package devel -Summary: Libraries and includes to build FluidSynth into other applications -Group: Development/Libraries - -%description devel -FluidSynth is a real-time software synthesizer based on the SoundFont -2 specifications. FluidSynth can read MIDI events from MIDI input -devices and render them to audio devices using SoundFont files to -define the instrument sounds. It can also play MIDI files and supports -real time effect control via SoundFont modulators and MIDI -controls. FluidSynth can be interfaced to other programs in different -ways, including linking as a shared library. - -This package contains libraries and includes for building applications -with FluidSynth support. - -%prep -%setup - -%build -./configure --prefix=%{prefix} -make - -%install -if [ -d $RPM_BUILD_ROOT ]; then rm -rf $RPM_BUILD_ROOT; fi -mkdir -p $RPM_BUILD_ROOT -make prefix=$RPM_BUILD_ROOT%{prefix} install - -%clean -if [ -d $RPM_BUILD_ROOT ]; then rm -rf $RPM_BUILD_ROOT; fi - -%files -%defattr(-,root,root) -%doc AUTHORS COPYING ChangeLog NEWS README TODO -%{prefix}/bin/fluidsynth -%{prefix}/lib/libfluidsynth.so* -%{prefix}/man/man1/* - -%files devel -%defattr(-,root,root) -%doc doc/example.c doc/example.sf2 doc/api doc/html/* -%{prefix}/lib/libfluidsynth.a -%{prefix}/lib/libfluidsynth.la -%{prefix}/lib/pkgconfig/fluidsynth.pc -%{prefix}/include/fluidsynth.h -%{prefix}/include/fluidsynth - -%changelog -* Mon Aug 25 2003 Josh Green <jgr...@users.sourceforge.net> -- Created initial fluidsynth.spec.in diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/include/fluidsynth/sfont.h new/fluidsynth-2.2.4/include/fluidsynth/sfont.h --- old/fluidsynth-2.2.2/include/fluidsynth/sfont.h 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/include/fluidsynth/sfont.h 2021-11-21 16:40:48.000000000 +0100 @@ -26,7 +26,7 @@ #endif /** - * @defgroup soundfonts SountFonts + * @defgroup soundfonts SoundFonts * * SoundFont related functions * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/src/CMakeLists.txt new/fluidsynth-2.2.4/src/CMakeLists.txt --- old/fluidsynth-2.2.2/src/CMakeLists.txt 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/src/CMakeLists.txt 2021-11-21 16:40:48.000000000 +0100 @@ -366,7 +366,7 @@ ${WINDOWS_LIBS} ${MidiShare_LIBS} ${OpenSLES_LIBS} - ${OBOE_LIBS} + ${OBOE_LIBRARIES} ${LIBFLUID_LIBS} ${LIBINSTPATCH_LIBRARIES} ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/src/bindings/fluid_ladspa.c new/fluidsynth-2.2.4/src/bindings/fluid_ladspa.c --- old/fluidsynth-2.2.2/src/bindings/fluid_ladspa.c 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/src/bindings/fluid_ladspa.c 2021-11-21 16:40:48.000000000 +0100 @@ -1325,13 +1325,16 @@ * are private to this effect, so we can safely remove them here. Nodes connected * to audio ports might be connected to other effects as well, so we simply remove * any pointers to them from the effect. */ - for(i = 0; i < effect->desc->PortCount; i++) + if(effect->desc != NULL) { - node = (fluid_ladspa_node_t *) effect->port_nodes[i]; - - if(node && node->type & FLUID_LADSPA_NODE_CONTROL) + for(i = 0; i < effect->desc->PortCount; i++) { - delete_fluid_ladspa_node(node); + node = (fluid_ladspa_node_t *) effect->port_nodes[i]; + + if(node && node->type & FLUID_LADSPA_NODE_CONTROL) + { + delete_fluid_ladspa_node(node); + } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/src/config.cmake new/fluidsynth-2.2.4/src/config.cmake --- old/fluidsynth-2.2.2/src/config.cmake 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/src/config.cmake 2021-11-21 16:40:48.000000000 +0100 @@ -262,4 +262,7 @@ /* Define to 1 if you have the logf() function. */ #cmakedefine HAVE_LOGF @HAVE_LOGF@ +/* Define to 1 if you have the socklen_t type. */ +#cmakedefine HAVE_SOCKLEN_T @HAVE_SOCKLEN_T@ + #endif /* CONFIG_H */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/src/drivers/fluid_coreaudio.c new/fluidsynth-2.2.4/src/drivers/fluid_coreaudio.c --- old/fluidsynth-2.2.2/src/drivers/fluid_coreaudio.c 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/src/drivers/fluid_coreaudio.c 2021-11-21 16:40:48.000000000 +0100 @@ -187,14 +187,22 @@ dev->data = data; // Open the default output unit +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 + ComponentDescription desc; +#else AudioComponentDescription desc; +#endif desc.componentType = kAudioUnitType_Output; desc.componentSubType = kAudioUnitSubType_HALOutput; //kAudioUnitSubType_DefaultOutput; desc.componentManufacturer = kAudioUnitManufacturer_Apple; desc.componentFlags = 0; desc.componentFlagsMask = 0; +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 + Component comp = FindNextComponent(NULL, &desc); +#else AudioComponent comp = AudioComponentFindNext(NULL, &desc); +#endif if(comp == NULL) { @@ -202,7 +210,11 @@ goto error_recovery; } +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 + status = OpenAComponent(comp, &dev->outputUnit); +#else status = AudioComponentInstanceNew(comp, &dev->outputUnit); +#endif if(status != noErr) { @@ -372,7 +384,11 @@ fluid_core_audio_driver_t *dev = (fluid_core_audio_driver_t *) p; fluid_return_if_fail(dev != NULL); +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 + CloseComponent(dev->outputUnit); +#else AudioComponentInstanceDispose(dev->outputUnit); +#endif if(dev->buffers[0]) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/src/drivers/fluid_oboe.cpp new/fluidsynth-2.2.4/src/drivers/fluid_oboe.cpp --- old/fluidsynth-2.2.2/src/drivers/fluid_oboe.cpp 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/src/drivers/fluid_oboe.cpp 2021-11-21 16:40:48.000000000 +0100 @@ -43,6 +43,7 @@ constexpr int NUM_CHANNELS = 2; class OboeAudioStreamCallback; +class OboeAudioStreamErrorCallback; /** fluid_oboe_audio_driver_t * @@ -55,7 +56,16 @@ fluid_synth_t *synth = nullptr; bool cont = false; std::unique_ptr<OboeAudioStreamCallback> oboe_callback; + std::unique_ptr<OboeAudioStreamErrorCallback> oboe_error_callback; std::shared_ptr<AudioStream> stream; + + double sample_rate; + int is_sample_format_float; + int device_id; + int sharing_mode; // 0: Shared, 1: Exclusive + int performance_mode; // 0: None, 1: PowerSaving, 2: LowLatency + oboe::SampleRateConversionQuality srate_conversion_quality; + int error_recovery_mode; // 0: Reconnect, 1: Stop } fluid_oboe_audio_driver_t; @@ -93,20 +103,34 @@ void *user_data; }; +class OboeAudioStreamErrorCallback : public AudioStreamErrorCallback +{ + fluid_oboe_audio_driver_t *dev; + +public: + OboeAudioStreamErrorCallback(fluid_oboe_audio_driver_t *dev) : dev(dev) {} + + void onErrorAfterClose(AudioStream *stream, Result result); +}; + +constexpr char OBOE_ID[] = "audio.oboe.id"; +constexpr char SHARING_MODE[] = "audio.oboe.sharing-mode"; +constexpr char PERF_MODE[] = "audio.oboe.performance-mode"; constexpr char SRCQ_SET[] = "audio.oboe.sample-rate-conversion-quality"; +constexpr char RECOVERY_MODE[] = "audio.oboe.error-recovery-mode"; void fluid_oboe_audio_driver_settings(fluid_settings_t *settings) { - fluid_settings_register_int(settings, "audio.oboe.id", 0, 0, 0x7FFFFFFF, 0); + fluid_settings_register_int(settings, OBOE_ID, 0, 0, 0x7FFFFFFF, 0); - fluid_settings_register_str(settings, "audio.oboe.sharing-mode", "Shared", 0); - fluid_settings_add_option(settings, "audio.oboe.sharing-mode", "Shared"); - fluid_settings_add_option(settings, "audio.oboe.sharing-mode", "Exclusive"); - - fluid_settings_register_str(settings, "audio.oboe.performance-mode", "None", 0); - fluid_settings_add_option(settings, "audio.oboe.performance-mode", "None"); - fluid_settings_add_option(settings, "audio.oboe.performance-mode", "PowerSaving"); - fluid_settings_add_option(settings, "audio.oboe.performance-mode", "LowLatency"); + fluid_settings_register_str(settings, SHARING_MODE, "Shared", 0); + fluid_settings_add_option(settings, SHARING_MODE, "Shared"); + fluid_settings_add_option(settings, SHARING_MODE, "Exclusive"); + + fluid_settings_register_str(settings, PERF_MODE, "None", 0); + fluid_settings_add_option(settings, PERF_MODE, "None"); + fluid_settings_add_option(settings, PERF_MODE, "PowerSaving"); + fluid_settings_add_option(settings, PERF_MODE, "LowLatency"); fluid_settings_register_str(settings, SRCQ_SET, "Medium", 0); fluid_settings_add_option(settings, SRCQ_SET, "None"); @@ -115,6 +139,10 @@ fluid_settings_add_option(settings, SRCQ_SET, "Medium"); fluid_settings_add_option(settings, SRCQ_SET, "High"); fluid_settings_add_option(settings, SRCQ_SET, "Best"); + + fluid_settings_register_str(settings, RECOVERY_MODE, "Reconnect", 0); + fluid_settings_add_option(settings, RECOVERY_MODE, "Reconnect"); + fluid_settings_add_option(settings, RECOVERY_MODE, "Stop"); } static oboe::SampleRateConversionQuality get_srate_conversion_quality(fluid_settings_t *settings) @@ -157,6 +185,28 @@ return q; } +Result +fluid_oboe_connect_or_reconnect(fluid_oboe_audio_driver_t *dev) +{ + AudioStreamBuilder builder; + builder.setDeviceId(dev->device_id) + ->setDirection(Direction::Output) + ->setChannelCount(NUM_CHANNELS) + ->setSampleRate(dev->sample_rate) + ->setFormat(dev->is_sample_format_float ? AudioFormat::Float : AudioFormat::I16) + ->setSharingMode(dev->sharing_mode == 1 ? SharingMode::Exclusive : SharingMode::Shared) + ->setPerformanceMode( + dev->performance_mode == 1 ? PerformanceMode::PowerSaving : + dev->performance_mode == 2 ? PerformanceMode::LowLatency : PerformanceMode::None) + ->setUsage(Usage::Media) + ->setContentType(ContentType::Music) + ->setCallback(dev->oboe_callback.get()) + ->setErrorCallback(dev->oboe_error_callback.get()) + ->setSampleRateConversionQuality(dev->srate_conversion_quality); + + return builder.openStream(dev->stream); +} + /* * new_fluid_oboe_audio_driver */ @@ -168,44 +218,24 @@ try { Result result; - AudioStreamBuilder builder_obj; - AudioStreamBuilder *builder = &builder_obj; - - double sample_rate; - int is_sample_format_float; - int device_id; - int sharing_mode; // 0: Shared, 1: Exclusive - int performance_mode; // 0: None, 1: PowerSaving, 2: LowLatency - dev = new fluid_oboe_audio_driver_t(); dev->synth = synth; dev->oboe_callback = std::make_unique<OboeAudioStreamCallback>(dev); + dev->oboe_error_callback = std::make_unique<OboeAudioStreamErrorCallback>(dev); - fluid_settings_getnum(settings, "synth.sample-rate", &sample_rate); - is_sample_format_float = fluid_settings_str_equal(settings, "audio.sample-format", "float"); - fluid_settings_getint(settings, "audio.oboe.id", &device_id); - sharing_mode = - fluid_settings_str_equal(settings, "audio.oboe.sharing-mode", "Exclusive") ? 1 : 0; - performance_mode = - fluid_settings_str_equal(settings, "audio.oboe.performance-mode", "PowerSaving") ? 1 : - fluid_settings_str_equal(settings, "audio.oboe.performance-mode", "LowLatency") ? 2 : 0; - - builder->setDeviceId(device_id) - ->setDirection(Direction::Output) - ->setChannelCount(NUM_CHANNELS) - ->setSampleRate(sample_rate) - ->setFormat(is_sample_format_float ? AudioFormat::Float : AudioFormat::I16) - ->setSharingMode(sharing_mode == 1 ? SharingMode::Exclusive : SharingMode::Shared) - ->setPerformanceMode( - performance_mode == 1 ? PerformanceMode::PowerSaving : - performance_mode == 2 ? PerformanceMode::LowLatency : PerformanceMode::None) - ->setUsage(Usage::Media) - ->setContentType(ContentType::Music) - ->setCallback(dev->oboe_callback.get()) - ->setSampleRateConversionQuality(get_srate_conversion_quality(settings)); + fluid_settings_getnum(settings, "synth.sample-rate", &dev->sample_rate); + dev->is_sample_format_float = fluid_settings_str_equal(settings, "audio.sample-format", "float"); + fluid_settings_getint(settings, OBOE_ID, &dev->device_id); + dev->sharing_mode = + fluid_settings_str_equal(settings, SHARING_MODE, "Exclusive") ? 1 : 0; + dev->performance_mode = + fluid_settings_str_equal(settings, PERF_MODE, "PowerSaving") ? 1 : + fluid_settings_str_equal(settings, PERF_MODE, "LowLatency") ? 2 : 0; + dev->srate_conversion_quality = get_srate_conversion_quality(settings); + dev->error_recovery_mode = fluid_settings_str_equal(settings, RECOVERY_MODE, "Stop") ? 1 : 0; - result = builder->openStream(dev->stream); + result = fluid_oboe_connect_or_reconnect(dev); if(result != Result::OK) { @@ -269,5 +299,38 @@ delete dev; } + +void +OboeAudioStreamErrorCallback::onErrorAfterClose(AudioStream *stream, Result result) +{ + if(dev->error_recovery_mode == 1) // Stop + { + FLUID_LOG(FLUID_ERR, "Oboe driver encountered an error (such as earphone unplugged). Stopped."); + dev->stream.reset(); + return; + } + else + { + FLUID_LOG(FLUID_WARN, "Oboe driver encountered an error (such as earphone unplugged). Recovering..."); + } + + result = fluid_oboe_connect_or_reconnect(dev); + + if(result != Result::OK) + { + FLUID_LOG(FLUID_ERR, "Unable to reconnect Oboe audio stream"); + return; // cannot do anything further + } + + // start the new stream. + result = dev->stream->start(); + + if(result != Result::OK) + { + FLUID_LOG(FLUID_ERR, "Unable to restart Oboe audio stream"); + return; // cannot do anything further + } +} + #endif // OBOE_SUPPORT diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/src/drivers/fluid_wasapi.c new/fluidsynth-2.2.4/src/drivers/fluid_wasapi.c --- old/fluidsynth-2.2.2/src/drivers/fluid_wasapi.c 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/src/drivers/fluid_wasapi.c 2021-11-21 16:40:48.000000000 +0100 @@ -788,9 +788,9 @@ int nsz; char *name; - nsz = WideCharToMultiByte(CP_UTF8, 0, var.pwszVal, -1, 0, 0, 0, 0); + nsz = WideCharToMultiByte(CP_ACP, 0, var.pwszVal, -1, 0, 0, 0, 0); name = FLUID_ARRAY(char, nsz + 1); - WideCharToMultiByte(CP_UTF8, 0, var.pwszVal, -1, name, nsz, 0, 0); + WideCharToMultiByte(CP_ACP, 0, var.pwszVal, -1, name, nsz, 0, 0); fluid_settings_add_option(settings, "audio.wasapi.device", name); FLUID_FREE(name); } @@ -827,9 +827,9 @@ goto cleanup; } - nsz = WideCharToMultiByte(CP_UTF8, 0, var.pwszVal, -1, 0, 0, 0, 0); + nsz = WideCharToMultiByte(CP_ACP, 0, var.pwszVal, -1, 0, 0, 0, 0); name = FLUID_ARRAY(char, nsz + 1); - WideCharToMultiByte(CP_UTF8, 0, var.pwszVal, -1, name, nsz, 0, 0); + WideCharToMultiByte(CP_ACP, 0, var.pwszVal, -1, name, nsz, 0, 0); if(!FLUID_STRCASECMP(name, d->name)) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/src/fluidsynth.c new/fluidsynth-2.2.4/src/fluidsynth.c --- old/fluidsynth-2.2.2/src/fluidsynth.c 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/src/fluidsynth.c 2021-11-21 16:40:48.000000000 +0100 @@ -156,6 +156,45 @@ } } +#ifdef WIN32 +/* Function using win32 api to convert ANSI encoding string to UTF8 encoding string */ +static char* +win32_ansi_to_utf8(const char* ansi_null_terminated_string) +{ + LPWSTR u16_buf = NULL; + char *u8_buf = NULL; + fluid_return_val_if_fail(ansi_null_terminated_string != NULL, NULL); + do + { + int u16_count, u8_byte_count; + u16_count = MultiByteToWideChar(CP_ACP, 0, ansi_null_terminated_string, -1, NULL, 0); + if (u16_count == 0) + { + fprintf(stderr, "Failed to convert ANSI string to wide char string\n"); + break; + } + u16_buf = malloc(u16_count * sizeof(WCHAR)); + if (u16_buf == NULL) + { + fprintf(stderr, "Out of memory\n"); + break; + } + u16_count = MultiByteToWideChar(CP_ACP, 0, ansi_null_terminated_string, -1, u16_buf, u16_count); + u8_byte_count = WideCharToMultiByte(CP_UTF8, 0, u16_buf, u16_count, NULL, 0, NULL, NULL); + + u8_buf = malloc(u8_byte_count); + if (u8_buf == NULL) + { + fprintf(stderr, "Out of memory\n"); + break; + } + WideCharToMultiByte(CP_UTF8, 0, u16_buf, u16_count, u8_buf, u8_byte_count, NULL, NULL); + } while (0); + free(u16_buf); + return u8_buf; +} +#endif + typedef struct { int count; /* Total count of options */ @@ -896,14 +935,25 @@ /* load the soundfonts (check that all non options are SoundFont or MIDI files) */ for(i = arg1; i < argc; i++) { - if(fluid_is_midifile(argv[i])) + const char *u8_path = argv[i]; +#if defined(WIN32) + /* try to convert ANSI encoding path to UTF8 encoding path */ + char *u8_buf = win32_ansi_to_utf8(argv[i]); + if (u8_buf == NULL) + { + // error msg. already printed + goto cleanup; + } + u8_path = u8_buf; +#endif + if(fluid_is_midifile(u8_path)) { continue; } - if(fluid_is_soundfont(argv[i])) + if(fluid_is_soundfont(u8_path)) { - if(fluid_synth_sfload(synth, argv[i], 1) == -1) + if(fluid_synth_sfload(synth, u8_path, 1) == -1) { fprintf(stderr, "Failed to load the SoundFont %s\n", argv[i]); } @@ -912,6 +962,9 @@ { fprintf(stderr, "Parameter '%s' not a SoundFont or MIDI file or error occurred identifying it.\n", argv[i]); } +#if defined(WIN32) + free(u8_buf); +#endif } /* Try to load the default soundfont, if no soundfont specified */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/src/midi/fluid_midi.c new/fluidsynth-2.2.4/src/midi/fluid_midi.c --- old/fluidsynth-2.2.2/src/midi/fluid_midi.c 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/src/midi/fluid_midi.c 2021-11-21 16:40:48.000000000 +0100 @@ -1604,6 +1604,10 @@ if(player->playback_callback) { player->playback_callback(player->playback_userdata, event); + if(event->type == NOTE_ON && event->param2 != 0 && !player->channel_isplaying[event->channel]) + { + player->channel_isplaying[event->channel] = TRUE; + } } } @@ -1787,6 +1791,11 @@ } } + for(i = 0; i < MAX_NUMBER_OF_CHANNELS; i++) + { + player->channel_isplaying[i] = FALSE; + } + /* player->current_file = NULL; */ /* player->status = FLUID_PLAYER_READY; */ /* player->loop = 1; */ @@ -2080,18 +2089,30 @@ int i; int loadnextfile; int status = FLUID_PLAYER_DONE; + fluid_midi_event_t mute_event; fluid_player_t *player; fluid_synth_t *synth; player = (fluid_player_t *) data; synth = player->synth; loadnextfile = player->currentfile == NULL ? 1 : 0; + + fluid_midi_event_set_type(&mute_event, CONTROL_CHANGE); + mute_event.param1 = ALL_SOUND_OFF; + mute_event.param2 = 1; if(fluid_player_get_status(player) != FLUID_PLAYER_PLAYING) { if(fluid_atomic_int_get(&player->stopping)) { - fluid_synth_all_notes_off(synth, -1); + for(i = 0; i < synth->midi_channels; i++) + { + if(player->channel_isplaying[i]) + { + fluid_midi_event_set_channel(&mute_event, i); + player->playback_callback(player->playback_userdata, &mute_event); + } + } fluid_atomic_int_set(&player->stopping, 0); } return 1; @@ -2121,7 +2142,14 @@ seek_ticks = fluid_atomic_int_get(&player->seek_ticks); if(seek_ticks >= 0) { - fluid_synth_all_sounds_off(synth, -1); /* avoid hanging notes */ + for(i = 0; i < synth->midi_channels; i++) + { + if(player->channel_isplaying[i]) + { + fluid_midi_event_set_channel(&mute_event, i); + player->playback_callback(player->playback_userdata, &mute_event); + } + } } for(i = 0; i < player->ntracks; i++) @@ -2172,6 +2200,9 @@ * Activates play mode for a MIDI player if not already playing. * @param player MIDI player instance * @return #FLUID_OK on success, #FLUID_FAILED otherwise + * + * If the list of files added to the player has completed its requested number of loops, + * the playlist will be restarted from the beginning with a loop count of 1. */ int fluid_player_play(fluid_player_t *player) @@ -2187,10 +2218,17 @@ fluid_sample_timer_reset(player->synth, player->sample_timer); } + /* If we're at the end of the playlist and there are no loops left, loop once */ + if(player->currentfile == NULL && player->loop == 0) + { + player->loop = 1; + } + fluid_atomic_int_set(&player->status, FLUID_PLAYER_PLAYING); return FLUID_OK; } + /** * Pauses the MIDI playback. * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/src/midi/fluid_midi.h new/fluidsynth-2.2.4/src/midi/fluid_midi.h --- old/fluidsynth-2.2.2/src/midi/fluid_midi.h 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/src/midi/fluid_midi.h 2021-11-21 16:40:48.000000000 +0100 @@ -39,6 +39,7 @@ #define MAX_NUMBER_OF_TRACKS 128 +#define MAX_NUMBER_OF_CHANNELS 16 enum fluid_midi_event_type { @@ -325,6 +326,8 @@ void *playback_userdata; /* pointer to user-defined data passed to playback_callback function */ handle_midi_tick_func_t tick_callback; /* function fired on each tick change */ void *tick_userdata; /* pointer to user-defined data passed to tick_callback function */ + + int channel_isplaying[MAX_NUMBER_OF_CHANNELS]; /* flags indicating channels on which notes have played */ }; void fluid_player_settings(fluid_settings_t *settings); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.2.2/src/utils/fluid_sys.h new/fluidsynth-2.2.4/src/utils/fluid_sys.h --- old/fluidsynth-2.2.2/src/utils/fluid_sys.h 2021-07-11 17:37:54.000000000 +0200 +++ new/fluidsynth-2.2.4/src/utils/fluid_sys.h 2021-11-21 16:40:48.000000000 +0100 @@ -205,8 +205,11 @@ #define INCL_DOS #include <os2.h> +/* Define socklen_t if not provided */ +#if !HAVE_SOCKLEN_T typedef int socklen_t; #endif +#endif /** Time functions