Skip to content

Commit

Permalink
Fix recording of sustained midi notes (#3710)
Browse files Browse the repository at this point in the history
  • Loading branch information
serdnab authored and zonkmachine committed Jul 26, 2017
1 parent ebfdc04 commit 2464a57
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 5 deletions.
9 changes: 6 additions & 3 deletions src/core/NotePlayHandle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -378,10 +378,13 @@ void NotePlayHandle::noteOff( const f_cnt_t _s )
}

// inform attached components about MIDI finished (used for recording in Piano Roll)
if( m_origin == OriginMidiInput )
if (!instrumentTrack()->isSustainPedalPressed())
{
setLength( MidiTime( static_cast<f_cnt_t>( totalFramesPlayed() / Engine::framesPerTick() ) ) );
m_instrumentTrack->midiNoteOff( *this );
if( m_origin == OriginMidiInput )
{
setLength( MidiTime( static_cast<f_cnt_t>( totalFramesPlayed() / Engine::framesPerTick() ) ) );
m_instrumentTrack->midiNoteOff( *this );
}
}
}

Expand Down
27 changes: 25 additions & 2 deletions src/tracks/InstrumentTrack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,14 @@ void InstrumentTrack::processInEvent( const MidiEvent& event, const MidiTime& ti
// be deleted later automatically)
Engine::mixer()->requestChangeInModel();
m_notes[event.key()]->noteOff( offset );
m_notes[event.key()] = NULL;

if (!(isSustainPedalPressed()) ||
!(m_notes[event.key()]->origin() ==
m_notes[event.key()]->OriginMidiInput))
{
m_notes[event.key()] = NULL;
}

Engine::mixer()->doneChangeInModel();
}
eventHandled = true;
Expand Down Expand Up @@ -302,8 +309,24 @@ void InstrumentTrack::processInEvent( const MidiEvent& event, const MidiTime& ti
{
m_sustainPedalPressed = true;
}
else
else if (isSustainPedalPressed())
{
for (NotePlayHandle*& nph : m_notes)
{
if (nph && nph->isReleased())
{
if( nph->origin() ==
nph->OriginMidiInput)
{
nph->setLength(
MidiTime( static_cast<f_cnt_t>(
nph->totalFramesPlayed() /
Engine::framesPerTick() ) ) );
midiNoteOff( *nph );
}
nph = NULL;
}
}
m_sustainPedalPressed = false;
}
}
Expand Down

0 comments on commit 2464a57

Please sign in to comment.