The MasterBar stores information about a bar which affects all tracks.
Пример #1
0
        internal void AddMasterBar(MasterBar masterBar)
        {
            if (Openings.Count == 0)
            {
                Openings.Add(masterBar);
            }

            MasterBars.Add(masterBar);
            masterBar.RepeatGroup = this;

            if (masterBar.IsRepeatEnd)
            {
                Closings.Add(masterBar);
                IsClosed = true;
                if (!IsOpened)
                {
                    MasterBars[0].IsRepeatStart = true;
                    IsOpened = true;
                }
            }
            // a new item after the header was closed? -> repeat alternative reopens the group
            else if (IsClosed)
            {
                IsClosed = false;
                Openings.Add(masterBar);
            }
        }
Пример #2
0
 public static void CopyTo(MasterBar src, MasterBar dst)
 {
     dst.AlternateEndings         = src.AlternateEndings;
     dst.Index                    = src.Index;
     dst.KeySignature             = src.KeySignature;
     dst.IsDoubleBar              = src.IsDoubleBar;
     dst.IsRepeatStart            = src.IsRepeatStart;
     dst.RepeatCount              = src.RepeatCount;
     dst.TimeSignatureNumerator   = src.TimeSignatureNumerator;
     dst.TimeSignatureDenominator = src.TimeSignatureDenominator;
     dst.TripletFeel              = src.TripletFeel;
     dst.Start                    = src.Start;
 }
Пример #3
0
 public static void CopyTo(MasterBar src, MasterBar dst)
 {
     dst.AlternateEndings = src.AlternateEndings;
     dst.Index = src.Index;
     dst.KeySignature = src.KeySignature;
     dst.IsDoubleBar = src.IsDoubleBar;
     dst.IsRepeatStart = src.IsRepeatStart;
     dst.RepeatCount = src.RepeatCount;
     dst.TimeSignatureNumerator = src.TimeSignatureNumerator;
     dst.TimeSignatureDenominator = src.TimeSignatureDenominator;
     dst.TripletFeel = src.TripletFeel;
     dst.Start = src.Start;
 }
Пример #4
0
        public void AddMasterBar(MasterBar bar)
        {
            bar.Score = this;
            bar.Index = MasterBars.Count;
            if (MasterBars.Count != 0)
            {
                bar.PreviousMasterBar = MasterBars[MasterBars.Count - 1];
                bar.PreviousMasterBar.NextMasterBar = bar;
                bar.Start = bar.PreviousMasterBar.Start + bar.PreviousMasterBar.CalculateDuration();
            }

            // if the group is closed only the next upcoming header can
            // reopen the group in case of a repeat alternative, so we
            // remove the current group
            if (bar.IsRepeatStart || (_currentRepeatGroup.IsClosed && bar.AlternateEndings <= 0))
            {
                _currentRepeatGroup = new RepeatGroup();
            }
            _currentRepeatGroup.AddMasterBar(bar);
            MasterBars.Add(bar);
        }
Пример #5
0
        public void AddMasterBar(MasterBar masterBar)
        {
            if (Openings.Count == 0)
            {
                Openings.Add(masterBar);
            }

            MasterBars.Add(masterBar);
            masterBar.RepeatGroup = this;

            if (masterBar.IsRepeatEnd)
            {
                Closings.Add(masterBar);
                IsClosed = true;
            }
            // a new item after the header was closed? -> repeat alternative reopens the group
            else if (IsClosed)
            {
                IsClosed = false;
                Openings.Add(masterBar);
            }
        }
Пример #6
0
 private void ParseAttributes(IXmlNode element, Bar bar, MasterBar masterBar)
 {
     element.IterateChildren(c =>
     {
         if (c.NodeType == XmlNodeType.Element)
         {
             switch (c.LocalName)
             {
                 case "key":
                     ParseKey(c, masterBar);
                     break;
                 case "time":
                     ParseTime(c, masterBar);
                     break;
                 case "clef":
                     ParseClef(c, bar);
                     break;
             }
         }
     });
 }
Пример #7
0
        private MasterBar GetOrCreateMasterBar(int index)
        {
            if (index < _score.MasterBars.Count)
            {
                return _score.MasterBars[index];
            }

            for (int i = _score.MasterBars.Count; i <= index; i++)
            {
                var mb = new MasterBar();
                _score.AddMasterBar(mb);
            }

            return _score.MasterBars[index];
        }
