private string GetEarliestCommandName ( Data.Intermediate.Event.KeySignature ks, Data.Intermediate.Event.Tempo tempo, Data.Intermediate.Event.Instrument inst, Data.Intermediate.Event.Volume volume, Data.Intermediate.Event.Pan pan, Data.Intermediate.Event.NoteRest nr, int barNumber, bool prevTied, Settings settings ) { Data.Intermediate.Position pos; string name; if (ks == null) { pos = null; name = string.Empty; } else { if (barNumber < ks.Position.Bar) { if ((settings.noteRest.TieStyle == 1 || (settings.noteRest.TieStyle == 0 && settings.noteRest.CutByBar == 1 && !settings.noteRest.NewBlockInCutted)) && prevTied) { pos = ks.Position; name = ks.GetType().Name; } else { pos = null; name = string.Empty; } } else { pos = ks.Position; name = ks.GetType().Name; } } if (tempo != null) { if (barNumber == tempo.Position.Bar || (settings.noteRest.TieStyle == 1 || (settings.noteRest.TieStyle == 0 && settings.noteRest.CutByBar == 1 && !settings.noteRest.NewBlockInCutted)) && prevTied) { if (pos == null || pos.CompareTo(tempo.Position) > 0) { pos = tempo.Position; name = tempo.GetType().Name; } } } if (inst != null) { if (barNumber == inst.Position.Bar || (settings.noteRest.TieStyle == 1 || (settings.noteRest.TieStyle == 0 && settings.noteRest.CutByBar == 1 && !settings.noteRest.NewBlockInCutted)) && prevTied) { if (pos == null || pos.CompareTo(inst.Position) > 0) { pos = inst.Position; name = inst.GetType().Name; } } } if (volume != null) { if (barNumber == volume.Position.Bar || (settings.noteRest.TieStyle == 1 || (settings.noteRest.TieStyle == 0 && settings.noteRest.CutByBar == 1 && !settings.noteRest.NewBlockInCutted)) && prevTied) { if (pos == null || pos.CompareTo(volume.Position) > 0) { pos = volume.Position; name = volume.GetType().Name; } } } if (pan != null) { if (barNumber == pan.Position.Bar || (settings.noteRest.TieStyle == 1 || (settings.noteRest.TieStyle == 0 && settings.noteRest.CutByBar == 1 && !settings.noteRest.NewBlockInCutted)) && prevTied) { if (pos == null || pos.CompareTo(pan.Position) > 0) { pos = pan.Position; name = pan.GetType().Name; } } } if (nr != null) { if (barNumber == nr.Start.Bar || (settings.noteRest.TieStyle == 1 || (settings.noteRest.TieStyle == 0 && settings.noteRest.CutByBar == 1 && !settings.noteRest.NewBlockInCutted)) && prevTied) { if (pos == null || pos.CompareTo(nr.Start) > 0) { name = nr.GetType().Name; } } } return(name); }
private void ConvertConductorTrack(Data.MIDI.Track midiTrack, DataSet set, int timeDivision) { LinkedList <Data.MIDI.Event.Event> events = midiTrack.EventList; set.TimeSignatureList = ConvertTimeSignature(events, timeDivision); var pos = new Data.Intermediate.Position(1, 0); LinkedListNode <Data.Intermediate.Event.TimeSignature> tsNode = set.TimeSignatureList.First; var ksl = new LinkedList <Data.Intermediate.Event.KeySignature>(); ksl.AddFirst(new Data.Intermediate.Event.KeySignature(pos.Clone(), Key.CMaj)); // Set default key signature var tl = new LinkedList <Data.Intermediate.Event.Tempo>(); tl.AddFirst(new Data.Intermediate.Event.Tempo(pos.Clone(), 120)); // Set default tempo string title = string.Empty; var length = new Data.Intermediate.Position(1, 0); foreach (Data.MIDI.Event.Event ev in events) { pos = new Data.Intermediate.Position(pos, ev.DeltaTime, tsNode); while (tsNode.Next != null && pos.CompareTo(tsNode.Next.Value.Position) >= 0) // Go to proper node { tsNode = tsNode.Next; } if (ev is Data.MIDI.Event.SetTempo) { var st = (Data.MIDI.Event.SetTempo)ev; var newST = new Data.Intermediate.Event.Tempo(pos.Clone(), (60000000 / st.Value)); if (tl.Last.Value.Position.CompareTo(newST.Position) == 0) { tl.RemoveLast(); } tl.AddLast(newST); } else if (ev is Data.MIDI.Event.KeySignature) { var ks = (Data.MIDI.Event.KeySignature)ev; var newKS = new Data.Intermediate.Event.KeySignature(pos.Clone(), Tables.KeyTable[ks.MinorFlagNumber, ks.SignatureNumber]); if (ksl.Last.Value.Position.CompareTo(newKS.Position) == 0) { ksl.RemoveLast(); } ksl.AddLast(newKS); } else if (ev is Data.MIDI.Event.SequenceTrackName) { var stn = (Data.MIDI.Event.SequenceTrackName)ev; title = stn.Name; } else if (ev is Data.MIDI.Event.EndOfTrack) { length = pos.Clone(); } } set.TrackList.Add(new Data.Intermediate.Track( new List <Data.Intermediate.Notes>(), new LinkedList <Data.Intermediate.Event.Instrument>(), new LinkedList <Data.Intermediate.Event.Volume>(), new LinkedList <Data.Intermediate.Event.Pan>(), 0, length, "Conductor Track" )); set.TempoList = tl; set.KeySignatureList = ksl; set.Title = title; }
public TempoSet(Data.Intermediate.Event.Tempo intermediate, Data.MML.Command.Tempo mml) { this.intermediate = intermediate; this.mml = mml; }