private void ParseMeasureAttributes(XElement msElement, Measure ms) { var attributeElement = msElement.Element("attributes"); var keyAttr = attributeElement.Element("key"); if (keyAttr != null) { ms.KeySignature = ParseKeyAttribute(keyAttr); ms.ShowKey = true; } var clefAttr = attributeElement.Element("clef"); if (clefAttr != null) { var sign = clefAttr.Element("sign")?.Value; var line = clefAttr.Element("line")?.Value; int.TryParse(line, out var lineNum); ms.Clef = Clefs.GetClef(lineNum, sign[0]); ms.ShowClef = true; } var timeAttr = attributeElement.Element("time"); if (timeAttr != null) { ms.ShowTime = timeAttr.Attribute("print-object")?.Value == "yes"; int.TryParse(timeAttr.Element("beats").Value, out var top); int.TryParse(timeAttr.Element("beat-type").Value, out var bottom); ms.TimeSignature = new TimeSignature(top, bottom); } }
public void AddClef(Clefs clef) { if (!_lastIsKeyword) { _output += $"{{\n{new string(' ', _scopes * SPACES_IN_TAB)}"; _scopes++; } _output += $"\\clef {clef.ToString().ToLower()}\n{new string(' ', _scopes * SPACES_IN_TAB)}"; _lastIsKeyword = true; }
private Measure ParseMeasure(string input) { try { var ms = new Measure(); if (input.Contains(":")) { var options = input.Split(':'); foreach (var opt in options) { var info = opt.Trim(); if (info.StartsWith("Time-")) { ms.TimeSignature = TimeSignatures.GetTime(info.Substring(5)); } else if (info.StartsWith("Key-")) { ms.KeySignature = KeySignatures.GetKey(info.Substring(4)); } else if (info.StartsWith("Clef-")) { ms.Clef = Clefs.GetClef(info.Substring(5)); } } input = options.Last(); } var units = input.Split(','); foreach (var unit in units) { var p = unit.Trim().ToUpperInvariant(); if ((!p.EndsWith("QUARTER") && p.EndsWith("R")) || p.EndsWith("REST")) { ms.Pattern.Add(new Rest(p)); } else { ms.Pattern.Add(new Note(p)); } } return(ms); } catch (Exception ex) { throw new UnrecognizedPatternException($"Unrecognized Measure: {input}", ex); } }
public Score(Clefs clef = Clefs.Treble) { SymbolGroups = new List <SymbolGroup>(); Clef = clef; }