Пример #8
0
 private void ParseMasterBar(IXmlNode node)
 {
     var masterBar = new MasterBar();
     node.IterateChildren(c =>
     {
         if (c.NodeType == XmlNodeType.Element)
         {
             switch (c.LocalName)
             {
                 case "Time":
                     var timeParts = GetValue(c).Split('/');
                     masterBar.TimeSignatureNumerator = Std.ParseInt(timeParts[0]);
                     masterBar.TimeSignatureDenominator = Std.ParseInt(timeParts[1]);
                     break;
                 case "DoubleBar":
                     masterBar.IsDoubleBar = true;
                     break;
                 case "Section":
                     masterBar.Section = new Section();
                     masterBar.Section.Marker = GetValue(FindChildElement(c, "Letter"));
                     masterBar.Section.Text = GetValue(FindChildElement(c, "Text"));
                     break;
                 case "Repeat":
                     if (c.Attributes.Get("start").Value.ToLower() == "true")
                     {
                         masterBar.IsRepeatStart = true;
                     }
                     if (c.Attributes.Get("end").Value.ToLower() == "true" && c.Attributes.Get("count").Value != null)
                     {
                         masterBar.RepeatCount = Std.ParseInt(c.Attributes.Get("count").Value);
                     }
                     break;
                 // TODO case "Directions": // Coda segno etc.
                 case "AlternateEndings":
                     var alternateEndings = GetValue(c).Split(' ');
                     var i = 0;
                     for (int k = 0; k < alternateEndings.Length; k++)
                     {
                         i |= 1 << (-1 + Std.ParseInt(alternateEndings[i]));
                     }
                     masterBar.AlternateEndings = (byte)i;
                     break;
                 case "Bars":
                     _barsOfMasterBar.Add(GetValue(c).Split(' '));
                     break;
                 case "TripletFeel":
                     switch (GetValue(c))
                     {
                         case "NoTripletFeel":
                             masterBar.TripletFeel = TripletFeel.NoTripletFeel;
                             break;
                         case "Triplet8th":
                             masterBar.TripletFeel = TripletFeel.Triplet8th;
                             break;
                         case "Triplet16th":
                             masterBar.TripletFeel = TripletFeel.Triplet16th;
                             break;
                         case "Dotted8th":
                             masterBar.TripletFeel = TripletFeel.Dotted8th;
                             break;
                         case "Dotted16th":
                             masterBar.TripletFeel = TripletFeel.Dotted16th;
                             break;
                         case "Scottish8th":
                             masterBar.TripletFeel = TripletFeel.Scottish8th;
                             break;
                         case "Scottish16th":
                             masterBar.TripletFeel = TripletFeel.Scottish16th;
                             break;
                     }
                     break;
                 case "Key":
                     masterBar.KeySignature = Std.ParseInt(GetValue(FindChildElement(c, "AccidentalCount")));
                     break;
             }
         }
     });
     _masterBars.Add(masterBar);
 }
Пример #9
0
        public void SetNotes(GeneticMIDI.Representation.Track track)
        {
            if (track.Length < 1)
                return;

            var mel = track.GetMelodySequence();

            //return;

            score = new Score();

            Track t = new Track();

            MasterBar mb = new MasterBar();
            score.AddMasterBar(mb);
            mb.KeySignature = 2;

            Bar b = new Bar();
            t.AddBar(b);
            score.AddTrack(t);

            Voice v = new Voice();
            b.AddVoice(v);

            t.Name = track.Instrument.ToString().Replace("_", " ");

            //t.IsPercussion = true;
            if(t.IsPercussion)
            {

                b.Clef = Clef.Neutral;
            }

            int i = 0;

            int qn_per_bar = 4;

            int durs = 0;
            int avg_octave = mel.CalculateAverageOctave();
            int dist4 = 4 - avg_octave;
            foreach (var n in mel.Notes)
            {
                Beat be = new Beat();
                be.Index = i++;

                GeneticMIDI.Representation.Durations dur;
                int remainder;

                n.GetClosestLowerDurationAndRemainder(out dur, out remainder);

                int dots = n.GetNumberOfDots();

                durs += n.Duration;

                /*        if(durs >= qn_per_bar * (int)GeneticMIDI.Representation.Durations.qn)
                        {
                            durs = 0;
                            b = new Bar();
                            t.AddBar(b);
                            v.Bar = b;
                            b.Finish();
                        }*/

                switch (((GeneticMIDI.Representation.Durations)n.Duration))
                {
                    case GeneticMIDI.Representation.Durations.bn:
                        be.Duration = AlphaTab.Model.Duration.Whole;
                        dots = 2;
                        break;
                    case GeneticMIDI.Representation.Durations.en:
                        be.Duration = AlphaTab.Model.Duration.Eighth;
                        break;
                    case GeneticMIDI.Representation.Durations.hn:
                        be.Duration = AlphaTab.Model.Duration.Half;
                        break;
                    case GeneticMIDI.Representation.Durations.qn:
                        be.Duration = AlphaTab.Model.Duration.Quarter;
                        break;
                    case GeneticMIDI.Representation.Durations.sn:
                        be.Duration = AlphaTab.Model.Duration.Sixteenth;
                        break;
                    case GeneticMIDI.Representation.Durations.tn:
                        be.Duration = AlphaTab.Model.Duration.ThirtySecond;
                        break;
                    case GeneticMIDI.Representation.Durations.wn:
                        be.Duration = AlphaTab.Model.Duration.Whole;
                        break;
                    default:
                        break;
                }
                be.Dots = dots;

                Note note = new Note();

                if (!n.IsRest())
                {
                    note.Tone = n.NotePitch;
                    note.Octave = n.Octave + dist4;

                    be.AddNote(note);
                    be.IsEmpty = false;
                }

                if (n.IsRest() && n.Duration < 2)
                {

                }
                else
                    v.AddBeat(be);

                be.RefreshNotes();

            }

            v.Bar = b;

            v.Finish();

            b.Finish();

            t.Finish();

            score.Finish();

            //TablatureControl

            _renderer.Render(t);
            return;

            /*TablatureControl.Track = t;
            TablatureControl.InvalidateVisual();
            TablatureControl.InvalidateTrack();        */
        }
