750 |
while (itNoteEvent && itNoteEvent->FragmentPos() <= Skip) ++itNoteEvent; |
while (itNoteEvent && itNoteEvent->FragmentPos() <= Skip) ++itNoteEvent; |
751 |
} |
} |
752 |
|
|
753 |
|
uint killPos; |
754 |
|
if (itKillEvent) killPos = RTMath::Min(itKillEvent->FragmentPos(), pEngine->MaxFadeOutPos); |
755 |
|
|
756 |
uint i = Skip; |
uint i = Skip; |
757 |
while (i < Samples) { |
while (i < Samples) { |
758 |
int iSubFragmentEnd = RTMath::Min(i + CONFIG_DEFAULT_SUBFRAGMENT_SIZE, Samples); |
int iSubFragmentEnd = RTMath::Min(i + CONFIG_DEFAULT_SUBFRAGMENT_SIZE, Samples); |
773 |
// process transition events (note on, note off & sustain pedal) |
// process transition events (note on, note off & sustain pedal) |
774 |
processTransitionEvents(itNoteEvent, iSubFragmentEnd); |
processTransitionEvents(itNoteEvent, iSubFragmentEnd); |
775 |
|
|
776 |
|
// if the voice was killed in this subfragment switch EG1 to fade out stage |
777 |
|
if (itKillEvent && killPos <= iSubFragmentEnd) { |
778 |
|
EG1.enterFadeOutStage(); |
779 |
|
itKillEvent = Pool<Event>::Iterator(); |
780 |
|
} |
781 |
|
|
782 |
// process envelope generators |
// process envelope generators |
783 |
switch (EG1.getSegmentType()) { |
switch (EG1.getSegmentType()) { |
784 |
case EGADSR::segment_lin: |
case EGADSR::segment_lin: |