Merge branch '2.1.x' into master

This commit is contained in:
derselbst 2020-07-05 16:32:47 +02:00
commit d73135fc48
3 changed files with 12 additions and 9 deletions

View file

@ -29,7 +29,7 @@ set ( PACKAGE "fluidsynth" )
# FluidSynth package version # FluidSynth package version
set ( FLUIDSYNTH_VERSION_MAJOR 2 ) set ( FLUIDSYNTH_VERSION_MAJOR 2 )
set ( FLUIDSYNTH_VERSION_MINOR 1 ) set ( FLUIDSYNTH_VERSION_MINOR 1 )
set ( FLUIDSYNTH_VERSION_MICRO 3 ) set ( FLUIDSYNTH_VERSION_MICRO 4 )
set ( VERSION "${FLUIDSYNTH_VERSION_MAJOR}.${FLUIDSYNTH_VERSION_MINOR}.${FLUIDSYNTH_VERSION_MICRO}" ) set ( VERSION "${FLUIDSYNTH_VERSION_MAJOR}.${FLUIDSYNTH_VERSION_MINOR}.${FLUIDSYNTH_VERSION_MICRO}" )
set ( FLUIDSYNTH_VERSION "\"${VERSION}\"" ) set ( FLUIDSYNTH_VERSION "\"${VERSION}\"" )

View file

@ -8,8 +8,8 @@
\author David Henningsson \author David Henningsson
\author Tom Moebert \author Tom Moebert
\author Copyright © 2003-2020 Peter Hanappe, Conrad Berhörster, Antoine Schmitt, Pedro López-Cabanillas, Josh Green, David Henningsson, 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.3 \version Revision 2.1.4
\date 2020-05-23 \date 2020-07-05
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. 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.
@ -22,6 +22,7 @@ All the source code examples in this document are in the public domain; you can
- \ref Disclaimer - \ref Disclaimer
- \ref Introduction - \ref Introduction
- \ref NewIn2_2_0 - \ref NewIn2_2_0
- \ref NewIn2_1_4
- \ref NewIn2_1_1 - \ref NewIn2_1_1
- \ref NewIn2_1_0 - \ref NewIn2_1_0
- \ref NewIn2_0_8 - \ref NewIn2_0_8
@ -78,6 +79,10 @@ What is FluidSynth?
- Events that share the same tick was given a new, documented order, see fluid_sequencer_send_at(). - Events that share the same tick was given a new, documented order, see fluid_sequencer_send_at().
- The sequencer's scale can now be used for arbitrary tempo changes. Previously, the scale of the sequencer was limited to 1000. The only limitation now is >0. - The sequencer's scale can now be used for arbitrary tempo changes. Previously, the scale of the sequencer was limited to 1000. The only limitation now is >0.
\section NewIn2_1_4 What's new in 2.1.4?
- a regression introduced in 2.1.3 broke fluid_synth_start() for DLS presets
\section NewIn2_1_1 What's new in 2.1.1? \section NewIn2_1_1 What's new in 2.1.1?
- requirements for explicit sequencer client unregistering have been relaxed: delete_fluid_sequencer() now correctly frees any registered sequencer clients (clients can still be explicitly unregistered) - requirements for explicit sequencer client unregistering have been relaxed: delete_fluid_sequencer() now correctly frees any registered sequencer clients (clients can still be explicitly unregistered)

View file

@ -4527,14 +4527,13 @@ fluid_synth_kill_by_exclusive_class_LOCAL(fluid_synth_t *synth,
for(i = 0; i < synth->polyphony; i++) for(i = 0; i < synth->polyphony; i++)
{ {
fluid_voice_t *existing_voice = synth->voice[i]; fluid_voice_t *existing_voice = synth->voice[i];
int existing_excl_class = fluid_voice_gen_value(existing_voice, GEN_EXCLUSIVECLASS);
/* If voice is playing, on the same channel, has same exclusive /* If voice is playing, on the same channel, has same exclusive
* class and is not part of the same noteon event (voice group), then kill it */ * class and is not part of the same noteon event (voice group), then kill it */
if(fluid_voice_is_playing(existing_voice) if(fluid_voice_is_playing(existing_voice)
&& fluid_voice_get_channel(existing_voice) == fluid_voice_get_channel(new_voice) && fluid_voice_get_channel(existing_voice) == fluid_voice_get_channel(new_voice)
&& existing_excl_class == excl_class && fluid_voice_gen_value(existing_voice, GEN_EXCLUSIVECLASS) == excl_class
&& fluid_voice_get_id(existing_voice) != fluid_voice_get_id(new_voice)) && fluid_voice_get_id(existing_voice) != fluid_voice_get_id(new_voice))
{ {
fluid_voice_kill_excl(existing_voice); fluid_voice_kill_excl(existing_voice);
@ -6344,15 +6343,14 @@ int
fluid_synth_start(fluid_synth_t *synth, unsigned int id, fluid_preset_t *preset, fluid_synth_start(fluid_synth_t *synth, unsigned int id, fluid_preset_t *preset,
int audio_chan, int chan, int key, int vel) int audio_chan, int chan, int key, int vel)
{ {
int result; int result, dynamic_samples;
fluid_defsfont_t *defsfont;
fluid_return_val_if_fail(preset != NULL, FLUID_FAILED); fluid_return_val_if_fail(preset != NULL, FLUID_FAILED);
fluid_return_val_if_fail(key >= 0 && key <= 127, FLUID_FAILED); fluid_return_val_if_fail(key >= 0 && key <= 127, FLUID_FAILED);
fluid_return_val_if_fail(vel >= 1 && vel <= 127, FLUID_FAILED); fluid_return_val_if_fail(vel >= 1 && vel <= 127, FLUID_FAILED);
FLUID_API_ENTRY_CHAN(FLUID_FAILED); FLUID_API_ENTRY_CHAN(FLUID_FAILED);
defsfont = fluid_sfont_get_data(preset->sfont); fluid_settings_getint(fluid_synth_get_settings(synth), "synth.dynamic-sample-loading", &dynamic_samples);
if(defsfont->dynamic_samples) if(dynamic_samples)
{ {
// The preset might not be currently used, thus its sample data may not be loaded. // The preset might not be currently used, thus its sample data may not be loaded.
// This guard is to avoid a NULL deref in rvoice_write(). // This guard is to avoid a NULL deref in rvoice_write().