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); }