Skip to content

Commit d5db4b9

Browse files
committed
Midi: Added support for note-off velocity with non-MPE midi notes
1 parent 2daa8e8 commit d5db4b9

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

modules/tracktion_engine/midi/tracktion_MidiList.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ static void addToSequence (juce::MidiMessageSequence& seq, const MidiClip& clip,
380380
if (upTime > downTime && upTime > 0.0)
381381
{
382382
seq.addEvent (juce::MidiMessage::noteOn (channelNumber, noteNumber, velocity), std::max (0.0, downTime));
383-
seq.addEvent (juce::MidiMessage::noteOff (channelNumber, noteNumber), upTime);
383+
seq.addEvent (juce::MidiMessage::noteOff (channelNumber, noteNumber, static_cast<uint8_t> (note.getNoteOffVelocity())), upTime);
384384
}
385385
}
386386
else if (downTime >= 0.0)
@@ -789,6 +789,18 @@ void MidiNote::setVelocity (int newVelocity, juce::UndoManager* undoManager)
789789
}
790790
}
791791

792+
int MidiNote::getNoteOffVelocity() const noexcept
793+
{
794+
return static_cast<int> (state[IDs::lift]);
795+
}
796+
797+
void MidiNote::setNoteOffVelocity (int newOffVelocity, juce::UndoManager* um)
798+
{
799+
jassert (juce::isPositiveAndNotGreaterThan (newOffVelocity, 127));
800+
newOffVelocity = juce::jlimit (0, 127, newOffVelocity);
801+
state.setProperty (IDs::lift, newOffVelocity, um);
802+
}
803+
792804
void MidiNote::setColour (int newColourIndex, juce::UndoManager* um)
793805
{
794806
newColourIndex = juce::jlimit (0, 127, newColourIndex);

modules/tracktion_engine/midi/tracktion_MidiNote.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ class MidiNote
6666
int getVelocity() const noexcept { return (int) velocity; }
6767
void setVelocity (int newVelocity, juce::UndoManager*);
6868

69+
int getNoteOffVelocity() const noexcept;
70+
void setNoteOffVelocity (int newOffVelocity, juce::UndoManager*);
71+
6972
int getColour() const noexcept { return (int) colour; }
7073
void setColour (int newColourIndex, juce::UndoManager*);
7174

0 commit comments

Comments
 (0)