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); } }
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; }
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); }
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); } }
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; } } }); }
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]; }
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); }
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(); */ }
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); }
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; }
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; } } }); }
public int GetMasterBarStart(MasterBar bar) { if (!BarLookup.ContainsKey(bar.Index)) { return 0; } return BarLookup[bar.Index].Start; }
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); }
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; } } }
/// <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); }
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; } } }); }
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); }
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 } }
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); }
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); } }