diff --git a/ChangeLog b/ChangeLog index 59ff97cd5..4298ed6c6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2007-08-18 Tobias Doerffel + + * src/core/mixer.cpp: + remove play-handles *after* we played all play-handles + + * src/tracks/instrument_track.cpp: + fixed a bug in monophonic behaviour + 2007-08-16 Tobias Doerffel * include/instrument.h: diff --git a/src/core/mixer.cpp b/src/core/mixer.cpp index 7ff439a56..69f43ae6a 100644 --- a/src/core/mixer.cpp +++ b/src/core/mixer.cpp @@ -288,7 +288,7 @@ const surroundSampleFrame * mixer::renderNextBuffer( void ) // clear last audio-buffer clearAudioBuffer( m_writeBuf, m_framesPerPeriod ); - +printf("---------------------------next period\n"); // if( criticalXRuns() == FALSE ) { engine::getSongEditor()->processNextBuffer(); @@ -320,24 +320,14 @@ const surroundSampleFrame * mixer::renderNextBuffer( void ) } ++idx; } - idx = 0; - while( idx < m_playHandles.size() ) + for( playHandleVector::iterator it = + m_playHandles.begin(); + it != m_playHandles.end(); ++it ) { - playHandle * n = m_playHandles[idx]; - if( n->done() ) + if( !( *it )->done() && + !( *it )->supportsParallelizing() ) { - delete n; - m_playHandles.erase( - m_playHandles.begin() + idx ); - } - else if( !n->supportsParallelizing() ) - { - n->play(); - ++idx; - } - else - { - ++idx; + ( *it )->play(); } } for( playHandleVector::iterator it = par_hndls.begin(); @@ -348,23 +338,31 @@ const surroundSampleFrame * mixer::renderNextBuffer( void ) } else { - while( idx < m_playHandles.size() ) + for( playHandleVector::iterator it = + m_playHandles.begin(); + it != m_playHandles.end(); ++it ) { - playHandle * n = m_playHandles[idx]; - // delete play-handle if it played completely - if( n->done() ) + if( !( *it )->done() ) { - delete n; - m_playHandles.erase( - m_playHandles.begin() + idx ); - } - else - { - n->play(); - ++idx; + ( *it )->play(); } } } + idx = 0; + while( idx < m_playHandles.size() ) + { + playHandle * n = m_playHandles[idx]; + if( n->done() ) + { + delete n; + m_playHandles.erase( + m_playHandles.begin() + idx ); + } + else + { + ++idx; + } + } unlockPlayHandles(); bool more_effects = FALSE; diff --git a/src/tracks/instrument_track.cpp b/src/tracks/instrument_track.cpp index 4ced4c992..d43092c65 100644 --- a/src/tracks/instrument_track.cpp +++ b/src/tracks/instrument_track.cpp @@ -799,10 +799,10 @@ void instrumentTrack::playNote( notePlayHandle * _n, bool _try_parallelizing ) // in last period and have // to clear parts of it _n->noteOff(); - engine::getMixer()->clearAudioBuffer( m_audioPort->firstBuffer(), +/* engine::getMixer()->clearAudioBuffer( m_audioPort->firstBuffer(), engine::getMixer()->framesPerPeriod() - ( *youngest_note )->offset(), - ( *youngest_note )->offset() ); + ( *youngest_note )->offset() );*/ return; } } @@ -811,7 +811,7 @@ void instrumentTrack::playNote( notePlayHandle * _n, bool _try_parallelizing ) else if( *youngest_note != _n && _n->released() ) { - return; + //return; } } }