/* sweep the tempo to a new value relative to the current value */ public static void TempoControlSweepToAdjustedValue( TempoControlRec Tempo, LargeBCDType AdjustBPM, SmallExtBCDType NumBeatsToReach) { TempoControlSweepHelper( Tempo, Tempo.CurrentBeatsPerMinute + (double)AdjustBPM, NumBeatsToReach); }
/* sweep the tempo to a new value */ public static void TempoControlSweepToNewValue( TempoControlRec Tempo, LargeBCDType NewBPM, SmallExtBCDType NumBeatsToReach) { TempoControlSweepHelper( Tempo, (double)NewBPM, NumBeatsToReach); }
/* set the tempo to the specified number of beats per minute */ public static void TempoControlSetBeatsPerMinute( TempoControlRec Tempo, LargeBCDType NewBeatsPerMinute) { Tempo.CurrentBeatsPerMinute = (double)NewBeatsPerMinute; if (Tempo.CurrentBeatsPerMinute < MINBPM) { Tempo.CurrentBeatsPerMinute = MINBPM; } Tempo.BeatsPerMinuteChangeCountdown = 0; }
/* adjust the tempo by adding the specified value to it */ public static void TempoControlAdjustBeatsPerMinute( TempoControlRec Tempo, LargeBCDType IncrementBeatsPerMinute) { Tempo.CurrentBeatsPerMinute += (double)IncrementBeatsPerMinute; if (Tempo.CurrentBeatsPerMinute < MINBPM) { Tempo.CurrentBeatsPerMinute = MINBPM; } Tempo.BeatsPerMinuteChangeCountdown = 0; }
/* create a new tempo control record */ public static TempoControlRec NewTempoControl(LargeBCDType DefaultBeatsPerMinute) { #if DEBUG Debug.Assert(DURATIONUPDATECLOCKRESOLUTION == Constants.Denominator); #endif TempoControlRec Tempo = new TempoControlRec(); Tempo.DefaultBeatsPerMinute = (double)DefaultBeatsPerMinute; Tempo.CurrentBeatsPerMinute = Tempo.DefaultBeatsPerMinute; ResetLinearTransition(ref Tempo.BeatsPerMinuteChange, 0, 0, 1); Tempo.BeatsPerMinuteChangeCountdown = 0; return(Tempo); }
/* update the tempo control & return the new value */ public static double TempoControlUpdate( TempoControlRec Tempo, int NumTicks) { int RunoutTicks = NumTicks; if (RunoutTicks > Tempo.BeatsPerMinuteChangeCountdown) { RunoutTicks = Tempo.BeatsPerMinuteChangeCountdown; } if (RunoutTicks > 0) { Tempo.CurrentBeatsPerMinute = LinearTransitionUpdateMultiple( ref Tempo.BeatsPerMinuteChange, RunoutTicks); Tempo.BeatsPerMinuteChangeCountdown -= RunoutTicks; } return(Tempo.CurrentBeatsPerMinute); }
/* helper for sweeping to new double-precision value */ private static void TempoControlSweepHelper( TempoControlRec Tempo, double dNewBPM, SmallExtBCDType NumBeatsToReach) { if (dNewBPM < MINBPM) { dNewBPM = MINBPM; } double LocalNumBeatsToReach = (double)NumBeatsToReach; if (LocalNumBeatsToReach < 0) { LocalNumBeatsToReach = 0; } Tempo.BeatsPerMinuteChangeCountdown = (int)(LocalNumBeatsToReach * (DURATIONUPDATECLOCKRESOLUTION / 4)); ResetLinearTransition( ref Tempo.BeatsPerMinuteChange, Tempo.CurrentBeatsPerMinute, dNewBPM, Tempo.BeatsPerMinuteChangeCountdown); }
/* reset tempo to default value */ public static void TempoControlRestoreDefault(TempoControlRec Tempo) { Tempo.CurrentBeatsPerMinute = Tempo.DefaultBeatsPerMinute; Tempo.BeatsPerMinuteChangeCountdown = 0; }