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