On Wed, 26 Nov 2003, Robert Jonsson wrote:
  Unfortunately the mailinglist(and project) is pretty
much in hybernation at
 the moment so I understand perfectly that your propositions have not been
 implemented.
 If you have a good idea of what the problem is, it would be great if you tried
 and poked around in the Fluidsynth code yourself (probably not what you
 wanted to hear ;) 
I changed something in
   fluidsynth-1.0.3/src/fluid_voice.c
   $ diff -au fluidsynth-1.0.3/src/fluid_voice.c fluidsynth-1.0.3/src/fluid_voice.c.new
   --- fluidsynth-1.0.3/src/fluid_voice.c  2003-08-19 21:45:45.000000000 +0200
   +++ fluidsynth-1.0.3/src/fluid_voice.c.new      2003-11-26 12:30:25.000000000 +0100
   @@ -1359,6 +1359,7 @@
      case GEN_VOLENVHOLD:                 /* SF2.01 section 8.1.3 # 35 */
      case GEN_KEYTOVOLENVHOLD:            /* SF2.01 section 8.1.3 # 39 */
        count = calculate_hold_decay_buffers(voice, GEN_VOLENVHOLD, GEN_KEYTOVOLENVHOLD,
0); /* 0 means: hold */
   +    if (count < 98) count = 19464;
        voice->volenv_data[FLUID_VOICE_ENVHOLD].count = count;
        voice->volenv_data[FLUID_VOICE_ENVHOLD].coeff = 1.0f;
        voice->volenv_data[FLUID_VOICE_ENVHOLD].incr = 0.0f;
   @@ -1370,6 +1371,7 @@
      case GEN_VOLENVSUSTAIN:             /* SF2.01 section 8.1.3 # 37 */
      case GEN_KEYTOVOLENVDECAY:          /* SF2.01 section 8.1.3 # 40 */
        count = calculate_hold_decay_buffers(voice, GEN_VOLENVDECAY, GEN_KEYTOVOLENVDECAY,
1); /* 1 for decay */
   +    if (count < 2000) count = 19464;
        voice->volenv_data[FLUID_VOICE_ENVDECAY].count = count;
        voice->volenv_data[FLUID_VOICE_ENVDECAY].coeff = 1.0f;
        voice->volenv_data[FLUID_VOICE_ENVDECAY].incr = count ? -1.0f / count : 0.0f;
This helped for string envelope. But this cannot be the
solution! This is barbarianism!
My opinion is: The fluidsynth misinterprets some very
rare statements in SF2 format. But I don't know anything
about SF2 :-((
--
J.Anders, Chemnitz, GERMANY (ja(a)informatik.tu-chemnitz.de)