void ParseConductorTrack(MidiTrack conductorTrack, TempoMap tempoMap, TimeSignatureMap timeSignatureMap) { var ticks = 0; foreach (var ev in conductorTrack) { ticks += ev.delta; if (!ev.metaEvent.HasValue) { continue; } var meta = ev.metaEvent.Value; if (meta.type == MetaEvent.Type.SET_TEMPO) { tempoMap.Add(ticks, ParseTempo(meta)); } if (meta.type == MetaEvent.Type.TIME_SIGNATURE) { int numerator, denominator; ParseTimeSignature(meta, out numerator, out denominator); timeSignatureMap.Add(ticks, numerator, denominator); } } }
public NoteList Read(string path) { var smf = MidiFileLoader.Load(File.ReadAllBytes(path)); var conductorTrack = smf.tracks[0]; var noteTrack = smf.tracks[1]; var tempoMap = new TempoMap(smf.division); var timeSignatureMap = new TimeSignatureMap(smf.division); ParseConductorTrack(conductorTrack, tempoMap, timeSignatureMap); var noteList = new NoteList(tempoMap, timeSignatureMap); ParseNoteTrack(smf, noteTrack, noteList); return(noteList); }
public NoteList(TempoMap tempoMap, TimeSignatureMap timeSignatureMap) { this.tempoMap = tempoMap; this.timeSignatureMap = timeSignatureMap; }