Пример #10
0
        public Score JsObjectToScore(Score score)
        {
            var score2 = new Score();

            Score.CopyTo(score, score2);

            #region MasterBars

            for (var i = 0; i < score.MasterBars.Count; i++)
            {
                var masterBar  = score.MasterBars[i];
                var masterBar2 = new MasterBar();
                MasterBar.CopyTo(masterBar, masterBar2);
                if (masterBar.TempoAutomation != null)
                {
                    masterBar2.TempoAutomation = new Automation();
                    Automation.CopyTo(masterBar.TempoAutomation, masterBar2.TempoAutomation);
                }
                if (masterBar.VolumeAutomation != null)
                {
                    masterBar2.VolumeAutomation = new Automation();
                    Automation.CopyTo(masterBar.VolumeAutomation, masterBar2.VolumeAutomation);
                }
                if (masterBar.Section != null)
                {
                    masterBar2.Section = new Section();
                    Section.CopyTo(masterBar.Section, masterBar2.Section);
                }
                score2.AddMasterBar(masterBar2);
            }

            #endregion

            #region Tracks

            for (int t = 0; t < score.Tracks.Count; t++)
            {
                var track  = score.Tracks[t];
                var track2 = new Track(track.Staves.Count);
                Track.CopyTo(track, track2);
                score2.AddTrack(track2);

                PlaybackInformation.CopyTo(track.PlaybackInfo, track2.PlaybackInfo);

                foreach (var key in track.Chords.Keys)
                {
                    var chord  = track.Chords[key];
                    var chord2 = new Chord();
                    Chord.CopyTo(chord, chord2);
                    track2.Chords[key] = chord2;
                }

                #region Staves

                for (var s = 0; s < track.Staves.Count; s++)
                {
                    var staff = track.Staves[s];
                    #region Bars

                    for (int b = 0; b < staff.Bars.Count; b++)
                    {
                        var bar  = staff.Bars[b];
                        var bar2 = new Bar();
                        Bar.CopyTo(bar, bar2);
                        track2.AddBarToStaff(s, bar2);

                        #region Voices

                        for (int v = 0; v < bar.Voices.Count; v++)
                        {
                            var voice  = bar.Voices[v];
                            var voice2 = new Voice();
                            Voice.CopyTo(voice, voice2);
                            bar2.AddVoice(voice2);

                            #region Beats

                            for (int bb = 0; bb < voice.Beats.Count; bb++)
                            {
                                var beat  = voice.Beats[bb];
                                var beat2 = new Beat();
                                Beat.CopyTo(beat, beat2);
                                voice2.AddBeat(beat2);

                                for (int a = 0; a < beat.Automations.Count; a++)
                                {
                                    var automation = new Automation();
                                    Automation.CopyTo(beat.Automations[a], automation);
                                    beat2.Automations.Add(automation);
                                }

                                for (int i = 0; i < beat.WhammyBarPoints.Count; i++)
                                {
                                    var point = new BendPoint();
                                    BendPoint.CopyTo(beat.WhammyBarPoints[i], point);
                                    beat2.WhammyBarPoints.Add(point);
                                }

                                #region Notes

                                for (int n = 0; n < beat.Notes.Count; n++)
                                {
                                    var note  = beat.Notes[n];
                                    var note2 = new Note();
                                    Note.CopyTo(note, note2);
                                    beat2.AddNote(note2);

                                    for (int i = 0; i < note.BendPoints.Count; i++)
                                    {
                                        var point = new BendPoint();
                                        BendPoint.CopyTo(note.BendPoints[i], point);
                                        note2.AddBendPoint(point);
                                    }
                                }

                                #endregion
                            }

                            #endregion
                        }

                        #endregion
                    }

                    #endregion
                }
                #endregion
            }

            #endregion

            score2.Finish();
            return(score2);
        }
