660 |
// release voices on this key if needed |
// release voices on this key if needed |
661 |
if (pKey->Active && !pEngineChannel->SustainPedal) { |
if (pKey->Active && !pEngineChannel->SustainPedal) { |
662 |
itNoteOffEvent->Type = Event::type_release; // transform event type |
itNoteOffEvent->Type = Event::type_release; // transform event type |
|
} |
|
663 |
|
|
664 |
// move event to the key's own event list |
// move event to the key's own event list |
665 |
RTList<Event>::Iterator itNoteOffEventOnKeyList = itNoteOffEvent.moveToEndOf(pKey->pEvents); |
RTList<Event>::Iterator itNoteOffEventOnKeyList = itNoteOffEvent.moveToEndOf(pKey->pEvents); |
666 |
|
|
667 |
// spawn release triggered voice(s) if needed |
// spawn release triggered voice(s) if needed |
668 |
if (pKey->ReleaseTrigger) { |
if (pKey->ReleaseTrigger) { |
669 |
// first, get total amount of required voices (dependant on amount of layers) |
// first, get total amount of required voices (dependant on amount of layers) |
670 |
::gig::Region* pRegion = pEngineChannel->pInstrument->GetRegion(itNoteOffEventOnKeyList->Param.Note.Key); |
::gig::Region* pRegion = pEngineChannel->pInstrument->GetRegion(itNoteOffEventOnKeyList->Param.Note.Key); |
671 |
if (pRegion) { |
if (pRegion) { |
672 |
int voicesRequired = pRegion->Layers; |
int voicesRequired = pRegion->Layers; |
673 |
// now launch the required amount of voices |
// now launch the required amount of voices |
674 |
for (int i = 0; i < voicesRequired; i++) |
for (int i = 0; i < voicesRequired; i++) |
675 |
LaunchVoice(pEngineChannel, itNoteOffEventOnKeyList, i, true, false); //FIXME: for the moment we don't perform voice stealing for release triggered samples |
LaunchVoice(pEngineChannel, itNoteOffEventOnKeyList, i, true, false); //FIXME: for the moment we don't perform voice stealing for release triggered samples |
676 |
} |
} |
677 |
pKey->ReleaseTrigger = false; |
pKey->ReleaseTrigger = false; |
678 |
|
} |
679 |
|
|
680 |
|
// if neither a voice was spawned or postponed then remove note off event from key again |
681 |
|
if (!pKey->Active && !pKey->VoiceTheftsQueued) |
682 |
|
pKey->pEvents->free(itNoteOffEventOnKeyList); |
683 |
} |
} |
|
|
|
|
// if neither a voice was spawned or postponed then remove note off event from key again |
|
|
if (!pKey->Active && !pKey->VoiceTheftsQueued) |
|
|
pKey->pEvents->free(itNoteOffEventOnKeyList); |
|
684 |
} |
} |
685 |
|
|
686 |
/** |
/** |
1199 |
} |
} |
1200 |
|
|
1201 |
String Engine::Version() { |
String Engine::Version() { |
1202 |
String s = "$Revision: 1.35 $"; |
String s = "$Revision: 1.36 $"; |
1203 |
return s.substr(11, s.size() - 13); // cut dollar signs, spaces and CVS macro keyword |
return s.substr(11, s.size() - 13); // cut dollar signs, spaces and CVS macro keyword |
1204 |
} |
} |
1205 |
|
|