private void parseTones(Song2014 xml, Sng2014File sng)
        {
            sng.Tones = new ToneSection();
            if (xml.Tones != null)
                sng.Tones.Count = xml.Tones.Length;
            else
                sng.Tones.Count = 0;

            sng.Tones.Tones = new Tone[sng.Tones.Count];
            for (int i = 0; i < sng.Tones.Count; i++)
            {
                var tn = xml.Tones[i];
                var t = new Tone();
                t.Time = tn.Time;

                try
                {
                    // fix for undefined tone name (tone name should be shorter)
                    if (xml.ToneBase.ToLower().Contains(tn.Name.ToLower()))
                        t.ToneId = 0;
                    if (xml.ToneA.ToLower().Contains(tn.Name.ToLower()))
                        t.ToneId = 0;
                    else if (xml.ToneB.ToLower().Contains(tn.Name.ToLower()))
                        t.ToneId = 1;
                    else if (xml.ToneC.ToLower().Contains(tn.Name.ToLower()))
                        t.ToneId = 2;
                    else if (xml.ToneD.ToLower().Contains(tn.Name.ToLower()))
                        t.ToneId = 3;
                    else
                        throw new InvalidDataException("Undefined tone name: " + tn.Name);

                    sng.Tones.Tones[i] = t;
                }
                catch (Exception)
                {
                    throw new InvalidDataException(@"There is tone name error in XML Arrangement: " + xml.Arrangement + "  " + tn.Name + " is not properly defined." + "Use EOF to re-author custom tones or Notepad to attempt manual repair." );
                }
            }
        }
        private void parseTones(Song2014 xml, Sng2014File sng)
        {
            sng.Tones = new ToneSection();
            if (xml.Tones != null)
                sng.Tones.Count = xml.Tones.Length;
            else
                sng.Tones.Count = 0;

            sng.Tones.Tones = new Tone[sng.Tones.Count];
            for (int i = 0; i < sng.Tones.Count; i++) {
                var tn = xml.Tones[i];
                var t = new Tone();
                t.Time = tn.Time;
                    if (tn.Name == xml.ToneA)
                        t.ToneId = 0;
                    else if (tn.Name == xml.ToneB)
                        t.ToneId = 1;
                    else if (tn.Name == xml.ToneC)
                        t.ToneId = 2;
                    else if (tn.Name == xml.ToneD)
                        t.ToneId = 3;
                    else
                        throw new InvalidDataException("Undefined tone name: " + tn.Name);
                sng.Tones.Tones[i] = t;
            };
        }
        private void parseTones(Song2014 xml, Sng2014File sng)
        {
            //even if no tone changes, write section size (of 4 bytes)
            sng.Tones = new ToneSection();
            sng.Tones.Count = xml.Tones == null ? 0 : xml.Tones.Length;
            sng.Tones.Tones = new Tone[sng.Tones.Count];
            for (int i = 0; i < sng.Tones.Count; i++)
            {
                var tn = xml.Tones[i];
                var t = new Tone { Time = tn.Time };

                try
                {
                    if (String.IsNullOrEmpty(xml.ToneBase))
                        throw new InvalidDataException("ToneBase must be defined.");

                    // fix for undefined tone name (tone name should be shorter)
                    if (xml.ToneBase.ToLower() == tn.Name.ToLower())
                        t.ToneId = 0;

                    if (xml.ToneA.ToLower() == tn.Name.ToLower())
                        t.ToneId = 0;
                    else if (xml.ToneB.ToLower() == tn.Name.ToLower())
                        t.ToneId = 1;
                    else if (xml.ToneC.ToLower() == tn.Name.ToLower())
                        t.ToneId = 2;
                    else if (xml.ToneD.ToLower() == tn.Name.ToLower())
                        t.ToneId = 3;

                    sng.Tones.Tones[i] = t;
                }
                catch (Exception)
                {
                    throw new InvalidDataException("There is tone name error in XML Arrangement: " + xml.Arrangement + "  " + tn.Name + " is not properly defined." + Environment.NewLine +
                        "Use EOF to re-author custom tones or Notepad to attempt manual repair.");
                }
            }

            // TODO: confirm that tonebase is set to one of the multi tones in case user didn't do it in EOF
        }
 public void read(EndianBinaryReader r)
 {
     Count = r.ReadInt32();
     Tones = new Tone[Count]; for (int i = 0; i < Count; i++) { var obj = new Tone(); obj.read(r); Tones[i] = obj; }
 }
 public void read(BinaryReader r)
 {
     this.Count = r.ReadInt32();
     this.Tones = new Tone[this.Count]; for (int i=0; i<this.Count; i++) { Tone obj = new Tone(); obj.read(r); this.Tones[i] = obj; }
 }