Пример #11
0
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var comp = GeneticMIDI.Representation.Composition.LoadFromMIDI(@"C:\Users\1gn1t0r\Documents\git\GeneticMIDI\GeneticMIDI\bin\Debug\test\harry.mid");
            var mel = comp.Tracks[0].GetMainSequence() as GeneticMIDI.Representation.MelodySequence;
            Score score = new Score();
            Track t = new Track();

            var pc = t.IsPercussion;

            MasterBar mb = new MasterBar();
            score.AddMasterBar(mb);
            mb.KeySignature = 2;

            Bar b = new Bar();
            t.AddBar(b);
            score.AddTrack(t);

            Voice v = new Voice();
            b.AddVoice(v);

            int i = 0;

            int qn_per_bar = 4;

            int durs = 0;
            int avg_octave = mel.CalculateAverageOctave();
            int dist4 = 4 - avg_octave;
            foreach(var n in mel.Notes)
            {
                Beat be = new Beat();
                be.Index = i++;

                GeneticMIDI.Representation.Durations dur;
                int remainder;

                n.GetClosestLowerDurationAndRemainder(out dur, out remainder);

                int dots = n.GetNumberOfDots();

                durs += n.Duration;

            /*        if(durs >= qn_per_bar * (int)GeneticMIDI.Representation.Durations.qn)
                {
                    durs = 0;
                    b = new Bar();
                    t.AddBar(b);
                    v.Bar = b;
                    b.Finish();
                }*/

                switch (((GeneticMIDI.Representation.Durations)n.Duration))
                {
                    case GeneticMIDI.Representation.Durations.bn:
                        be.Duration = Model.Duration.Whole;
                        dots = 2;
                        break;
                    case GeneticMIDI.Representation.Durations.en:
                        be.Duration = Model.Duration.Eighth;
                        break;
                    case GeneticMIDI.Representation.Durations.hn:
                        be.Duration = Model.Duration.Half;
                        break;
                    case GeneticMIDI.Representation.Durations.qn:
                        be.Duration = Model.Duration.Quarter;
                        break;
                    case GeneticMIDI.Representation.Durations.sn:
                        be.Duration = Model.Duration.Sixteenth;
                        break;
                    case GeneticMIDI.Representation.Durations.tn:
                        be.Duration = Model.Duration.ThirtySecond;
                        break;
                    case GeneticMIDI.Representation.Durations.wn:
                        be.Duration = Model.Duration.Whole;
                        break;
                    default:
                        break;
                }
                be.Dots = dots;

                Note note = new Note();
                if (!n.IsRest())
                {
                    note.Tone = n.NotePitch;
                    note.Octave = n.Octave + dist4;
                    be.AddNote(note);
                    be.IsEmpty = false;

                }

                if(n.IsRest() && n.Duration < 2)
                {

                }
                else
                    v.AddBeat(be);

                be.RefreshNotes();

            }

            v.Bar = b;

            v.Finish();

            b.Finish();

            t.Finish();

            score.Finish();

            viewModel.Score = score;
            viewModel.CurrentTrackIndex = 0;
        }
Пример #12
0
 private void ParseTime(IXmlNode element, MasterBar masterBar)
 {
     element.IterateChildren(c =>
     {
         if (c.NodeType == XmlNodeType.Element)
         {
             switch (c.LocalName)
             {
                 case "beats":
                     masterBar.TimeSignatureNumerator = Std.ParseInt(Std.GetNodeValue(c));
                     break;
                 case "beats-type":
                     masterBar.TimeSignatureDenominator = Std.ParseInt(Std.GetNodeValue(c));
                     break;
             }
         }
     });
 }
Пример #13
0
 public int GetMasterBarStart(MasterBar bar)
 {
     if (!BarLookup.ContainsKey(bar.Index))
     {
         return 0;
     }
     return BarLookup[bar.Index].Start;
 }
