diff --git a/include/InstrumentTrack.h b/include/InstrumentTrack.h index fca241212..2e212e4b5 100644 --- a/include/InstrumentTrack.h +++ b/include/InstrumentTrack.h @@ -229,6 +229,8 @@ private: int m_runningMidiNotes[NumKeys]; bool m_sustainPedalPressed; + bool m_silentBuffersProcessed; + IntModel m_baseNoteModel; NotePlayHandleList m_processHandles; diff --git a/src/tracks/InstrumentTrack.cpp b/src/tracks/InstrumentTrack.cpp index 4ded25fbe..431dd9eb5 100644 --- a/src/tracks/InstrumentTrack.cpp +++ b/src/tracks/InstrumentTrack.cpp @@ -100,6 +100,7 @@ InstrumentTrack::InstrumentTrack( TrackContainer* tc ) : this, this ), m_notes(), m_sustainPedalPressed( false ), + m_silentBuffersProcessed( false ), m_baseNoteModel( 0, 0, KeysPerOctave * NumOctaves - 1, this, tr( "Base note" ) ), m_volumeModel( DefaultVolume, MinVolume, MaxVolume, 0.1f, this, tr( "Volume" ) ), @@ -165,8 +166,17 @@ void InstrumentTrack::processAudioBuffer( sampleFrame* buf, const fpp_t frames, // 99 of 100 cases so that test would be a waste of time. if( n == NULL && MixHelpers::isSilent( buf, frames ) ) { - // skip further processing - return; + // at least pass one silent buffer to allow + if( m_silentBuffersProcessed ) + { + // skip further processing + return; + } + m_silentBuffersProcessed = true; + } + else + { + m_silentBuffersProcessed = false; } // if effects "went to sleep" because there was no input, wake them up