@@ -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+
792804void MidiNote::setColour (int newColourIndex, juce::UndoManager* um)
793805{
794806 newColourIndex = juce::jlimit (0 , 127 , newColourIndex);
0 commit comments