Пример #14
0
        public Score JsObjectToScore(Score score)
        {
            var score2 = new Score();
            Score.CopyTo(score, score2);

            #region MasterBars

            for (var i = 0;i < score.MasterBars.Count; i++)
            {
                var masterBar = score.MasterBars[i];
                var masterBar2 = new MasterBar();
                MasterBar.CopyTo(masterBar, masterBar2);
                if (masterBar.TempoAutomation != null)
                {
                    masterBar2.TempoAutomation = new Automation();
                    Automation.CopyTo(masterBar.TempoAutomation, masterBar2.TempoAutomation);
                }
                if (masterBar.VolumeAutomation != null)
                {
                    masterBar2.VolumeAutomation = new Automation();
                    Automation.CopyTo(masterBar.VolumeAutomation, masterBar2.VolumeAutomation);
                }
                if (masterBar.Section != null)
                {
                    masterBar2.Section = new Section();
                    Section.CopyTo(masterBar.Section, masterBar2.Section);
                }
                score2.AddMasterBar(masterBar2);
            }

            #endregion

            #region Tracks

            for (int t = 0; t < score.Tracks.Count; t++)
            {
                var track = score.Tracks[t];
                var track2 = new Track();
                Track.CopyTo(track, track2);
                score2.AddTrack(track2);

                PlaybackInformation.CopyTo(track.PlaybackInfo, track2.PlaybackInfo);

                foreach (var key in track.Chords.Keys)
                {
                    var chord = track.Chords[key];
                    var chord2 = new Chord();
                    Chord.CopyTo(chord, chord2);
                    track2.Chords[key] = chord2;
                }

                #region Bars

                for (int b = 0; b < track.Bars.Count; b++)
                {
                    var bar = track.Bars[b];
                    var bar2 = new Bar();
                    Bar.CopyTo(bar, bar2);
                    track2.AddBar(bar2);

                    #region Voices

                    for (int v = 0; v < bar.Voices.Count; v++)
                    {
                        var voice = bar.Voices[v];
                        var voice2 = new Voice();
                        Voice.CopyTo(voice, voice2);
                        bar2.AddVoice(voice2);

                        #region Beats

                        for (int bb = 0; bb < voice.Beats.Count; bb++)
                        {
                            var beat = voice.Beats[bb];
                            var beat2 = new Beat();
                            Beat.CopyTo(beat, beat2);
                            voice2.AddBeat(beat2);

                            for (int a = 0; a < beat.Automations.Count; a++)
                            {
                                var automation = new Automation();
                                Automation.CopyTo(beat.Automations[a], automation);
                                beat2.Automations.Add(automation);
                            }
                            
                            for (int i = 0; i < beat.WhammyBarPoints.Count; i++)
                            {
                                var point = new BendPoint();
                                BendPoint.CopyTo(beat.WhammyBarPoints[i], point);
                                beat2.WhammyBarPoints.Add(point);
                            }
                            
                            #region Notes

                            for (int n = 0; n < beat.Notes.Count; n++)
                            {
                                var note = beat.Notes[n];
                                var note2 = new Note();
                                Note.CopyTo(note, note2);
                                beat2.AddNote(note2);

                                for (int i = 0; i < note.BendPoints.Count; i++)
                                {
                                    var point = new BendPoint();
                                    BendPoint.CopyTo(note.BendPoints[i], point);
                                    note2.AddBendPoint(point);
                                }
                            }

                            #endregion
                        }

                        #endregion
                    }

                    #endregion
                }
                
                #endregion
            }

            #endregion

            score2.Finish();
            return score2;
        }
        private static void AddMasterBarToScore(Score score, string sessionText, eBeatWrapper measureBeats)
        {
            var measureBeatsCount = measureBeats.MeasureSubBeats.Count +1;
            var masterBar = new MasterBar();

            if (measureBeatsCount == 2)
            {
                masterBar.TimeSignatureNumerator = 2;
                masterBar.TimeSignatureDenominator = 4;
            }
            else if (measureBeatsCount == 3)
            {
                masterBar.TimeSignatureNumerator = 3;
                masterBar.TimeSignatureDenominator = 4;
            }
            else if (measureBeatsCount == 6)
            {
                masterBar.TimeSignatureNumerator = 6;
                masterBar.TimeSignatureDenominator = 8;
            }
            else
            {
                masterBar.TimeSignatureNumerator = 4;
                masterBar.TimeSignatureDenominator = 4;

                if (measureBeatsCount != 4)
                    System.Diagnostics.Debug.WriteLine("Unknown timesignature (measureBeatsCount: {0}). Defaulting to 4/4.", measureBeatsCount);
            }

            masterBar.Section = new global::AlphaTab.Model.Section() { Text = sessionText };
            score.AddMasterBar(masterBar);
        }
Пример #16
0
        private void GenerateMasterBar(MasterBar masterBar, MasterBar previousMasterBar, int currentTick)
        {
            // time signature
            if (previousMasterBar == null ||
               previousMasterBar.TimeSignatureDenominator != masterBar.TimeSignatureDenominator ||
               previousMasterBar.TimeSignatureNumerator != masterBar.TimeSignatureNumerator)
            {
                _handler.AddTimeSignature(currentTick, masterBar.TimeSignatureNumerator, masterBar.TimeSignatureDenominator);
            }

            // tempo
            if (previousMasterBar == null)
            {
                _handler.AddTempo(currentTick, masterBar.Score.Tempo);
                _currentTempo = masterBar.Score.Tempo;
            }
            else if (masterBar.TempoAutomation != null)
            {
                _handler.AddTempo(currentTick, (int)masterBar.TempoAutomation.Value);
                _currentTempo = (int)(masterBar.TempoAutomation.Value);
            }

            // metronome
            if (GenerateMetronome)
            {
                var start = currentTick;
                var length = MidiUtils.ValueToTicks(masterBar.TimeSignatureDenominator);
                for (int i = 0; i < masterBar.TimeSignatureNumerator; i++)
                {
                    _handler.AddMetronome(start, length);
                    start += length;
                }
            }
        }
