Ejemplo n.º 1
0
 /* 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);
 }
Ejemplo n.º 2
0
 /* sweep the tempo to a new value */
 public static void TempoControlSweepToNewValue(
     TempoControlRec Tempo,
     LargeBCDType NewBPM,
     SmallExtBCDType NumBeatsToReach)
 {
     TempoControlSweepHelper(
         Tempo,
         (double)NewBPM,
         NumBeatsToReach);
 }
Ejemplo n.º 3
0
 /* 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;
 }
Ejemplo n.º 4
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;
 }
Ejemplo n.º 5
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);
        }
Ejemplo n.º 6
0
        /* 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);
        }
Ejemplo n.º 7
0
        /* 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);
        }
Ejemplo n.º 8
0
 /* reset tempo to default value */
 public static void TempoControlRestoreDefault(TempoControlRec Tempo)
 {
     Tempo.CurrentBeatsPerMinute         = Tempo.DefaultBeatsPerMinute;
     Tempo.BeatsPerMinuteChangeCountdown = 0;
 }