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 &copy; 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);


Reply via email to