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@xxxxxxxxxxxxxxxxxxxxxxxxx)