Add optional offset to TimingModel constructor.
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
using Cryville.Common.Math;
|
using Cryville.Common.Math;
|
||||||
|
using System;
|
||||||
|
|
||||||
namespace Cryville.Crtr.Extensions {
|
namespace Cryville.Crtr.Extensions {
|
||||||
public abstract class TimingModel {
|
public abstract class TimingModel {
|
||||||
@@ -6,13 +7,16 @@ namespace Cryville.Crtr.Extensions {
|
|||||||
public double BeatTime { get; protected set; }
|
public double BeatTime { get; protected set; }
|
||||||
public BeatTime FractionalBeatTime { get; protected set; }
|
public BeatTime FractionalBeatTime { get; protected set; }
|
||||||
public double BPM { get; set; }
|
public double BPM { get; set; }
|
||||||
public TimingModel() {
|
public TimingModel(double offset) {
|
||||||
|
Time = offset;
|
||||||
FractionalBeatTime = new BeatTime(0, 0, 1);
|
FractionalBeatTime = new BeatTime(0, 0, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public class FractionalBeatTimeTimingModel : TimingModel {
|
public class FractionalBeatTimeTimingModel : TimingModel {
|
||||||
|
public FractionalBeatTimeTimingModel(double offset = 0) : base(offset) { }
|
||||||
public void ForwardTo(BeatTime t) {
|
public void ForwardTo(BeatTime t) {
|
||||||
if (t == FractionalBeatTime) return;
|
if (t == FractionalBeatTime) return;
|
||||||
|
if (BPM == 0) throw new InvalidOperationException("BPM not determined");
|
||||||
FractionalBeatTime = t;
|
FractionalBeatTime = t;
|
||||||
var nt = t.Decimal;
|
var nt = t.Decimal;
|
||||||
Time += (nt - BeatTime) / BPM * 60;
|
Time += (nt - BeatTime) / BPM * 60;
|
||||||
@@ -20,13 +24,15 @@ namespace Cryville.Crtr.Extensions {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
public class BeatTimeTimingModel : TimingModel {
|
public class BeatTimeTimingModel : TimingModel {
|
||||||
|
public BeatTimeTimingModel(double offset = 0) : base(offset) { }
|
||||||
public void ForwardTo(double t) {
|
public void ForwardTo(double t) {
|
||||||
if (t == BeatTime) return;
|
if (t == BeatTime) return;
|
||||||
|
if (BPM == 0) throw new InvalidOperationException("BPM not determined");
|
||||||
Time += (t - BeatTime) / BPM * 60;
|
Time += (t - BeatTime) / BPM * 60;
|
||||||
BeatTime = t;
|
BeatTime = t;
|
||||||
FractionalBeatTime = ToBeatTime(t);
|
FractionalBeatTime = ToBeatTime(t);
|
||||||
}
|
}
|
||||||
BeatTime ToBeatTime(double beat, double error = 1e-4) {
|
static BeatTime ToBeatTime(double beat, double error = 1e-4) {
|
||||||
int i, n, d;
|
int i, n, d;
|
||||||
FractionUtils.ToFraction(beat, error, out n, out d);
|
FractionUtils.ToFraction(beat, error, out n, out d);
|
||||||
i = n / d; n %= d;
|
i = n / d; n %= d;
|
||||||
|
Reference in New Issue
Block a user