Пример #17
0
        /// <summary>
        /// Converts the given JavaScript object into a score object.
        /// </summary>
        /// <param name="jsObject">The javascript object created via <see cref="ScoreToJsObject"/></param>
        /// <param name="settings">The settings to use during conversion.</param>
        /// <returns>The converted score object.</returns>
        public static Score JsObjectToScore(object jsObject, Settings settings = null)
        {
            Score score  = jsObject.As <Score>();
            var   score2 = new Score();

            Score.CopyTo(score, score2);
            RenderStylesheet.CopyTo(score.Stylesheet, score2.Stylesheet);

            #region MasterBars

            for (var i = 0; i < score.MasterBars.Count; i++)
            {
                var masterBar  = score.MasterBars[i];
                var masterBar2 = new MasterBar();
                MasterBar.CopyTo(masterBar, masterBar2);
                if (masterBar.TempoAutomation != null)
                {
                    masterBar2.TempoAutomation = new Automation();
                    Automation.CopyTo(masterBar.TempoAutomation, masterBar2.TempoAutomation);
                }
                if (masterBar.Section != null)
                {
                    masterBar2.Section = new Section();
                    Section.CopyTo(masterBar.Section, masterBar2.Section);
                }

                foreach (var offset in masterBar.Fermata)
                {
                    var fermata  = masterBar.Fermata[offset];
                    var fermata2 = new Fermata();
                    Fermata.CopyTo(fermata, fermata2);
                    masterBar2.AddFermata(offset, fermata2);
                }


                score2.AddMasterBar(masterBar2);
            }

            #endregion

            #region Tracks

            for (int t = 0; t < score.Tracks.Count; t++)
            {
                var track  = score.Tracks[t];
                var track2 = new Track(track.Staves.Count);
                Track.CopyTo(track, track2);
                score2.AddTrack(track2);

                PlaybackInformation.CopyTo(track.PlaybackInfo, track2.PlaybackInfo);


                #region Staves

                for (var s = 0; s < track.Staves.Count; s++)
                {
                    var staff  = track.Staves[s];
                    var staff2 = track2.Staves[s];
                    Staff.CopyTo(staff, staff2);


                    foreach (var key in staff.Chords)
                    {
                        var chord  = staff.Chords[key];
                        var chord2 = new Chord();
                        Chord.CopyTo(chord, chord2);
                        staff2.Chords[key] = chord2;
                    }
                    #region Bars

                    for (int b = 0; b < staff.Bars.Count; b++)
                    {
                        var bar  = staff.Bars[b];
                        var bar2 = new Bar();
                        Bar.CopyTo(bar, bar2);
                        staff2.AddBar(bar2);

                        #region Voices

                        for (int v = 0; v < bar.Voices.Count; v++)
                        {
                            var voice  = bar.Voices[v];
                            var voice2 = new Voice();
                            Voice.CopyTo(voice, voice2);
                            bar2.AddVoice(voice2);

                            #region Beats

                            for (int bb = 0; bb < voice.Beats.Count; bb++)
                            {
                                var beat  = voice.Beats[bb];
                                var beat2 = new Beat();
                                Beat.CopyTo(beat, beat2);
                                voice2.AddBeat(beat2);

                                for (int a = 0; a < beat.Automations.Count; a++)
                                {
                                    var automation = new Automation();
                                    Automation.CopyTo(beat.Automations[a], automation);
                                    beat2.Automations.Add(automation);
                                }

                                for (int i = 0; i < beat.WhammyBarPoints.Count; i++)
                                {
                                    var point = new BendPoint();
                                    BendPoint.CopyTo(beat.WhammyBarPoints[i], point);
                                    beat2.AddWhammyBarPoint(point);
                                }

                                #region Notes

                                for (int n = 0; n < beat.Notes.Count; n++)
                                {
                                    var note  = beat.Notes[n];
                                    var note2 = new Note();
                                    Note.CopyTo(note, note2);
                                    beat2.AddNote(note2);

                                    for (int i = 0; i < note.BendPoints.Count; i++)
                                    {
                                        var point = new BendPoint();
                                        BendPoint.CopyTo(note.BendPoints[i], point);
                                        note2.AddBendPoint(point);
                                    }
                                }

                                #endregion
                            }

                            #endregion
                        }

                        #endregion
                    }

                    #endregion
                }
                #endregion
            }

            #endregion

            score2.Finish(settings);
            return(score2);
        }
Пример #18
0
 private void ParseDirection(IXmlNode element, MasterBar masterBar)
 {
     element.IterateChildren(c =>
     {
         if (c.NodeType == XmlNodeType.Element)
         {
             switch (c.LocalName)
             {
                 case "sound":
                     var tempoAutomation = new Automation();
                     tempoAutomation.IsLinear = true;
                     tempoAutomation.Type = AutomationType.Tempo;
                     tempoAutomation.Value = Std.ParseInt(c.GetAttribute("tempo"));
                     masterBar.TempoAutomation = tempoAutomation;
                     break;
             }
         }
     });
 }
