private void GenerateFadeIn(Note note, int noteStart, int noteDuration, int noteKey, DynamicValue dynamicValue)
{
var track = note.Beat.Voice.Bar.Staff.Track;
var endVolume = ToChannelShort(track.PlaybackInfo.Volume);
var volumeFactor = (float)endVolume / noteDuration;
var tickStep = 120;
int steps = (noteDuration / tickStep);
var endTick = noteStart + noteDuration;
for (int i = steps - 1; i >= 0; i--)
{
var tick = endTick - (i * tickStep);
var volume = (tick - noteStart) * volumeFactor;
if (i == steps - 1)
{
_handler.AddControlChange(track.Index, noteStart, (byte)track.PlaybackInfo.PrimaryChannel, (byte)MidiController.VolumeCoarse, (byte)volume);
_handler.AddControlChange(track.Index, noteStart, (byte)track.PlaybackInfo.SecondaryChannel, (byte)MidiController.VolumeCoarse, (byte)volume);
}
_handler.AddControlChange(track.Index, tick, (byte)track.PlaybackInfo.PrimaryChannel, (byte)MidiController.VolumeCoarse, (byte)volume);
_handler.AddControlChange(track.Index, tick, (byte)track.PlaybackInfo.SecondaryChannel, (byte)MidiController.VolumeCoarse, (byte)volume);
}
}