Example #1
0
        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);
        }
Example #2
0
        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;
        }
Example #3
0
        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);
        }
Example #4
0
        /// <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);
        }
Example #5
0
        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));
        }
Example #6
0
        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);
        }
Example #7
0
 /// <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);
 }