fixed some bugs

git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@523 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
Tobias Doerffel
2007-08-18 18:56:46 +00:00
parent b01d1a2b11
commit 30bdca17c0
3 changed files with 38 additions and 32 deletions

View File

@@ -1,3 +1,11 @@
2007-08-18 Tobias Doerffel <tobydox/at/users/dot/sourceforge/dot/net>
* 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 <tobydox/at/users/dot/sourceforge/dot/net>
* include/instrument.h:

View File

@@ -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;

View File

@@ -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;
}
}
}