private SongNote GetNote(ZpeChord chord, ZpeChord nextChord)
        {
            SongNote note  = new SongNote();
            ZpeNote  zNote = chord.Notes[0];

            note.Fret     = (sbyte)zNote.Fret;
            note.String   = (byte)zNote.StringNo;
            note.Bend     = 0;
            note.HammerOn = (zNote.IsTapNote || chord.IsHammerOn) ? (byte)1 : (byte)0;
            note.Harmonic = 0;
            note.Hopo     = note.HammerOn;
            note.Ignore   = 0;
            note.PalmMute = (zNote.IsXNote || chord.IsMute) ? (byte)1 : (byte)0;
            note.Sustain  = (chord.EndTime - chord.StartTime > .5) ? chord.EndTime - chord.StartTime : 0;
            note.Time     = (float)chord.StartTime;
            note.Tremolo  = 0;
            if (chord.IsSlide && nextChord != null)
            {
                note.SlideTo  = (sbyte)Math.Max(nextChord.Notes[0].Fret, 1);
                note.Sustain  = chord.EndTime - chord.StartTime;
                note.HammerOn = note.Hopo = note.PalmMute = 0;
            }
            else
            {
                note.SlideTo = -1;
            }
            return(note);
        }
        private static SongNote2014 GetNote(ZpeChord chord, ZpeChord nextChord, int zNoteIndex = 0)
        {
            SongNote2014 note  = new SongNote2014();
            ZpeNote      zNote = chord.Notes[zNoteIndex];

            note.Fret           = (sbyte)zNote.Fret;
            note.String         = (byte)zNote.StringNo;
            note.Time           = (float)chord.StartTime;
            note.Accent         = 0;
            note.Bend           = 0;
            note.HammerOn       = (zNote.IsTapNote || chord.IsHammerOn) ? (byte)1 : (byte)0;
            note.Harmonic       = 0;
            note.HarmonicPinch  = 0;
            note.Hopo           = note.HammerOn;
            note.Ignore         = 0;
            note.LinkNext       = 0;
            note.LeftHand       = -1;
            note.Mute           = 0;
            note.PalmMute       = (zNote.IsXNote || chord.IsMute) ? (byte)1 : (byte)0;
            note.Pluck          = -1;
            note.PullOff        = 0;
            note.RightHand      = -1;
            note.Slap           = -1;
            note.SlideUnpitchTo = -1;
            note.Sustain        = (chord.EndTime - chord.StartTime > .5) ? chord.EndTime - chord.StartTime : 0;
            note.Tap            = 0;
            note.Tremolo        = 0;
            note.Vibrato        = 0;

            if (chord.IsSlide && nextChord != null)
            {
                note.SlideTo  = (sbyte)Math.Max(nextChord.Notes[0].Fret, 1);
                note.Sustain  = chord.EndTime - chord.StartTime;
                note.HammerOn = note.Hopo = note.PalmMute = 0;
            }
            else
            {
                note.SlideTo = -1;
            }

            //// no advanced techniques for now
            //note.SlideTo = -1;
            //note.Sustain = 0;
            //note.PalmMute = 0;
            //note.HammerOn = 0;
            //note.Hopo = 0;

            return(note);
        }