/[svn]/linuxsampler/trunk/src/engines/common/MidiKeyboardManager.h
ViewVC logotype

Diff of /linuxsampler/trunk/src/engines/common/MidiKeyboardManager.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3444 by schoenebeck, Sun Dec 23 19:32:11 2018 UTC revision 3445 by schoenebeck, Sun Dec 23 20:08:41 2018 UTC
# Line 694  namespace LinuxSampler { Line 694  namespace LinuxSampler {
694                  RTList<uint>::Iterator iuiKey = pActiveKeys->first();                  RTList<uint>::Iterator iuiKey = pActiveKeys->first();
695                  for (; iuiKey; ++iuiKey) {                  for (; iuiKey; ++iuiKey) {
696                      MidiKey* pKey = &pMIDIKeyInfo[*iuiKey];                      MidiKey* pKey = &pMIDIKeyInfo[*iuiKey];
697                      if (!pKey->KeyPressed &&                      if (!pKey->KeyPressed && ShouldReleaseVoice(*iuiKey)) {
                         (pKey->ReleaseTrigger & release_trigger_sustain) &&  
                         ShouldReleaseVoice(*iuiKey))  
                     {  
698                          RTList<Event>::Iterator itNewEvent = pKey->pEvents->allocAppend();                          RTList<Event>::Iterator itNewEvent = pKey->pEvents->allocAppend();
699                          if (itNewEvent) {                          if (itNewEvent) {
700                              *itNewEvent = *itEvent; // copy event to the key's own event list                              *itNewEvent = *itEvent; // copy event to the key's own event list
701                              itNewEvent->Type = Event::type_release_key; // transform event type                              itNewEvent->Type = Event::type_release_key; // transform event type
702                              itNewEvent->Param.Note.Key = *iuiKey;                              itNewEvent->Param.Note.Key = *iuiKey;
703                              if (pKey->ReleaseTrigger & release_trigger_sustain_maxvelocity)                              itNewEvent->Param.Note.Velocity = 127;
                                 itNewEvent->Param.Note.Velocity = 127;  
                             else // release_trigger_sustain_keyvelocity ...  
                                 itNewEvent->Param.Note.Velocity = pKey->Velocity;  
704    
705                              //HACK: set sustain CC (64) as "pressed down" for a short moment, so that release trigger voices can distinguish between note off and sustain pedal up cases                              // process release trigger (if requested)
706                              AbstractEngineChannel* pChannel = (AbstractEngineChannel*) itEvent->pEngineChannel;                              if (pKey->ReleaseTrigger & release_trigger_sustain) {
707                              const int8_t CC64Value = pChannel->ControllerTable[64];                                  if (pKey->ReleaseTrigger & release_trigger_sustain_keyvelocity)
708                              pChannel->ControllerTable[64] = 127;                                      itNewEvent->Param.Note.Velocity = pKey->Velocity;
709    
710                              // now spawn release trigger voices (if required)                                  //HACK: set sustain CC (64) as "pressed down" for a short moment, so that release trigger voices can distinguish between note off and sustain pedal up cases
711                              ProcessReleaseTriggerBySustain(itNewEvent);                                  AbstractEngineChannel* pChannel = (AbstractEngineChannel*) itEvent->pEngineChannel;
712                                    const int8_t CC64Value = pChannel->ControllerTable[64];
713                                    pChannel->ControllerTable[64] = 127;
714    
715                              //HACK: reset sustain pedal CC value to old one (see comment above)                                  // now spawn release trigger voices (if required)
716                              pChannel->ControllerTable[64] = CC64Value;                                  ProcessReleaseTriggerBySustain(itNewEvent);
717    
718                                    //HACK: reset sustain pedal CC value to old one (see comment above)
719                                    pChannel->ControllerTable[64] = CC64Value;  
720                                }
721                          }                          }
722                          else dmsg(1,("Event pool emtpy!\n"));                          else dmsg(1,("Event pool emtpy!\n"));
723                      }                      }

Legend:
Removed from v.3444  
changed lines
  Added in v.3445

  ViewVC Help
Powered by ViewVC