本文整理汇总了C++中TimingData::GetBPMAtBeat方法的典型用法代码示例。如果您正苦于以下问题:C++ TimingData::GetBPMAtBeat方法的具体用法?C++ TimingData::GetBPMAtBeat怎么用?C++ TimingData::GetBPMAtBeat使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TimingData
的用法示例。
在下文中一共展示了TimingData::GetBPMAtBeat方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: LoadFromKSFFile
//.........这里部分代码省略.........
/*
if (bKIUCompliant)
{
// Log an error, ignore the line.
continue;
}
*/
// gotta do something tricky here: if the bpm is below one then a couple of calculations
// for scrollsegments will be made, example, bpm 0.2, tick 4000, the scrollsegment will
// be 0. if the tickcount is non a stepmania standard then it will be adapted, a scroll
// segment will then be added based on approximations. -DaisuMaster
// eh better do it considering the tickcount (high tickcounts)
// I'm making some experiments, please spare me...
//continue;
std::string temp = sRowString.substr(2,sRowString.size()-3);
float numTemp = StringToFloat(temp);
if (Rage::starts_with(sRowString, "|T"))
{
// duh
iTickCount = static_cast<int>(numTemp);
// I have been owned by the man -DaisuMaster
stepsTiming.SetTickcountAtBeat( fCurBeat, Rage::clamp(iTickCount, 0, ROWS_PER_BEAT) );
}
else if (Rage::starts_with(sRowString, "|B"))
{
// BPM
stepsTiming.SetBPMAtBeat( fCurBeat, numTemp );
}
else if (Rage::starts_with(sRowString, "|E"))
{
// DelayBeat
float fCurDelay = 60 / stepsTiming.GetBPMAtBeat(fCurBeat) * numTemp / iTickCount;
fCurDelay += stepsTiming.GetDelayAtRow(BeatToNoteRow(fCurBeat) );
stepsTiming.SetDelayAtBeat( fCurBeat, fCurDelay );
}
else if (Rage::starts_with(sRowString, "|D"))
{
// Delays
float fCurDelay = stepsTiming.GetStopAtRow(BeatToNoteRow(fCurBeat) );
fCurDelay += numTemp / 1000;
stepsTiming.SetDelayAtBeat( fCurBeat, fCurDelay );
}
else if (Rage::starts_with(sRowString, "|M") || Rage::starts_with(sRowString, "|C"))
{
// multipliers/combo
ComboSegment seg( BeatToNoteRow(fCurBeat), int(numTemp) );
stepsTiming.AddSegment( seg );
}
else if (Rage::starts_with(sRowString, "|S"))
{
// speed segments
}
else if (Rage::starts_with(sRowString, "|F"))
{
// fakes
}
else if (Rage::starts_with(sRowString, "|X"))
{
// scroll segments
ScrollSegment seg = ScrollSegment( BeatToNoteRow(fCurBeat), numTemp );
stepsTiming.AddSegment( seg );
//return true;
}
示例2: run
void run()
{
#define CHECK(call, exp) \
{ \
float ret = call; \
if( call != exp ) { \
LOG->Warn( "Line %i: Got %f, expected %f", __LINE__, ret, exp); \
return; \
} \
}
TimingData test;
test.AddBPMSegment( BPMSegment(0, 60) );
/* First, trivial sanity checks. */
CHECK( test.GetBeatFromElapsedTime(60), 60.0f );
CHECK( test.GetElapsedTimeFromBeat(60), 60.0f );
/* The first BPM segment extends backwards in time. */
CHECK( test.GetBeatFromElapsedTime(-60), -60.0f );
CHECK( test.GetElapsedTimeFromBeat(-60), -60.0f );
CHECK( test.GetBeatFromElapsedTime(100000), 100000.0f );
CHECK( test.GetElapsedTimeFromBeat(100000), 100000.0f );
CHECK( test.GetBeatFromElapsedTime(-100000), -100000.0f );
CHECK( test.GetElapsedTimeFromBeat(-100000), -100000.0f );
CHECK( test.GetBPMAtBeat(0), 60.0f );
CHECK( test.GetBPMAtBeat(100000), 60.0f );
CHECK( test.GetBPMAtBeat(-100000), 60.0f );
/* 120BPM at beat 10: */
test.AddBPMSegment( BPMSegment(10, 120) );
CHECK( test.GetBPMAtBeat(9.99), 60.0f );
CHECK( test.GetBPMAtBeat(10), 120.0f );
CHECK( test.GetBeatFromElapsedTime(9), 9.0f );
CHECK( test.GetBeatFromElapsedTime(10), 10.0f );
CHECK( test.GetBeatFromElapsedTime(10.5), 11.0f );
CHECK( test.GetElapsedTimeFromBeat(9), 9.0f );
CHECK( test.GetElapsedTimeFromBeat(10), 10.0f );
CHECK( test.GetElapsedTimeFromBeat(11), 10.5f );
/* Add a 5-second stop at beat 10. */
test.AddStopSegment( StopSegment(10, 5) );
/* The stop shouldn't affect GetBPMAtBeat at all. */
CHECK( test.GetBPMAtBeat(9.99), 60.0f );
CHECK( test.GetBPMAtBeat(10), 120.0f );
CHECK( test.GetBeatFromElapsedTime(9), 9.0f );
CHECK( test.GetBeatFromElapsedTime(10), 10.0f );
CHECK( test.GetBeatFromElapsedTime(12), 10.0f );
CHECK( test.GetBeatFromElapsedTime(14), 10.0f );
CHECK( test.GetBeatFromElapsedTime(15), 10.0f );
CHECK( test.GetBeatFromElapsedTime(15.5), 11.0f );
CHECK( test.GetElapsedTimeFromBeat(9), 9.0f );
CHECK( test.GetElapsedTimeFromBeat(10), 10.0f );
CHECK( test.GetElapsedTimeFromBeat(11), 15.5f );
/* Add a 2-second stop at beat 5 and a 5-second stop at beat 15. */
test.m_StopSegments.clear();
test.AddStopSegment( StopSegment(5, 2) );
test.AddStopSegment( StopSegment(15, 5) );
CHECK( test.GetBPMAtBeat(9.99), 60.0f );
CHECK( test.GetBPMAtBeat(10), 120.0f );
CHECK( test.GetBeatFromElapsedTime(1), 1.0f );
CHECK( test.GetBeatFromElapsedTime(2), 2.0f );
CHECK( test.GetBeatFromElapsedTime(5), 5.0f ); // stopped
CHECK( test.GetBeatFromElapsedTime(6), 5.0f ); // stopped
CHECK( test.GetBeatFromElapsedTime(7), 5.0f ); // stop finished
CHECK( test.GetBeatFromElapsedTime(8), 6.0f );
CHECK( test.GetBeatFromElapsedTime(12), 10.0f ); // bpm changes to 120
CHECK( test.GetBeatFromElapsedTime(13), 12.0f );
CHECK( test.GetBeatFromElapsedTime(14), 14.0f );
CHECK( test.GetBeatFromElapsedTime(14.5f), 15.0f ); // stopped
CHECK( test.GetBeatFromElapsedTime(15), 15.0f ); // stopped
CHECK( test.GetBeatFromElapsedTime(17), 15.0f ); // stopped
CHECK( test.GetBeatFromElapsedTime(19.5f), 15.0f ); // stop finished
CHECK( test.GetBeatFromElapsedTime(20), 16.0f );
CHECK( test.GetElapsedTimeFromBeat(1), 1.0f );
CHECK( test.GetElapsedTimeFromBeat(2), 2.0f );
CHECK( test.GetElapsedTimeFromBeat(5), 5.0f ); // stopped
CHECK( test.GetElapsedTimeFromBeat(6), 8.0f );
CHECK( test.GetElapsedTimeFromBeat(10), 12.0f ); // bpm changes to 120
CHECK( test.GetElapsedTimeFromBeat(12), 13.0f );
CHECK( test.GetElapsedTimeFromBeat(14), 14.0f );
CHECK( test.GetElapsedTimeFromBeat(15.0f), 14.5f ); // stopped
CHECK( test.GetElapsedTimeFromBeat(16), 20.0f );
RageTimer foobar;
/* We can look up the time of any given beat, then look up the beat of that
* time and get the original value. (We can't do this in reverse; the beat
* doesn't move during stop segments.) */
int q = 0;
for( float f = -10; f < 250; f += 0.002 )
//.........这里部分代码省略.........