public void ReadChord(Beat beat)
{
var chord = new Chord();
var chordId = Std.NewGuid();
if (_versionNumber >= 500)
{
Data.Skip(17);
chord.Name = ReadStringByteLength(21);
Data.Skip(4);
chord.FirstFret = ReadInt32();
for (int i = 0; i < 7; i++)
{
var fret = ReadInt32();
if (i < chord.Strings.Count)
{
chord.Strings.Add(fret);
}
}
Data.Skip(32);
}
else
{
if (Data.ReadByte() != 0) // mode1?
{
// gp4
if (_versionNumber >= 400)
{
// Sharp (1)
// Unused (3)
// Root (1)
// Major/Minor (1)
// Nin,Eleven or Thirteen (1)
// Bass (4)
// Diminished/Augmented (4)
// Add (1)
Data.Skip(16);
chord.Name = (ReadStringByteLength(21));
// Unused (2)
// Fifth (1)
// Ninth (1)
// Eleventh (1)
Data.Skip(4);
chord.FirstFret = (ReadInt32());
for (int i = 0; i < 7; i++)
{
var fret = ReadInt32();
if (i < chord.Strings.Count)
{
chord.Strings.Add(fret);
}
}
// number of barres (1)
// Fret of the barre (5)
// Barree end (5)
// Omission1,3,5,7,9,11,13 (7)
// Unused (1)
// Fingering (7)
// Show Diagram Fingering (1)
// ??
Data.Skip(32);
}
else
{
// unknown
Data.Skip(25);
chord.Name = ReadStringByteLength(34);
chord.FirstFret = ReadInt32();
for (int i = 0; i < 6; i++)
{
var fret = ReadInt32();
chord.Strings.Add(fret);
}
// unknown
Data.Skip(36);
}
}
else
{
int strings = _versionNumber >= 406 ? 7 : 6;
chord.Name = ReadStringIntByte();
chord.FirstFret = ReadInt32();
if (chord.FirstFret > 0)
{
for (int i = 0; i < strings; i++)
{
var fret = ReadInt32();
if (i < chord.Strings.Count)
{
chord.Strings.Add(fret);
}
}
}
}
}
if (!string.IsNullOrEmpty(chord.Name))
{
beat.ChordId = chordId;
beat.Voice.Bar.Staff.Track.Chords[beat.ChordId] = chord;
}
}