781 |
RTList<Event>::Iterator itCCEvent = pEngineChannel->pEvents->first(); |
RTList<Event>::Iterator itCCEvent = pEngineChannel->pEvents->first(); |
782 |
RTList<Event>::Iterator itNoteEvent = pEngineChannel->pMIDIKeyInfo[MIDIKey].pEvents->first(); |
RTList<Event>::Iterator itNoteEvent = pEngineChannel->pMIDIKeyInfo[MIDIKey].pEvents->first(); |
783 |
|
|
784 |
if (Skip) { // skip events that happened before this voice was triggered |
if (itTriggerEvent) { // skip events that happened before this voice was triggered |
785 |
while (itCCEvent && itCCEvent->FragmentPos() <= Skip) ++itCCEvent; |
while (itCCEvent && itCCEvent->FragmentPos() <= Skip) ++itCCEvent; |
786 |
while (itNoteEvent && itNoteEvent->FragmentPos() <= Skip) ++itNoteEvent; |
while (itNoteEvent && itNoteEvent->FragmentPos() <= Skip) ++itNoteEvent; |
787 |
} |
} |
788 |
|
|
789 |
uint killPos; |
uint killPos; |
790 |
if (itKillEvent) killPos = RTMath::Min(itKillEvent->FragmentPos(), pEngine->MaxFadeOutPos); |
if (itKillEvent) { |
791 |
|
int maxFadeOutPos = Samples - pEngine->MinFadeOutSamples; |
792 |
|
if (maxFadeOutPos < 0) { |
793 |
|
// There's not enough space in buffer to do a fade out |
794 |
|
// from max volume (this can only happen for audio |
795 |
|
// drivers that use Samples < MaxSamplesPerCycle). |
796 |
|
// End the EG1 here, at pos 0, with a shorter max fade |
797 |
|
// out time. |
798 |
|
EG1.enterFadeOutStage(Samples / CONFIG_DEFAULT_SUBFRAGMENT_SIZE); |
799 |
|
itKillEvent = Pool<Event>::Iterator(); |
800 |
|
} else { |
801 |
|
killPos = RTMath::Min(itKillEvent->FragmentPos(), maxFadeOutPos); |
802 |
|
} |
803 |
|
} |
804 |
|
|
805 |
uint i = Skip; |
uint i = Skip; |
806 |
while (i < Samples) { |
while (i < Samples) { |