Пример #19
0
        public void ReadMasterBar()
        {
            MasterBar previousMasterBar = default(MasterBar);
            if (_score.MasterBars.Count > 0)
            {
                previousMasterBar = _score.MasterBars[_score.MasterBars.Count - 1];
            }

            MasterBar newMasterBar = new MasterBar();
            int flags = Data.ReadByte();

            // time signature
            if ((flags & 0x01) != 0)
            {
                newMasterBar.TimeSignatureNumerator = Data.ReadByte();
            }
            else if (previousMasterBar != null)
            {
                newMasterBar.TimeSignatureNumerator = previousMasterBar.TimeSignatureNumerator;
            }
            if ((flags & 0x02) != 0)
            {
                newMasterBar.TimeSignatureDenominator = Data.ReadByte();
            }
            else if (previousMasterBar != null)
            {
                newMasterBar.TimeSignatureDenominator = previousMasterBar.TimeSignatureDenominator;
            }

            // repeatings
            newMasterBar.IsRepeatStart = (flags & 0x04) != 0;
            if ((flags & 0x08) != 0)
            {
                newMasterBar.RepeatCount = Data.ReadByte() + (_versionNumber >= 500 ? 0 : 1);
            }

            // alternate endings
            if ((flags & 0x10) != 0)
            {
                if (_versionNumber < 500)
                {
                    MasterBar currentMasterBar = previousMasterBar;
                    // get the already existing alternatives to ignore them
                    int existentAlternatives = 0;
                    while (currentMasterBar != null)
                    {
                        // found another repeat ending?
                        if (currentMasterBar.IsRepeatEnd && currentMasterBar != previousMasterBar)
                            break;
                        // found the opening?
                        if (currentMasterBar.IsRepeatStart)
                            break;

                        existentAlternatives |= currentMasterBar.AlternateEndings;

                        currentMasterBar = currentMasterBar.PreviousMasterBar;
                    }

                    // now calculate the alternative for this bar
                    var repeatAlternative = 0;
                    var repeatMask = Data.ReadByte();
                    for (var i = 0; i < 8; i++)
                    {
                        // only add the repeating if it is not existing
                        var repeating = (1 << i);
                        if (repeatMask > i && (existentAlternatives & repeating) == 0)
                        {
                            repeatAlternative |= repeating;
                        }
                    }

                    newMasterBar.AlternateEndings = (byte)repeatAlternative;
                }
                else
                {
                    newMasterBar.AlternateEndings = (byte)Data.ReadByte();
                }
            }

            // marker
            if ((flags & 0x20) != 0)
            {
                Section section = new Section();
                section.Text = ReadStringIntByte();
                section.Marker = "";
                ReadColor();
                newMasterBar.Section = section;
            }

            // keysignature
            if ((flags & 0x40) != 0)
            {
                newMasterBar.KeySignature = Data.ReadSignedByte();
                newMasterBar.KeySignatureType = (KeySignatureType)Data.ReadByte();
            }
            else if (previousMasterBar != null)
            {
                newMasterBar.KeySignature = previousMasterBar.KeySignature;
                newMasterBar.KeySignatureType = previousMasterBar.KeySignatureType;
            }

            if ((_versionNumber >= 500) && ((flags & 0x03) != 0))
            {
                Data.Skip(4);
            }

            // better alternate ending mask in GP5
            if ((_versionNumber >= 500) && ((flags & 0x10) == 0))
            {
                newMasterBar.AlternateEndings = (byte)Data.ReadByte();
            }

            // tripletfeel
            if (_versionNumber >= 500)
            {
                var tripletFeel = Data.ReadByte();
                switch (tripletFeel)
                {
                    case 1:
                        newMasterBar.TripletFeel = TripletFeel.Triplet8th;
                        break;
                    case 2:
                        newMasterBar.TripletFeel = TripletFeel.Triplet16th;
                        break;
                }

                Data.ReadByte();
            }
            else
            {
                newMasterBar.TripletFeel = _globalTripletFeel;
            }

            newMasterBar.IsDoubleBar = (flags & 0x80) != 0;
            _score.AddMasterBar(newMasterBar);
        }
Пример #20
0
        private void ParseKey(IXmlNode element, MasterBar masterBar)
        {
            int fifths = int.MinValue;
            int keyStep = int.MinValue;
            int keyAlter = int.MinValue;

            element.IterateChildren(c =>
            {
                if (c.NodeType == XmlNodeType.Element)
                {
                    switch (c.LocalName)
                    {
                        case "fifths":
                            fifths = Std.ParseInt(Std.GetNodeValue(c));
                            break;
                        case "key-step":
                            keyStep = Std.ParseInt(Std.GetNodeValue(c));
                            break;
                        case "key-alter":
                            keyAlter = Std.ParseInt(Std.GetNodeValue(c));
                            break;
                    }
                }
            });

            if (fifths != int.MinValue)
            {
                // TODO: check if this is conrrect
                masterBar.KeySignature = fifths;
            }
            else
            {
                // TODO: map keyStep/keyAlter to internal keysignature
            }
        }
