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;
        }
Exemple #3
0
 public TempoSet(Data.Intermediate.Event.Tempo intermediate, Data.MML.Command.Tempo mml)
 {
     this.intermediate = intermediate;
     this.mml          = mml;
 }