112 |
} |
} |
113 |
case stage_decay2: { |
case stage_decay2: { |
114 |
int process_end; |
int process_end; |
115 |
if (pTransitionEvent && pTransitionEvent->Type == Event::type_release) { |
if (pTransitionEvent && pTransitionEvent->Type == Event::type_release && pTransitionEvent->FragmentPos() <= Samples) { |
116 |
process_end = pTransitionEvent->FragmentPos(); |
process_end = pTransitionEvent->FragmentPos(); |
117 |
pTransitionEvent = pEvents->next(); |
pTransitionEvent = pEvents->next(); |
118 |
Stage = stage_release; // switch to release stage soon |
Stage = stage_release; // switch to release stage soon |
127 |
} |
} |
128 |
case stage_sustain: { |
case stage_sustain: { |
129 |
int process_end; |
int process_end; |
130 |
if (pTransitionEvent && pTransitionEvent->Type == Event::type_release) { |
if (pTransitionEvent && pTransitionEvent->Type == Event::type_release && pTransitionEvent->FragmentPos() <= Samples) { |
131 |
process_end = pTransitionEvent->FragmentPos(); |
process_end = pTransitionEvent->FragmentPos(); |
132 |
pTransitionEvent = pEvents->next(); |
pTransitionEvent = pEvents->next(); |
133 |
Stage = stage_release; // switch to release stage soon |
Stage = stage_release; // switch to release stage soon |
140 |
} |
} |
141 |
case stage_release: { |
case stage_release: { |
142 |
int process_end; |
int process_end; |
143 |
if (pTransitionEvent && pTransitionEvent->Type == Event::type_cancel_release) { |
if (pTransitionEvent && pTransitionEvent->Type == Event::type_cancel_release && pTransitionEvent->FragmentPos() <= Samples) { |
144 |
process_end = pTransitionEvent->FragmentPos(); |
process_end = pTransitionEvent->FragmentPos(); |
145 |
pTransitionEvent = pEvents->next(); |
pTransitionEvent = pEvents->next(); |
146 |
Stage = (InfiniteSustain) ? stage_sustain : stage_decay2; // switch back to sustain / decay2 stage soon |
Stage = (InfiniteSustain) ? stage_sustain : stage_decay2; // switch back to sustain / decay2 stage soon |