public float MBTToBeats(Mbt mbt) { if (!_HasMidiFile()) { return(mbt.beat * 4); } BarBeatTimeSpan inputSpan = new BarBeatTimeSpan(mbt.measure, mbt.beat, mbt.tick); BeatTimeSpan outputSpan = TimeConverter.ConvertTo <BeatTimeSpan>(inputSpan, _tempoMap); float resultBeats = (float)outputSpan.Beats + ((float)outputSpan.Ticks / _TicksPerBeat()); return(resultBeats); }
public Mbt BeatsToMBT(float beat) { if (!_HasMidiFile()) { return(new Mbt(0, (int)beat, 0)); } float frac = beat % 1.0f; int beats = (int)beat; int ticks = (int)(frac * _TicksPerBeat()); BeatTimeSpan inputSpan = new BeatTimeSpan(beats, ticks); BarBeatTimeSpan outputSpan = TimeConverter.ConvertTo <BarBeatTimeSpan>(inputSpan, _tempoMap); return(new Mbt((int)outputSpan.Bars, (int)outputSpan.Beats, (int)outputSpan.Ticks)); }
public float BeatsToSecs(float beat) { if (!_HasMidiFile()) { return(0.0f); } float frac = beat % 1.0f; int beats = (int)beat; int ticks = (int)(frac * _TicksPerBeat()); BeatTimeSpan inputSpan = new BeatTimeSpan(beats, ticks); MetricTimeSpan outputSpan = TimeConverter.ConvertTo <MetricTimeSpan>(inputSpan, _tempoMap); float secs = outputSpan.TotalMicroseconds / 1000000.0f; return(secs); }
public float SecsToBeats(float secs) { if (!_HasMidiFile()) { return(0.0f); } long microseconds = (long)(secs * 1000000.0f); MetricTimeSpan inputSpan = new MetricTimeSpan(microseconds); BeatTimeSpan outputSpan = TimeConverter.ConvertTo <BeatTimeSpan>(inputSpan, _tempoMap); float beats = (float)outputSpan.Beats; beats += ((float)outputSpan.Ticks / _TicksPerBeat()); return(beats); }