Пример #21
0
        public Score ScoreToJsObject(Score score)
        {
            Score score2 = Std.NewObject();

            Score.CopyTo(score, score2);
            score2.MasterBars = new FastList <MasterBar>();
            score2.Tracks     = new FastList <Track>();

            #region MasterBars

            for (var i = 0; i < score.MasterBars.Count; i++)
            {
                MasterBar masterBar  = score.MasterBars[i];
                MasterBar masterBar2 = Std.NewObject();
                MasterBar.CopyTo(masterBar, masterBar2);
                if (masterBar.TempoAutomation != null)
                {
                    masterBar2.TempoAutomation = Std.NewObject();
                    Automation.CopyTo(masterBar.TempoAutomation, masterBar2.TempoAutomation);
                }
                if (masterBar.VolumeAutomation != null)
                {
                    masterBar2.VolumeAutomation = Std.NewObject();
                    Automation.CopyTo(masterBar.VolumeAutomation, masterBar2.VolumeAutomation);
                }
                if (masterBar.Section != null)
                {
                    masterBar2.Section = Std.NewObject();
                    Section.CopyTo(masterBar.Section, masterBar2.Section);
                }
                score2.MasterBars.Add(masterBar2);
            }

            #endregion

            #region Tracks

            for (int t = 0; t < score.Tracks.Count; t++)
            {
                var   track  = score.Tracks[t];
                Track track2 = Std.NewObject();
                track2.Color = Std.NewObject();
                Track.CopyTo(track, track2);

                track2.PlaybackInfo = Std.NewObject();
                PlaybackInformation.CopyTo(track.PlaybackInfo, track2.PlaybackInfo);

                track2.Chords = new FastDictionary <string, Chord>();
                foreach (var key in track.Chords.Keys)
                {
                    var   chord  = track.Chords[key];
                    Chord chord2 = Std.NewObject();
                    Chord.CopyTo(chord, chord2);
                    track2.Chords[key] = chord;
                }

                #region Staves
                track2.Staves = new FastList <Staff>();

                for (int s = 0; s < track.Staves.Count; s++)
                {
                    var   staff  = track.Staves[s];
                    Staff staff2 = Std.NewObject();

                    #region Bars

                    staff2.Bars = new FastList <Bar>();
                    for (int b = 0; b < staff.Bars.Count; b++)
                    {
                        var bar  = staff.Bars[b];
                        Bar bar2 = Std.NewObject();
                        Bar.CopyTo(bar, bar2);

                        #region Voices

                        bar2.Voices = new FastList <Voice>();
                        for (int v = 0; v < bar.Voices.Count; v++)
                        {
                            var   voice  = bar.Voices[v];
                            Voice voice2 = Std.NewObject();
                            Voice.CopyTo(voice, voice2);

                            #region Beats

                            voice2.Beats = new FastList <Beat>();
                            for (int bb = 0; bb < voice.Beats.Count; bb++)
                            {
                                var  beat  = voice.Beats[bb];
                                Beat beat2 = Std.NewObject();
                                Beat.CopyTo(beat, beat2);

                                beat2.Automations = new FastList <Automation>();
                                for (int a = 0; a < beat.Automations.Count; a++)
                                {
                                    Automation automation = Std.NewObject();
                                    Automation.CopyTo(beat.Automations[a], automation);
                                    beat2.Automations.Add(automation);
                                }

                                beat2.WhammyBarPoints = new FastList <BendPoint>();
                                for (int i = 0; i < beat.WhammyBarPoints.Count; i++)
                                {
                                    BendPoint point = Std.NewObject();
                                    BendPoint.CopyTo(beat.WhammyBarPoints[i], point);
                                    beat2.WhammyBarPoints.Add(point);
                                }

                                #region Notes

                                beat2.Notes = new FastList <Note>();
                                for (int n = 0; n < beat.Notes.Count; n++)
                                {
                                    var  note  = beat.Notes[n];
                                    Note note2 = Std.NewObject();
                                    Note.CopyTo(note, note2);

                                    note2.BendPoints = new FastList <BendPoint>();
                                    for (int i = 0; i < note.BendPoints.Count; i++)
                                    {
                                        BendPoint point = Std.NewObject();
                                        BendPoint.CopyTo(note.BendPoints[i], point);
                                        note2.BendPoints.Add(point);
                                    }

                                    beat2.Notes.Add(note2);
                                }

                                #endregion

                                voice2.Beats.Add(beat2);
                            }

                            #endregion

                            bar2.Voices.Add(voice2);
                        }

                        #endregion

                        staff2.Bars.Add(bar2);
                    }

                    #endregion
                    track2.Staves.Add(staff);
                }

                #endregion

                score2.Tracks.Add(track2);
            }

            #endregion

            return(score2);
        }
Пример #22
0
        private void Bar()
        {
            var master = new MasterBar();
            _score.AddMasterBar(master);

            var bar = new Bar();
            _track.AddBar(bar);

            if (master.Index > 0)
            {
                master.KeySignature = master.PreviousMasterBar.KeySignature;
                master.TimeSignatureDenominator = master.PreviousMasterBar.TimeSignatureDenominator;
                master.TimeSignatureNumerator = master.PreviousMasterBar.TimeSignatureNumerator;
                bar.Clef = bar.PreviousBar.Clef;
            }
            BarMeta(bar);

            var voice = new Voice();
            bar.AddVoice(voice);

            while (_sy != AlphaTexSymbols.Pipe && _sy != AlphaTexSymbols.Eof)
            {
                Beat(voice);
            }

            if (voice.Beats.Count == 0)
            {
                var emptyBeat = new Beat();
                emptyBeat.IsEmpty = true;
                voice.AddBeat(emptyBeat);
            }
        }
Пример #23
0
        public void AddMasterBar(MasterBar bar)
        {
            bar.Score = this;
            bar.Index = MasterBars.Count;
            if (MasterBars.Count != 0)
            {
                bar.PreviousMasterBar = MasterBars[MasterBars.Count - 1];
                bar.PreviousMasterBar.NextMasterBar = bar;
                bar.Start = bar.PreviousMasterBar.Start + bar.PreviousMasterBar.CalculateDuration();
            }

            // if the group is closed only the next upcoming header can
            // reopen the group in case of a repeat alternative, so we 
            // remove the current group 
            if (bar.IsRepeatStart || (_currentRepeatGroup.IsClosed && bar.AlternateEndings <= 0))
            {
                _currentRepeatGroup = new RepeatGroup();
            }
            _currentRepeatGroup.AddMasterBar(bar);
            MasterBars.Add(bar);
        }