Hello community, here is the log from the commit of package fluidsynth for openSUSE:Factory checked in at 2020-09-24 16:13:03 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/fluidsynth (Old) and /work/SRC/openSUSE:Factory/.fluidsynth.new.4249 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fluidsynth" Thu Sep 24 16:13:03 2020 rev:53 rq:835812 version:2.1.5 Changes: -------- --- /work/SRC/openSUSE:Factory/fluidsynth/fluidsynth.changes 2020-07-17 20:45:30.484581940 +0200 +++ /work/SRC/openSUSE:Factory/.fluidsynth.new.4249/fluidsynth.changes 2020-09-24 16:13:36.856860826 +0200 @@ -1,0 +2,7 @@ +Sun Sep 20 09:36:23 UTC 2020 - Tom Mbrt <[email protected]> + +- Update to version 2.1.5 + * loading DLS may have failed in certain setup environments + * fix a build failure with GCC 4.8 + +------------------------------------------------------------------- Old: ---- fluidsynth-2.1.4.tar.gz New: ---- fluidsynth-2.1.5.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ fluidsynth.spec ++++++ --- /var/tmp/diff_new_pack.KoGY8U/_old 2020-09-24 16:13:38.684862655 +0200 +++ /var/tmp/diff_new_pack.KoGY8U/_new 2020-09-24 16:13:38.688862659 +0200 @@ -25,7 +25,7 @@ %define sover 2 Name: fluidsynth -Version: 2.1.4 +Version: 2.1.5 Release: 0 Summary: A Real-Time Software Synthesizer That Uses Soundfont(tm) License: LGPL-2.1-or-later ++++++ fluidsynth-2.1.4.tar.gz -> fluidsynth-2.1.5.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.1.4/CMakeLists.txt new/fluidsynth-2.1.5/CMakeLists.txt --- old/fluidsynth-2.1.4/CMakeLists.txt 2020-07-12 12:55:32.000000000 +0200 +++ new/fluidsynth-2.1.5/CMakeLists.txt 2020-09-11 22:22:35.000000000 +0200 @@ -29,7 +29,7 @@ # FluidSynth package version set ( FLUIDSYNTH_VERSION_MAJOR 2 ) set ( FLUIDSYNTH_VERSION_MINOR 1 ) -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}\"" ) @@ -44,7 +44,7 @@ # This is not exactly the same algorithm as the libtool one, but the results are the same. set ( LIB_VERSION_CURRENT 2 ) 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}" ) @@ -140,6 +140,7 @@ include ( DefaultDirs ) # Basic C library checks +include ( CheckCCompilerFlag ) include ( CheckSTDC ) include ( CheckIncludeFile ) include ( CheckFunctionExists ) @@ -184,7 +185,13 @@ endif ( NOT APPLE AND NOT OS2 ) # 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 -Werror=incompatible-pointer-types" ) + 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" ) + check_c_compiler_flag ( "-Werror=incompatible-pointer-types" HAVE_INCOMPATIBLE_POINTER_TYPES ) + if ( HAVE_INCOMPATIBLE_POINTER_TYPES ) + set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=incompatible-pointer-types" ) + endif ( HAVE_INCOMPATIBLE_POINTER_TYPES ) + + set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -W -Wpointer-arith -Wcast-qual -Wno-unused-parameter" ) # prepend to build type specific flags, to allow users to override set ( CMAKE_C_FLAGS_DEBUG "-g ${CMAKE_C_FLAGS_DEBUG}" ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.1.4/doc/Doxyfile new/fluidsynth-2.1.5/doc/Doxyfile --- old/fluidsynth-2.1.4/doc/Doxyfile 2020-07-12 12:55:32.000000000 +0200 +++ new/fluidsynth-2.1.5/doc/Doxyfile 2020-09-11 22:22:35.000000000 +0200 @@ -5,7 +5,7 @@ #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = libfluidsynth -PROJECT_NUMBER = 2.1.4 +PROJECT_NUMBER = 2.1.5 OUTPUT_DIRECTORY = api CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.1.4/doc/fluidsynth-v20-devdoc.txt new/fluidsynth-2.1.5/doc/fluidsynth-v20-devdoc.txt --- old/fluidsynth-2.1.4/doc/fluidsynth-v20-devdoc.txt 2020-07-12 12:55:32.000000000 +0200 +++ new/fluidsynth-2.1.5/doc/fluidsynth-v20-devdoc.txt 2020-09-11 22:22:35.000000000 +0200 @@ -8,8 +8,8 @@ \author David Henningsson \author Tom Moebert \author Copyright © 2003-2020 Peter Hanappe, Conrad Berhörster, Antoine Schmitt, Pedro López-Cabanillas, Josh Green, David Henningsson, Tom Moebert -\version Revision 2.1.4 -\date 2020-07-05 +\version Revision 2.1.5 +\date 2020-09-06 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 http://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 http://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.1.4/include/fluidsynth/event.h new/fluidsynth-2.1.5/include/fluidsynth/event.h --- old/fluidsynth-2.1.4/include/fluidsynth/event.h 2020-07-12 12:55:32.000000000 +0200 +++ new/fluidsynth-2.1.5/include/fluidsynth/event.h 2020-09-11 22:22:35.000000000 +0200 @@ -111,7 +111,7 @@ /* Only for removing events */ -FLUIDSYNTH_API void fluid_event_any_control_change(fluid_event_t *evt, int channel); +FLUID_DEPRECATED FLUIDSYNTH_API void fluid_event_any_control_change(fluid_event_t *evt, int channel); /* Only when unregistering clients */ FLUIDSYNTH_API void fluid_event_unregistering(fluid_event_t *evt); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.1.4/src/sfloader/fluid_instpatch.c new/fluidsynth-2.1.5/src/sfloader/fluid_instpatch.c --- old/fluidsynth-2.1.4/src/sfloader/fluid_instpatch.c 2020-07-12 12:55:32.000000000 +0200 +++ new/fluidsynth-2.1.5/src/sfloader/fluid_instpatch.c 2020-09-11 22:22:35.000000000 +0200 @@ -44,6 +44,15 @@ MAX_INST_VOICES = 128, }; +int fluid_instpatch_supports_multi_init(void) +{ + guint major, minor, patch; + ipatch_version(&major, &minor, &patch); + + /* libinstpatch <= 1.1.4 only supports calling ipatch_init() once */ + return FLUID_VERSION_CHECK(major, minor, patch) > FLUID_VERSION_CHECK(1, 1, 4); +} + void fluid_instpatch_init(void) { ipatch_init(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.1.4/src/sfloader/fluid_instpatch.h new/fluidsynth-2.1.5/src/sfloader/fluid_instpatch.h --- old/fluidsynth-2.1.4/src/sfloader/fluid_instpatch.h 2020-07-12 12:55:32.000000000 +0200 +++ new/fluidsynth-2.1.5/src/sfloader/fluid_instpatch.h 2020-09-11 22:22:35.000000000 +0200 @@ -9,4 +9,6 @@ void fluid_instpatch_deinit(void); fluid_sfloader_t *new_fluid_instpatch_loader(fluid_settings_t *settings); +int fluid_instpatch_supports_multi_init(void); + #endif // _FLUID_INSTPATCH_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.1.4/src/synth/fluid_event.c new/fluidsynth-2.1.5/src/synth/fluid_event.c --- old/fluidsynth-2.1.4/src/synth/fluid_event.c 2020-07-12 12:55:32.000000000 +0200 +++ new/fluidsynth-2.1.5/src/synth/fluid_event.c 2020-09-11 22:22:35.000000000 +0200 @@ -252,6 +252,7 @@ * Set a sequencer event to be an any control change event (for internal use). * @param evt Sequencer event structure * @param channel MIDI channel number + * @deprecated This function has been deprecated. It was only meant for internal usage, it should have never been made public. It will be removed in fluidsynth 2.2.0. */ void fluid_event_any_control_change(fluid_event_t *evt, int channel) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.1.4/src/synth/fluid_synth.c new/fluidsynth-2.1.5/src/synth/fluid_synth.c --- old/fluidsynth-2.1.4/src/synth/fluid_synth.c 2020-07-12 12:55:32.000000000 +0200 +++ new/fluidsynth-2.1.5/src/synth/fluid_synth.c 2020-09-11 22:22:35.000000000 +0200 @@ -464,11 +464,12 @@ /* Amount: 96 dB of attenuation (on the opposite channel) */ fluid_mod_set_amount(&custom_balance_mod, FLUID_PEAK_ATTENUATION); /* Amount: 960 */ - /* libinstpatch <= 1.1.4 only supports calling init() once */ -#if defined(LIBINSTPATCH_SUPPORT) && \ - FLUID_VERSION_CHECK(IPATCH_VERSION_MAJOR,IPATCH_VERSION_MINOR,IPATCH_VERSION_PATCH) <= FLUID_VERSION_CHECK(1,1,4) +#if defined(LIBINSTPATCH_SUPPORT) /* defer libinstpatch init to fluid_instpatch.c to avoid #include "libinstpatch.h" */ - fluid_instpatch_init(); + if(!fluid_instpatch_supports_multi_init()) + { + fluid_instpatch_init(); + } #endif } @@ -628,10 +629,11 @@ FLUID_MEMSET(synth, 0, sizeof(fluid_synth_t)); -#if defined(LIBINSTPATCH_SUPPORT) && \ - FLUID_VERSION_CHECK(IPATCH_VERSION_MAJOR,IPATCH_VERSION_MINOR,IPATCH_VERSION_PATCH) > FLUID_VERSION_CHECK(1,1,4) - /* defer libinstpatch init to fluid_instpatch.c to avoid #include "libinstpatch.h" */ - fluid_instpatch_init(); +#if defined(LIBINSTPATCH_SUPPORT) + if(fluid_instpatch_supports_multi_init()) + { + fluid_instpatch_init(); + } #endif fluid_rec_mutex_init(synth->mutex); @@ -1125,10 +1127,11 @@ FLUID_FREE(synth); -#if defined(LIBINSTPATCH_SUPPORT) && \ - FLUID_VERSION_CHECK(IPATCH_VERSION_MAJOR,IPATCH_VERSION_MINOR,IPATCH_VERSION_PATCH) > FLUID_VERSION_CHECK(1,1,4) - /* defer libinstpatch deinit to fluid_instpatch.c to avoid #include "libinstpatch.h" */ - fluid_instpatch_deinit(); +#if defined(LIBINSTPATCH_SUPPORT) + if(fluid_instpatch_supports_multi_init()) + { + fluid_instpatch_deinit(); + } #endif } @@ -3652,15 +3655,23 @@ * * @param synth FluidSynth instance * @param len Count of audio frames to synthesize and store in every single buffer provided by \p out and \p fx. - * @param nfx Count of arrays in \c fx. Must be a multiple of 2 (because of stereo) + * Zero value is permitted, the function does nothing and return FLUID_OK. + * @param nfx Count of arrays in \c fx. Must be a multiple of 2 (because of stereo). * and in the range <code>0 <= nfx/2 <= (fluid_synth_count_effects_channels() * fluid_synth_count_effects_groups())</code>. + Note that zero value is valid and allows to skip mixing effects in all fx output buffers. * @param fx Array of buffers to store effects audio to. Buffers may -alias with buffers of \c out. NULL buffers are permitted and will cause to skip mixing any audio into that buffer. +alias with buffers of \c out. Individual NULL buffers are permitted and will cause to skip mixing any audio into that buffer. * @param nout Count of arrays in \c out. Must be a multiple of 2 (because of stereo) and in the range <code>0 <= nout/2 <= fluid_synth_count_audio_channels()</code>. + Note that zero value is valid and allows to skip mixing dry audio in all out output buffers. * @param out Array of buffers to store (dry) audio to. Buffers may -alias with buffers of \c fx. NULL buffers are permitted and will cause to skip mixing any audio into that buffer. - * @return #FLUID_OK on success, #FLUID_FAILED otherwise. +alias with buffers of \c fx. Individual NULL buffers are permitted and will cause to skip mixing any audio into that buffer. + * @return #FLUID_OK on success, + * #FLUID_FAILED otherwise, + * - <code>fx == NULL</code> while <code>nfx > 0</code>, or <code>out == NULL</code> while <code>nout > 0</code>. + * - \c nfx or \c nout not multiple of 2. + * - <code>len < 0</code>. + * - \c nfx or \c nout exceed the range explained above. * * @parblock * @note The owner of the sample buffers must zero them out before calling this @@ -3690,6 +3701,7 @@ return fluid_synth_process_LOCAL(synth, len, nfx, fx, nout, out, fluid_synth_render_blocks); } +/* declared public (instead of static) for testing purpose */ int fluid_synth_process_LOCAL(fluid_synth_t *synth, int len, int nfx, float *fx[], int nout, float *out[], int (*block_render_func)(fluid_synth_t *, int)) @@ -3704,8 +3716,23 @@ float cpu_load; fluid_return_val_if_fail(synth != NULL, FLUID_FAILED); + + /* fx NULL while nfx > 0 is invalid */ + fluid_return_val_if_fail((fx != NULL) || (nfx == 0), FLUID_FAILED); + /* nfx must be multiple of 2. Note that 0 value is valid and + allows to skip mixing in fx output buffers + */ fluid_return_val_if_fail(nfx % 2 == 0, FLUID_FAILED); + + /* out NULL while nout > 0 is invalid */ + fluid_return_val_if_fail((out != NULL) || (nout == 0), FLUID_FAILED); + /* nout must be multiple of 2. Note that 0 value is valid and + allows to skip mixing in out output buffers + */ fluid_return_val_if_fail(nout % 2 == 0, FLUID_FAILED); + + /* check len value. Note that 0 value is valid, the function does nothing and returns FLUID_OK. + */ fluid_return_val_if_fail(len >= 0, FLUID_FAILED); fluid_return_val_if_fail(len != 0, FLUID_OK); // to avoid raising FE_DIVBYZERO below @@ -3716,33 +3743,49 @@ fluid_return_val_if_fail(0 <= nfx / 2 && nfx / 2 <= nfxchan * nfxunits, FLUID_FAILED); fluid_return_val_if_fail(0 <= nout / 2 && nout / 2 <= naudchan, FLUID_FAILED); + /* get internal mixer audio dry buffer's pointer (left and right channel) */ fluid_rvoice_mixer_get_bufs(synth->eventhandler->mixer, &left_in, &right_in); + /* get internal mixer audio effect buffer's pointer (left and right channel) */ fluid_rvoice_mixer_get_fx_bufs(synth->eventhandler->mixer, &fx_left_in, &fx_right_in); + + /* Conversely to fluid_synth_write_float(),fluid_synth_write_s16() (which handle only one + stereo output) we don't want rendered audio effect mixed in internal audio dry buffers. + FALSE instructs the mixer that internal audio effects will be mixed in respective internal + audio effects buffers. + */ fluid_rvoice_mixer_set_mix_fx(synth->eventhandler->mixer, FALSE); /* First, take what's still available in the buffer */ count = 0; + /* synth->cur indicates if available samples are still in internal mixer buffer */ num = synth->cur; buffered_blocks = (synth->cur + FLUID_BUFSIZE - 1) / FLUID_BUFSIZE; if(synth->cur < buffered_blocks * FLUID_BUFSIZE) { + /* yes, available sample are in internal mixer buffer */ int available = (buffered_blocks * FLUID_BUFSIZE) - synth->cur; num = (available > len) ? len : available; + /* mixing dry samples (or skip if requested by the caller) */ if(nout != 0) { for(i = 0; i < naudchan; i++) { + /* mix num left samples from input mixer buffer (left_in) at input offset + synth->cur to output buffer (out_buf) at offset 0 */ float *out_buf = out[(i * 2) % nout]; fluid_synth_mix_single_buffer(out_buf, 0, left_in, synth->cur, i, num); + /* mix num right samples from input mixer buffer (right_in) at input offset + synth->cur to output buffer (out_buf) at offset 0 */ out_buf = out[(i * 2 + 1) % nout]; fluid_synth_mix_single_buffer(out_buf, 0, right_in, synth->cur, i, num); } } + /* mixing effects samples (or skip if requested by the caller) */ if(nfx != 0) { // loop over all effects units @@ -3753,9 +3796,13 @@ { int buf_idx = f * nfxchan + i; + /* mix num left samples from input mixer buffer (fx_left_in) at input offset + synth->cur to output buffer (out_buf) at offset 0 */ float *out_buf = fx[(buf_idx * 2) % nfx]; fluid_synth_mix_single_buffer(out_buf, 0, fx_left_in, synth->cur, buf_idx, num); + /* mix num right samples from input mixer buffer (fx_right_in) at input offset + synth->cur to output buffer (out_buf) at offset 0 */ out_buf = fx[(buf_idx * 2 + 1) % nfx]; fluid_synth_mix_single_buffer(out_buf, 0, fx_right_in, synth->cur, buf_idx, num); } @@ -3769,23 +3816,31 @@ /* Then, render blocks and copy till we have 'len' samples */ while(count < len) { + /* always render full bloc multiple of FLUID_BUFSIZE */ int blocksleft = (len - count + FLUID_BUFSIZE - 1) / FLUID_BUFSIZE; + /* render audio (dry and effect) to respective internal dry and effect buffers */ int blockcount = block_render_func(synth, blocksleft); num = (blockcount * FLUID_BUFSIZE > len - count) ? len - count : blockcount * FLUID_BUFSIZE; + /* mixing dry samples (or skip if requested by the caller) */ if(nout != 0) { for(i = 0; i < naudchan; i++) { + /* mix num left samples from input mixer buffer (left_in) at input offset + 0 to output buffer (out_buf) at offset count */ float *out_buf = out[(i * 2) % nout]; fluid_synth_mix_single_buffer(out_buf, count, left_in, 0, i, num); + /* mix num right samples from input mixer buffer (right_in) at input offset + 0 to output buffer (out_buf) at offset count */ out_buf = out[(i * 2 + 1) % nout]; fluid_synth_mix_single_buffer(out_buf, count, right_in, 0, i, num); } } + /* mixing effects samples (or skip if requested by the caller) */ if(nfx != 0) { // loop over all effects units @@ -3796,9 +3851,13 @@ { int buf_idx = f * nfxchan + i; + /* mix num left samples from input mixer buffer (fx_left_in) at input offset + 0 to output buffer (out_buf) at offset count */ float *out_buf = fx[(buf_idx * 2) % nfx]; fluid_synth_mix_single_buffer(out_buf, count, fx_left_in, 0, buf_idx, num); + /* mix num right samples from input mixer buffer (fx_right_in) at input offset + 0 to output buffer (out_buf) at offset count */ out_buf = fx[(buf_idx * 2 + 1) % nfx]; fluid_synth_mix_single_buffer(out_buf, count, fx_right_in, 0, buf_idx, num); } @@ -3866,7 +3925,13 @@ fluid_return_val_if_fail(len >= 0, FLUID_FAILED); fluid_return_val_if_fail(len != 0, FLUID_OK); // to avoid raising FE_DIVBYZERO below - fluid_rvoice_mixer_set_mix_fx(synth->eventhandler->mixer, 1); + /* Conversely to fluid_synth_process() (which handle possible multiple stereo output), + we want rendered audio effect mixed in internal audio dry buffers. + TRUE instructs the mixer that internal audio effects will be mixed in first internal + audio dry buffers. + */ + fluid_rvoice_mixer_set_mix_fx(synth->eventhandler->mixer, TRUE); + /* get first internal mixer audio dry buffer's pointer (left and right channel) */ fluid_rvoice_mixer_get_bufs(synth->eventhandler->mixer, &left_in, &right_in); size = len; @@ -3877,6 +3942,7 @@ /* fill up the buffers as needed */ if(cur >= synth->curmax) { + /* render audio (dry and effect) to internal dry buffers */ int blocksleft = (size + FLUID_BUFSIZE - 1) / FLUID_BUFSIZE; synth->curmax = FLUID_BUFSIZE * block_render_func(synth, blocksleft); fluid_rvoice_mixer_get_bufs(synth->eventhandler->mixer, &left_in, &right_in); @@ -4024,7 +4090,13 @@ fluid_return_val_if_fail(len >= 0, FLUID_FAILED); fluid_return_val_if_fail(len != 0, FLUID_OK); // to avoid raising FE_DIVBYZERO below - fluid_rvoice_mixer_set_mix_fx(synth->eventhandler->mixer, 1); + /* Conversely to fluid_synth_process() (which handle possible multiple stereo output), + we want rendered audio effect mixed in internal audio dry buffers. + TRUE instructs the mixer that internal audio effects will be mixed in first internal + audio dry buffers. + */ + fluid_rvoice_mixer_set_mix_fx(synth->eventhandler->mixer, TRUE); + /* get first internal mixer audio dry buffer's pointer (left and right channel) */ fluid_rvoice_mixer_get_bufs(synth->eventhandler->mixer, &left_in, &right_in); size = len; @@ -4036,6 +4108,7 @@ /* fill up the buffers as needed */ if(cur >= synth->curmax) { + /* render audio (dry and effect) to internal dry buffers */ int blocksleft = (size + FLUID_BUFSIZE - 1) / FLUID_BUFSIZE; synth->curmax = FLUID_BUFSIZE * fluid_synth_render_blocks(synth, blocksleft); fluid_rvoice_mixer_get_bufs(synth->eventhandler->mixer, &left_in, &right_in);
