fixed several bugs responsible for clicks and pops

git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@488 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
Tobias Doerffel
2007-07-16 19:33:25 +00:00
parent 2fbc06338c
commit b6b10ddc36
5 changed files with 71 additions and 10 deletions

View File

@@ -327,8 +327,12 @@ const surroundSampleFrame * mixer::renderNextBuffer( void )
else if( !n->supportsParallelizing() )
{
n->play();
++idx;
}
else
{
++idx;
}
++idx;
}
for( playHandleVector::iterator it = par_hndls.begin();
it != par_hndls.end(); ++it )
@@ -340,7 +344,7 @@ const surroundSampleFrame * mixer::renderNextBuffer( void )
{
while( idx < m_playHandles.size() )
{
register playHandle * n = m_playHandles[idx];
playHandle * n = m_playHandles[idx];
// delete play-handle if it played completely
if( n->done() )
{

View File

@@ -202,7 +202,7 @@ void notePlayHandle::play( bool _try_parallelizing )
}
else
{
// no, then just decrese framesBeforeRelease
// no, then just decrease framesBeforeRelease
// and wait for next loop... (we're not in
// release-phase yet)
todo = 0;

View File

@@ -576,14 +576,9 @@ void instrumentTrack::processAudioBuffer( sampleFrame * _buf,
}
}
}
// last time we're called for current note?
if( ( _n->actualReleaseFramesToDo() == 0 &&
_n->totalFramesPlayed() +
engine::getMixer()->framesPerAudioBuffer() >=
_n->frames() ) ||
( _n->released() && _n->releaseFramesDone() +
engine::getMixer()->framesPerAudioBuffer() >=
_n->actualReleaseFramesToDo() ) )
if( _n->willFinishThisPeriod() )
{
// then do a soft fade-out at the end to avoid clicks
for( fpab_t i = ( _frames >= ENV_FRAMES ) ?