Example #1
0
        public void ReadGrace(Voice voice, Note note)
        {
            var graceBeat = new Beat();
            var graceNote = new Note();

            graceNote.String   = note.String;
            graceNote.Fret     = _data.ReadSignedByte();
            graceBeat.Duration = Duration.ThirtySecond;
            graceBeat.Dynamic  = ToDynamicValue(_data.ReadSignedByte());
            var transition = _data.ReadSignedByte();

            switch (transition)
            {
            case 0:     // none
                break;

            case 1:
                graceNote.SlideType   = SlideType.Legato;
                graceNote.SlideTarget = note;
                break;

            case 2:     // bend
                break;

            case 3:     // hammer
                graceNote.IsHammerPullOrigin = true;
                break;
            }
            graceNote.Dynamic = graceBeat.Dynamic;
            _data.Skip(1); // duration

            if (_versionNumber < 500)
            {
                graceBeat.GraceType = GraceType.BeforeBeat;
            }
            else
            {
                var flags = _data.ReadByte();
                graceNote.IsDead    = (flags & 0x01) != 0;
                graceBeat.GraceType = (flags & 0x02) != 0 ? GraceType.OnBeat : GraceType.BeforeBeat;
            }

            graceBeat.AddNote(graceNote);
            voice.AddGraceBeat(graceBeat);
        }