private long GetTempo(MidiFile midiFile) { TempoMap tempoMap = midiFile.GetTempoMap(); long ticks = 123; BarBeatTimeSpan barBeatTimeSpan = TimeConverter.ConvertTo <BarBeatTimeSpan>(ticks, tempoMap); MusicalTimeSpan musicalTimeSpan = TimeConverter.ConvertTo <MusicalTimeSpan>(ticks, tempoMap); return(barBeatTimeSpan.Bars); }
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)); }
static void Main(string[] args) { IEnumerable <string> globFiles = GlobClass.Glob("D:\\data\\folkdataset\\*.mid"); Console.Write(globFiles.LongCount()); var count = 0; foreach (string filename in globFiles) { var split_filename = filename.Split('\\'); var id_filename = split_filename[split_filename.Count() - 1]; var midiFile = MidiFile.Read(filename); var result = new List <MidiFile>(); var windowSize = 4; for (var i = 0; ; i++) { var startTime = new BarBeatTimeSpan(i, 0); var endTime = new BarBeatTimeSpan(i + windowSize, 0); var grid = new ArbitraryGrid(new[] { startTime, endTime }); var newFiles = midiFile.SplitByGrid(grid).ToList(); if (!newFiles.Any()) { break; } else if (newFiles.Count == 1) { result.Add(newFiles[0]); } else { var secondNewFile = newFiles[1]; var tempoMap = secondNewFile.GetTempoMap(); var length = secondNewFile.GetTimedEvents().LastOrDefault()?.TimeAs <BarBeatTimeSpan>(tempoMap); if (length.Bars == windowSize || (length.Bars == windowSize - 1 && length.Beats > 0 && length.Ticks > 0)) { result.Add(secondNewFile); } else { break; } } } int j = 0; foreach (MidiFile res in result) { res.Write("D:\\data\\folkdataset_split_4\\" + id_filename + "_" + j + ".mid"); j += 1; count++; } // TODO if (count >= 10000) { Console.WriteLine("Reached the alloted size"); return; } } }