private string ToMBT(MidiEvent midiEvent, int ticksPerBeat, List <TimeSignatureChange> timeSignatures) { TimeSignatureChange latestTimeSig = FindLatestTimeSig(midiEvent.AbsoluteTime, timeSignatures); long relativeTime = midiEvent.AbsoluteTime - latestTimeSig.AbsoluteTime; long measure = (relativeTime / (ticksPerBeat * latestTimeSig.BeatsPerMeasure)) + latestTimeSig.StartMeasureNumber; long beat = ((relativeTime / ticksPerBeat) % latestTimeSig.BeatsPerMeasure) + 1; long tick = relativeTime % ticksPerBeat; return(String.Format("{0}:{1}:{2}", measure, beat, tick)); }
private TimeSignatureChange FindLatestTimeSig(long absoluteTime, List <TimeSignatureChange> timeSignatures) { TimeSignatureChange latestChange = null; foreach (TimeSignatureChange change in timeSignatures) { if (absoluteTime >= change.AbsoluteTime) { latestChange = change; } else { break; } } if (latestChange != null) { latestChange = new TimeSignatureChange(0, 4, 1); } return(latestChange); }
private TimeSignatureChange FindLatestTimeSig(long absoluteTime, List<TimeSignatureChange> timeSignatures) { TimeSignatureChange latestChange = null; foreach (TimeSignatureChange change in timeSignatures) { if (absoluteTime >= change.AbsoluteTime) latestChange = change; else break; } if (latestChange != null) { latestChange = new TimeSignatureChange(0, 4, 1); } return latestChange; }