fix TimingData::SetBPMAtBeat adding redundant BPM segments
This commit is contained in:
@@ -54,17 +54,21 @@ void TimingData::AddStopSegment( const StopSegment &seg )
|
|||||||
SortStopSegmentsArray( m_StopSegments );
|
SortStopSegmentsArray( m_StopSegments );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Change an existing BPM segment, merge identical segments together or insert a new one. */
|
||||||
void TimingData::SetBPMAtBeat( float fBeat, float fBPM )
|
void TimingData::SetBPMAtBeat( float fBeat, float fBPM )
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
for( i=0; i<m_BPMSegments.size(); i++ )
|
for( i=0; i<m_BPMSegments.size(); i++ )
|
||||||
if( m_BPMSegments[i].m_fStartBeat == fBeat )
|
if( m_BPMSegments[i].m_fStartBeat >= fBeat )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if( i == m_BPMSegments.size() ) // there is no BPMSegment at the current beat
|
if( i == m_BPMSegments.size() ||
|
||||||
|
fabsf(m_BPMSegments[i].m_fStartBeat-fBeat) > 0.001f )
|
||||||
{
|
{
|
||||||
// create a new BPMSegment
|
// There is no BPMSegment at the specified beat. If the BPM being set differs
|
||||||
AddBPMSegment( BPMSegment(fBeat, fBPM) );
|
// from the last BPMSegment's BPM, create a new BPMSegment.
|
||||||
|
if( i == 0 || fabsf(m_BPMSegments[i-1].m_fBPM - fBPM) > 0.009f )
|
||||||
|
AddBPMSegment( BPMSegment(fBeat, fBPM) );
|
||||||
}
|
}
|
||||||
else // BPMSegment being modified is m_BPMSegments[i]
|
else // BPMSegment being modified is m_BPMSegments[i]
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user