diff --git a/fluidsynth/src/synth/fluid_synth.c b/fluidsynth/src/synth/fluid_synth.c index 5af8236..6ac6667 100644 --- a/fluidsynth/src/synth/fluid_synth.c +++ b/fluidsynth/src/synth/fluid_synth.c @@ -139,6 +139,7 @@ fluid_mod_t default_expr_mod; /* SF2.01 section 8.4.7 */ fluid_mod_t default_reverb_mod; /* SF2.01 section 8.4.8 */ fluid_mod_t default_chorus_mod; /* SF2.01 section 8.4.9 */ fluid_mod_t default_pitch_bend_mod; /* SF2.01 section 8.4.10 */ +fluid_mod_t additional_pat2att_mod; /* Addition non-standard mod for poly pressure to initial attenuation*/ /* reverb presets */ static fluid_revmodel_presets_t revmodel_preset[] = { @@ -437,6 +438,18 @@ fluid_synth_init(void) ); fluid_mod_set_dest(&default_pitch_bend_mod, GEN_PITCH); /* Destination: Initial pitch */ fluid_mod_set_amount(&default_pitch_bend_mod, 12700.0); /* Amount: 12700 cents */ + + + /* Additional non-standard Key Pressure to Initial Attenuation */ + fluid_mod_set_source1(&additional_pat2att_mod, FLUID_MOD_KEYPRESSURE, + FLUID_MOD_GC + | FLUID_MOD_CONCAVE + | FLUID_MOD_UNIPOLAR + | FLUID_MOD_POSITIVE + ); + fluid_mod_set_source2(&additional_pat2att_mod, 0,0); + fluid_mod_set_dest(&additional_pat2att_mod, GEN_ATTENUATION); + fluid_mod_set_amount(&additional_pat2att_mod, 960.0); } static FLUID_INLINE unsigned int fluid_synth_get_ticks(fluid_synth_t* synth) @@ -3065,6 +3078,8 @@ fluid_synth_alloc_voice(fluid_synth_t* synth, fluid_sample_t* sample, int chan, fluid_voice_add_mod(voice, &default_chorus_mod, FLUID_VOICE_DEFAULT); /* SF2.01 $8.4.9 */ fluid_voice_add_mod(voice, &default_pitch_bend_mod, FLUID_VOICE_DEFAULT); /* SF2.01 $8.4.10 */ + fluid_voice_add_mod(voice, &optional_pat2att_mod, FLUID_VOICE_DEFAULT); + FLUID_API_RETURN(voice); }