809 |
case Event::type_release_note: |
case Event::type_release_note: |
810 |
case Event::type_play_note: |
case Event::type_play_note: |
811 |
case Event::type_stop_note: |
case Event::type_stop_note: |
812 |
|
case Event::type_kill_note: |
813 |
case Event::type_note_synth_param: |
case Event::type_note_synth_param: |
814 |
break; // noop |
break; // noop |
815 |
} |
} |
882 |
dmsg(5,("Engine: Stop Note received\n")); |
dmsg(5,("Engine: Stop Note received\n")); |
883 |
ProcessNoteOff((EngineChannel*)itEvent->pEngineChannel, itEvent); |
ProcessNoteOff((EngineChannel*)itEvent->pEngineChannel, itEvent); |
884 |
break; |
break; |
885 |
|
case Event::type_kill_note: |
886 |
|
dmsg(5,("Engine: Kill Note received\n")); |
887 |
|
ProcessKillNote((EngineChannel*)itEvent->pEngineChannel, itEvent); |
888 |
|
break; |
889 |
case Event::type_control_change: |
case Event::type_control_change: |
890 |
dmsg(5,("Engine: MIDI CC received\n")); |
dmsg(5,("Engine: MIDI CC received\n")); |
891 |
ProcessControlChange((EngineChannel*)itEvent->pEngineChannel, itEvent); |
ProcessControlChange((EngineChannel*)itEvent->pEngineChannel, itEvent); |
1932 |
} |
} |
1933 |
|
|
1934 |
/** |
/** |
1935 |
|
* Called on "kill note" events, which currently only happens on |
1936 |
|
* built-in real-time instrument script function fade_out(). This |
1937 |
|
* method only fulfills one task: moving the even to the Note's own |
1938 |
|
* event list so that its voices can process the kill event sample |
1939 |
|
* accurately. |
1940 |
|
*/ |
1941 |
|
void ProcessKillNote(EngineChannel* pEngineChannel, RTList<Event>::Iterator& itEvent) { |
1942 |
|
EngineChannelBase<V, R, I>* pChannel = static_cast<EngineChannelBase<V, R, I>*>(pEngineChannel); |
1943 |
|
|
1944 |
|
NoteBase* pNote = pChannel->pEngine->NoteByID( itEvent->Param.Note.ID ); |
1945 |
|
if (!pNote || pNote->hostKey < 0 || pNote->hostKey >= 128) return; |
1946 |
|
|
1947 |
|
// move note kill event to its MIDI key |
1948 |
|
MidiKey* pKey = &pChannel->pMIDIKeyInfo[pNote->hostKey]; |
1949 |
|
itEvent.moveToEndOf(pKey->pEvents); |
1950 |
|
} |
1951 |
|
|
1952 |
|
/** |
1953 |
* Called on note synthesis parameter change events. These are |
* Called on note synthesis parameter change events. These are |
1954 |
* internal events caused by calling built-in real-time instrument |
* internal events caused by calling built-in real-time instrument |
1955 |
* script functions like change_vol(), change_pitch(), etc. |
* script functions like change_vol(), change_tune(), etc. |
1956 |
* |
* |
1957 |
* This method performs two tasks: |
* This method performs two tasks: |
1958 |
* |
* |
1983 |
pNote->Override.Volume = itEvent->Param.NoteSynthParam.Delta; |
pNote->Override.Volume = itEvent->Param.NoteSynthParam.Delta; |
1984 |
itEvent->Param.NoteSynthParam.AbsValue = pNote->Override.Volume; |
itEvent->Param.NoteSynthParam.AbsValue = pNote->Override.Volume; |
1985 |
break; |
break; |
1986 |
|
case Event::synth_param_volume_time: |
1987 |
|
pNote->Override.VolumeTime = itEvent->Param.NoteSynthParam.AbsValue = itEvent->Param.NoteSynthParam.Delta; |
1988 |
|
break; |
1989 |
case Event::synth_param_pitch: |
case Event::synth_param_pitch: |
1990 |
if (relative) |
if (relative) |
1991 |
pNote->Override.Pitch *= itEvent->Param.NoteSynthParam.Delta; |
pNote->Override.Pitch *= itEvent->Param.NoteSynthParam.Delta; |
1993 |
pNote->Override.Pitch = itEvent->Param.NoteSynthParam.Delta; |
pNote->Override.Pitch = itEvent->Param.NoteSynthParam.Delta; |
1994 |
itEvent->Param.NoteSynthParam.AbsValue = pNote->Override.Pitch; |
itEvent->Param.NoteSynthParam.AbsValue = pNote->Override.Pitch; |
1995 |
break; |
break; |
1996 |
|
case Event::synth_param_pitch_time: |
1997 |
|
pNote->Override.PitchTime = itEvent->Param.NoteSynthParam.AbsValue = itEvent->Param.NoteSynthParam.Delta; |
1998 |
|
break; |
1999 |
case Event::synth_param_pan: |
case Event::synth_param_pan: |
2000 |
if (relative) { |
if (relative) { |
2001 |
pNote->Override.Pan = RTMath::RelativeSummedAvg(pNote->Override.Pan, itEvent->Param.NoteSynthParam.Delta, ++pNote->Override.PanSources); |
pNote->Override.Pan = RTMath::RelativeSummedAvg(pNote->Override.Pan, itEvent->Param.NoteSynthParam.Delta, ++pNote->Override.PanSources); |