private void ParsePitch(IXmlNode element, Track track, Beat beat, Note note) { string step = null; int semitones = 0; int octave = 0; element.IterateChildren(c => { if (c.NodeType == XmlNodeType.Element) { switch (c.LocalName) { case "step": step = Std.GetNodeValue(c); break; case "alter": semitones = Std.ParseInt(Std.GetNodeValue(c)); break; case "octave": // 0-9, 4 for middle C octave = Std.ParseInt(Std.GetNodeValue(c)); break; } } }); var fullNoteName = step + octave; var fullNoteValue = TuningParser.GetTuningForText(fullNoteName) + semitones; ApplyNoteStringFrets(track, beat, note, fullNoteValue); }
private void ParseStaffTuning(IXmlNode element, Track track) { var line = Std.ParseInt(element.GetAttribute("line")); string tuningStep = "C"; string tuningOctave = ""; int tuningAlter = 0; element.IterateChildren(c => { if (c.NodeType == XmlNodeType.Element) { switch (c.LocalName) { case "tuning-step": tuningStep = Std.GetNodeValue(c); break; case "tuning-alter": tuningAlter = Std.ParseInt(Std.GetNodeValue(c)); break; case "tuning-octave": tuningOctave = Std.GetNodeValue(c); break; } } }); track.Tuning[track.Tuning.Length - line] = TuningParser.GetTuningForText(tuningStep + tuningOctave) + tuningAlter; }
private void ParseUnpitched(IXmlNode element, Note note) { string step = null; int semitones = 0; int octave = 0; element.IterateChildren(c => { if (c.NodeType == XmlNodeType.Element) { switch (c.LocalName) { case "display-step": step = Std.GetNodeValue(c); break; case "display-alter": semitones = Std.ParseInt(Std.GetNodeValue(c)); break; case "display-octave": // 0-9, 4 for middle C octave = Std.ParseInt(Std.GetNodeValue(c)); break; } } }); var value = octave * 12 + TuningParser.GetToneForText(step) + semitones; note.Octave = (value / 12); note.Tone = value - (note.Octave * 12); }
/// <summary> /// Converts a string into the associated tuning. /// </summary> /// <param name="str">the tuning string</param> /// <returns>the tuning value.</returns> private int ParseTuning(String str) { var tuning = TuningParser.GetTuningForText(str); if (tuning < 0) { Error("tuning-value", AlphaTexSymbols.String, false); } return(tuning); }
public void TestStandard() { var standard = Tuning.GetDefaultTuningFor(6); var tuningText = new[] { "E4", "B3", "G3", "D3", "A2", "E2" }; var tuning = new int[tuningText.Length]; var tuningText2 = new string[tuningText.Length]; for (int i = 0; i < tuningText.Length; i++) { tuning[i] = TuningParser.GetTuningForText(tuningText[i]); tuningText2[i] = Tuning.GetTextForTuning(tuning[i], true); } Assert.AreEqual(string.Join(",", standard.Tunings), string.Join(",", tuning)); Assert.AreEqual(string.Join(",", tuningText), string.Join(",", tuningText2)); }
private void ParsePitch(IXmlNode element, Note note) { string step = null; float semitones = 0; int octave = 0; element.IterateChildren(c => { if (c.NodeType == XmlNodeType.Element) { switch (c.LocalName) { case "step": step = Std.GetNodeValue(c); break; case "alter": semitones = Std.ParseFloat(Std.GetNodeValue(c)); if (float.IsNaN(semitones)) { semitones = 0; } break; case "octave": // 0-9, 4 for middle C octave = Std.ParseInt(Std.GetNodeValue(c)); break; } } }); var value = octave * 12 + TuningParser.GetToneForText(step) + (int)semitones; note.Octave = (value / 12); note.Tone = value - (note.Octave * 12); }
/// <summary> /// Reads the next terminal symbol. /// </summary> private void NewSy() { _sy = AlphaTexSymbols.No; do { if (_ch == Eof) { _sy = AlphaTexSymbols.Eof; } else if (Std.IsWhiteSpace(_ch)) { // skip whitespaces NextChar(); } else if (_ch == 0x2F /* / */) { NextChar(); if (_ch == 0x2F /* / */) { // single line comment while (_ch != 0x0D /* \r */ && _ch != 0x0A /* \n */ && _ch != Eof) { NextChar(); } } else if (_ch == 0x2A /* * */) { // multiline comment while (_ch != Eof) { if (_ch == 0x2A /* * */) // possible end { NextChar(); if (_ch == 0x2F /* / */) { NextChar(); break; } } else { NextChar(); } } } else { Error("symbol", AlphaTexSymbols.String, false); } } else if (_ch == 0x22 /* " */ || _ch == 0x27 /* ' */) { var startChar = _ch; NextChar(); var s = new StringBuilder(); _sy = AlphaTexSymbols.String; while (_ch != startChar && _ch != Eof) { s.AppendChar(_ch); NextChar(); } _syData = s.ToString(); NextChar(); } else if (_ch == 0x2D /* - */) // negative number { // is number? if (_allowNegatives && IsDigit(_ch)) { var number = ReadNumber(); _sy = AlphaTexSymbols.Number; _syData = number; } else { _sy = AlphaTexSymbols.String; _syData = ReadName(); } } else if (_ch == 0x2E /* . */) { _sy = AlphaTexSymbols.Dot; NextChar(); } else if (_ch == 0x3A /* : */) { _sy = AlphaTexSymbols.DoubleDot; NextChar(); } else if (_ch == 0x28 /* ( */) { _sy = AlphaTexSymbols.LParensis; NextChar(); } else if (_ch == 0x5C /* \ */) { NextChar(); var name = ReadName(); _sy = AlphaTexSymbols.MetaCommand; _syData = name; } else if (_ch == 0x29 /* ) */) { _sy = AlphaTexSymbols.RParensis; NextChar(); } else if (_ch == 0x7B /* { */) { _sy = AlphaTexSymbols.LBrace; NextChar(); } else if (_ch == 0x7D /* } */) { _sy = AlphaTexSymbols.RBrace; NextChar(); } else if (_ch == 0x7C /* | */) { _sy = AlphaTexSymbols.Pipe; NextChar(); } else if (_ch == 0x2A /* * */) { _sy = AlphaTexSymbols.Multiply; NextChar(); } else if (IsDigit(_ch)) { var number = ReadNumber(); _sy = AlphaTexSymbols.Number; _syData = number; } else if (IsLetter(_ch)) { var name = ReadName(); var tuning = TuningParser.Parse(name); if (tuning != null) { _sy = AlphaTexSymbols.Tuning; _syData = tuning; } else { _sy = AlphaTexSymbols.String; _syData = name; } } else { Error("symbol", AlphaTexSymbols.String, false); } } while (_sy == AlphaTexSymbols.No); }