Midi sustain working when envelope is on (#3730)
* midi sustain working when envelope is on * pressing sustain pedal again doesn't pause release [cherry-picked from master]
This commit is contained in:
@@ -137,7 +137,8 @@ void InstrumentSoundShaping::processAudioBuffer( sampleFrame* buffer,
|
||||
const f_cnt_t envTotalFrames = n->totalFramesPlayed();
|
||||
f_cnt_t envReleaseBegin = envTotalFrames - n->releaseFramesDone() + n->framesBeforeRelease();
|
||||
|
||||
if( n->isReleased() == false )
|
||||
if( !n->isReleased() || ( n->instrumentTrack()->isSustainPedalPressed() &&
|
||||
!n->isReleaseStarted() ) )
|
||||
{
|
||||
envReleaseBegin += frames;
|
||||
}
|
||||
|
||||
@@ -62,6 +62,7 @@ NotePlayHandle::NotePlayHandle( InstrumentTrack* instrumentTrack,
|
||||
m_releaseFramesDone( 0 ),
|
||||
m_subNotes(),
|
||||
m_released( false ),
|
||||
m_releaseStarted( false ),
|
||||
m_hasParent( parent != NULL ),
|
||||
m_parent( parent ),
|
||||
m_hadChildren( false ),
|
||||
@@ -248,8 +249,11 @@ void NotePlayHandle::play( sampleFrame * _working_buffer )
|
||||
m_instrumentTrack->playNote( this, _working_buffer );
|
||||
}
|
||||
|
||||
if( m_released )
|
||||
if( m_released && (!instrumentTrack()->isSustainPedalPressed() ||
|
||||
m_releaseStarted) )
|
||||
{
|
||||
m_releaseStarted = true;
|
||||
|
||||
f_cnt_t todo = framesThisPeriod;
|
||||
|
||||
// if this note is base-note for arpeggio, always set
|
||||
|
||||
Reference in New Issue
Block a user