mirror of
https://github.com/ZDoom/fluidsynth.git
synced 2024-11-14 00:20:41 +00:00
Fix Portamento FromKey issue
This commit is contained in:
parent
ea9758a2ed
commit
62ed1c813d
2 changed files with 11 additions and 4 deletions
|
@ -162,9 +162,10 @@ fluid_channel_init_ctrl(fluid_channel_t *chan, int is_all_ctrl_off)
|
||||||
fluid_channel_set_cc(chan, i, 0);
|
fluid_channel_set_cc(chan, i, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
fluid_channel_clear_portamento(chan); /* Clear PTC receive */
|
|
||||||
chan->previous_cc_breath = 0;/* Reset previous breath */
|
chan->previous_cc_breath = 0;/* Reset previous breath */
|
||||||
}
|
}
|
||||||
|
/* Unconditionally clear PTC receive (issue #1050) */
|
||||||
|
fluid_channel_clear_portamento(chan);
|
||||||
|
|
||||||
/* Reset polyphonic key pressure on all voices */
|
/* Reset polyphonic key pressure on all voices */
|
||||||
for(i = 0; i < 128; i++)
|
for(i = 0; i < 128; i++)
|
||||||
|
|
|
@ -184,6 +184,8 @@ fluid_mod_get_source_value(const unsigned char mod_src,
|
||||||
|
|
||||||
if(mod_flags & FLUID_MOD_CC)
|
if(mod_flags & FLUID_MOD_CC)
|
||||||
{
|
{
|
||||||
|
val = fluid_channel_get_cc(chan, mod_src);
|
||||||
|
|
||||||
/* From MIDI Recommended Practice (RP-036) Default Pan Formula:
|
/* From MIDI Recommended Practice (RP-036) Default Pan Formula:
|
||||||
* "Since MIDI controller values range from 0 to 127, the exact center
|
* "Since MIDI controller values range from 0 to 127, the exact center
|
||||||
* of the range, 63.5, cannot be represented. Therefore, the effective
|
* of the range, 63.5, cannot be represented. Therefore, the effective
|
||||||
|
@ -197,16 +199,20 @@ fluid_mod_get_source_value(const unsigned char mod_src,
|
||||||
if(mod_src == PAN_MSB || mod_src == BALANCE_MSB)
|
if(mod_src == PAN_MSB || mod_src == BALANCE_MSB)
|
||||||
{
|
{
|
||||||
*range = 126;
|
*range = 126;
|
||||||
val = fluid_channel_get_cc(chan, mod_src) - 1;
|
val -= 1;
|
||||||
|
|
||||||
if(val < 0)
|
if(val < 0)
|
||||||
{
|
{
|
||||||
val = 0;
|
val = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if(mod_src == PORTAMENTO_CTRL)
|
||||||
{
|
{
|
||||||
val = fluid_channel_get_cc(chan, mod_src);
|
// an invalid portamento fromkey should be treated as 0 when it's actually used for moulating
|
||||||
|
if(!fluid_channel_is_valid_note(val))
|
||||||
|
{
|
||||||
|
val = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in a new issue