示例#1
0
        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);
                }
            }
        }
示例#2
0
        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);
        }
示例#3
0
 public NoteList(TempoMap tempoMap, TimeSignatureMap timeSignatureMap)
 {
     this.tempoMap         = tempoMap;
     this.timeSignatureMap = timeSignatureMap;
 }