GUITAR PRO FORMAT (from analyzing a GP 5.10 file): FILE VERSION HEADER (31 bytes): 1 byte: Version string length [varies]: Version string [varies]: Padding (pad version string to 30 bytes) SONG ATTRIBUTES HEADER: 4 bytes: Title field length (including string length byte that follows this value) 1 byte: Title string length [varies]: Title string 4 bytes: Subtitle field length (including string length byte that follows this value) 1 byte: Subtitle string length [varies]: Subtitle string 4 bytes: Artist field length (including string length byte that follows this value) 1 byte: Artist string length [varies]: Artist string 4 bytes: Album field length (including string length byte that follows this value) 1 byte: Album string length [varies]: Album string !WORDS (LYRICIST) STRING (only if the major file version is >= 5): { [4 bytes]: Words field length (including string length byte that follows this value) [1 byte]: Words string length [varies]: Words string } 4 bytes: Music (composer) field length (including string length byte that follows this value) 1 byte: Music string length [varies]: Music string 4 bytes: Copyright field length (including string length byte that follows this value) 1 byte: Copyright string length [varies]: Copyright string 4 bytes: Tab (transcriber) field length (including string length byte that follows this value) 1 byte: Tab string length [varies]: Tab string 4 bytes: Instructions field length (including string length byte that follows this value) 1 byte: Instructions string length [varies]: Instructions string 4 bytes: Number of notice entries NOTICE CHUNK, for each notice entry: { 4 bytes: Notice field length 1 byte: Notice string length [varies]: Notice string } ...(variably repeated data)... !Shuffle rhythm feel (only if the major file version is <= 4): [1 byte]: Shuffle rhythm feel !LYRICS DATA (only if the major file version is >= 4): { 4 bytes: Associated track for the lyrics LYRICS DATA REPEATED 5 TIMES: (In order for lyric lines 1 through 5) { [4 bytes]: Start from bar # [4 bytes]: Lyric string length [varies]: Lyric string } ...(repeated data)... } !VOLUME/EQUALIZATION SETTINGS (only if the major file version is > 5) { [4 bytes]: Master volume (value from 0 - 200, default is 100) [4 bytes]: Unknown data/padding [1 byte]: Number of increments of .1dB the volume for the 32Hz band is lowered [1 byte]: Number of increments of .1dB the volume for the 60Hz band is lowered [1 byte]: Number of increments of .1dB the volume for the 125Hz band is lowered [1 byte]: Number of increments of .1dB the volume for the 250Hz band is lowered [1 byte]: Number of increments of .1dB the volume for the 500Hz band is lowered [1 byte]: Number of increments of .1dB the volume for the 1KHz band is lowered [1 byte]: Number of increments of .1dB the volume for the 2KHz band is lowered [1 byte]: Number of increments of .1dB the volume for the 4KHz band is lowered [1 byte]: Number of increments of .1dB the volume for the 8KHz band is lowered [1 byte]: Number of increments of .1dB the volume for the 16KHz band is lowered [1 byte]: Number of increments of .1dB the volume for the overall volume is lowered (gain) } !PAGE SETUP (only if the major file version is >= 5): { [4 bytes]: Page format length (mm) [4 bytes]: Page format width (mm) [4 bytes]: Left margin (mm) [4 bytes]: Right margin (mm) [4 bytes]: Top margin (mm) [4 bytes]: Bottom margin (mm) [4 bytes]: Score size (proportion in percent) [2 bytes]: Enabled header/footer fields bitmask (defined in notes section) [4 bytes]: Title header/footer field length (including string length byte that follows this value) [1 byte]: Title header/footer string length [varies]: Title header/footer string [4 bytes]: Subtitle header/footer field length (including string length byte that follows this value) [1 byte]: Subtitle header/footer string length [varies]: Subtitle header/footer string [4 bytes]: Artist header/footer field length (including string length byte that follows this value) [1 byte]: Artist header/footer string length [varies]: Artist header/footer string [4 bytes]: Album header/footer field length (including string length byte that follows this value) [1 byte]: Album header/footer string length [varies]: Album header/footer string [4 bytes]: Words (lyricist) header/footer field length (including string length byte that follows this value) [1 byte]: Words (lyricist) header/footer string length [varies]: Words (lyricist) header/footer string [4 bytes]: Music (composer) header/footer field length (including string length byte that follows this value) [1 byte]: Music (composer) header/footer string length [varies]: Music (composer) header/footer string [4 bytes]: Words & Music header/footer field length (including string length byte that follows this value) [1 byte]: Words & Music header/footer string length [varies]: Words & Music header/footer string [4 bytes]: Copyright header/footer (line 1) field length (including string length byte that follows this value) [1 byte]: Copyright header/footer (line 1) string length [varies]: Copyright header/footer (line 1) string [4 bytes]: Copyright header/footer (line 2) field length (including string length byte that follows this value) [1 byte]: Copyright header/footer (line 2) string length [varies]: Copyright header/footer (line 2) string [4 bytes]: Page Number header/footer field length (including string length byte that follows this value) [1 byte]: Page Number header/footer string length [varies]: Page Number header/footer string } SONG DATA: !Tempo string (only if the file version is >= 5.0): { [4 bytes]: Tempo string field length (including string length byte that follows this value) [1 byte]: Tempo string length [varies]: Tempo string } 4 bytes: Tempo (BPM) !UNINTERESTING DATA/PADDING (if the file version is > 5.0) [1 byte]: Unknown data/padding !KEY/OCTAVE INFORMATION (if the major file version is >= 4) { [1 byte]: The song's key [3 bytes]: Unknown data/padding [1 byte]: The song's used octave? } !KEY INFORMATION (if the major file version is < 4) [4 bytes]: The song's key CHANNEL DATA (each set of channel data, numbered beginning with 0, is referenced by the track's MIDI channel to identify the defined instrument, etc) { CHANNEL DATA REPEATED 64 TIMES: { 4 bytes: Instrument patch number (24-31 represent guitars, 32-39 represent bass guitars, etc) 1 byte: Volume (value from 0 to 16, default is 13) 1 byte: Pan (value from 0 to 16, default is 8) 1 byte: Chorus 1 byte: Reverb 1 byte: Phaser 1 byte: Tremolo 2 bytes: Unused/Padding bytes (set to 0x0) } ...(repeated data)... } !MUSICAL DIRECTIONS DEFINITIONS (if the major file version is >= 5) (38 bytes): { [2 bytes]: The bar number at which the "Coda" symbol is placed (0xFFFF = unused) [2 bytes]: The bar number at which the "Double coda" symbol is placed (0xFFFF = unused) [2 bytes]: The bar number at which the "Segno" symbol is placed (0xFFFF = unused) [2 bytes]: The bar number at which the "Segno segno" symbol is placed (0xFFFF = unused) [2 bytes]: The bar number at which the "Fine" symbol is placed (0xFFFF = unused) [2 bytes]: The bar number at which the "Da capo" symbol is placed (0xFFFF = unused) [2 bytes]: The bar number at which the "Da capo al coda" symbol is placed (0xFFFF = unused) [2 bytes]: The bar number at which the "Da capo al double coda" symbol is placed (0xFFFF = unused) [2 bytes]: The bar number at which the "Da capo al fine" symbol is placed (0xFFFF = unused) [2 bytes]: The bar number at which the "Da segno" symbol is placed (0xFFFF = unused) [2 bytes]: The bar number at which the "Da segno al coda" symbol is placed (0xFFFF = unused) [2 bytes]: The bar number at which the "Da segno al double coda" symbol is placed (0xFFFF = unused) [2 bytes]: The bar number at which the "Da segno al fine" symbol is placed (0xFFFF = unused) [2 bytes]: The bar number at which the "Da segno segno" symbol is placed (0xFFFF = unused) [2 bytes]: The bar number at which the "Da segno segno al coda" symbol is placed (0xFFFF = unused) [2 bytes]: The bar number at which the "Da segno segno al double coda" symbol is placed (0xFFFF = unused) [2 bytes]: The bar number at which the "Da segno segno al fine" symbol is placed (0xFFFF = unused) [2 bytes]: The bar number at which the "Da coda" symbol is placed (0xFFFF = unused) [2 bytes]: The bar number at which the "Da double coda" symbol is placed (0xFFFF = unused) } !MASTER REVERB SETTING (if the major file version is >= 5): [4 bytes]: Selected master reverb setting (in Score information, value from 0 to 60) 4 bytes: Number of bars (measures) 4 bytes: Number of tracks BAR CHUNK, for each bar (measure): { 1 byte: Bar (measure) bitmask (defined in notes section) If the major file version is < 3: { !END OF REPEAT (if the bitmask declares this) [1 byte]: Number of repeats? !NUMBER OF ALTERNATE ENDING (if the bitmask declares this) [1 byte]: Bitmask defining the the alternate endings (1 through 8) this measure contains (ignored if the bitmask didn't declare this) } If the major file version is >= 3: { !TS NUMERATOR (if the bitmask declares this) [1 byte]: TS numerator !TS DENOMINATOR (if the bitmask declares this) [1 byte]: TS denominator !END OF REPEAT (if the bitmask declares this) [1 byte]: Number of repeats? If the major file version is < 5: { !NUMBER OF ALTERNATE ENDING (if the bitmask declares this) [1 byte]: The number (not a bitmask) of the alternate ending (ignored if the measure bitmask didn't declare this) !NEW SECTION (if the bitmask declares this) { [4 bytes]: Section name field length (including string length byte that follows this value) [1 byte]: Length of section name string [varies]: Section name string [4 bytes]: Color to render the section name with (RGB intensities, with the most significant byte set padded with a value of 0) } !KEY SIGNATURE CHANGE (if the bitmask declares this) { [1 byte]: Key (see notes section) [1 byte]: Major/Minor (value is 0 if it is major, or 1 if it is minor) } } If the major file version is >= 5: { !NEW SECTION (if the bitmask declares this) { [4 bytes]: Section name field length (including string length byte that follows this value) [1 byte]: Length of section name string [varies]: Section name string [4 bytes]: Color to render the section name with (RGB intensities, with the most significant byte set padded with a value of 0) } !KEY SIGNATURE CHANGE (if the bitmask declares this) { [1 byte]: Key (see notes section) [1 byte]: Major/Minor (value is 0 if it is major, or 1 if it is minor) } !BEAM EIGHT NOTES BY VALUES (if the bitmask declares either a new TS num/den and the major file version is >= 5) [4 bytes]: Beam eight notes by values !NUMBER OF ALTERNATE ENDING (if the bitmask declares this) [1 byte]: Bitmask defining the the alternate endings (1 through 8) this measure contains (ignored if the bitmask didn't declare this) !TRIPLET FEEL (if the major file version is >= 5): [1 byte]: (0 = no triplet feel, 1 = Triplet 8th, 2 = Triplet 16th) !PADDING (if the major file version is >= 5): [1 byte]: Unknown data/padding (set to 0x0) } } } ...(variably repeated data)... TRACK CHUNK, for each track: { 1 byte: Track bitmask (defined in notes section) TRACK NAME (41 bytes): { 1 byte: Length of track name [varies]: Track name string [varies]: Padding (pad track name string to 40 bytes with bytes set to 0x0) } 4 bytes: Number of strings used in this track STRING TUNING CHUNK, definitions for 7 strings (starting with the lowest numbered string, ie. high e), or padded if there are less than 7 strings (28 bytes): { 4 bytes: The MIDI note this string plays open (Values between 0 through 127, where a value of 0 refers to note C0) [varies]: Optional padding (pad tuning chunk to 28 bytes, values set to 0xFF) } 4 bytes: MIDI port used 4 bytes: MIDI channel used (must be 10 if this is a drum track) 4 bytes: MIDI channel used for effects 4 bytes: Number of frets used for this instrument 4 bytes: The fret number at which a capo is placed (0 for no capo) 4 bytes: Track color (RGB intensities, with the most significant byte set padded with a value of 0) !TRACK SETTINGS (if the file version is > 5.0) { [1 byte]: Track properties 1 bitmask (defined in notes section) [1 byte]: Track properties 2 bitmask (defined in notes section) [1 byte]: Unknown [1 byte]: MIDI bank (if "Use MIDI" is enabled in track instrument options) [1 byte]: Human playing (Track instrument options) [1 byte]: Auto-Accentuation on the Beat (Track instrument options) [31 bytes]: Unknown [1 byte]: Selected sound bank option (Track instrument options) [7 bytes]: Unknown [1 byte]: Number of increments of .1dB the volume for the low frequency band is lowered [1 byte]: Number of increments of .1dB the volume for the mid frequency band is lowered [1 byte]: Number of increments of .1dB the volume for the high frequency band is lowered [1 byte]: Number of increments of .1dB the volume for all frequencies is lowered (gain) [4 bytes]: Track instrument effect 1 field length (including string length byte that follows this value) [1 byte]: Track instrument effect 1 string length [varies]: Track instrument effect 1 string [4 bytes]: Track instrument effect 2 field length (including string length byte that follows this value) [1 byte]: Track instrument effect 2 string length [varies]: Track instrument effect 2 string } !UNKNOWN DATA/PADDING (if the file version is 5.0) [45 bytes]: Unknown } ...(variably repeated data)... !PADDING (if the major file version is >= 5): [1 byte:] Padding !BEAT CHUNK, for each measure: { for each track (if the file major version is >= 5, this data is given twice, once for each "voice"): { !VOICE CHUNK, for each voice (if the file major version is >= 5, there are two voices: "lead" and "bass", otherwise there's 1) { 4 bytes: Number of beats in this track BEAT SUB CHUNK, for each beat { 1 byte: Beat bitmask (defined in notes section) !REST TYPE (if the beat bitmask declares the beat to be a rest) [1 byte]: Rest type (0 = empty beat, 2 = rest) 1 byte: Beat duration (-2 = whole note, -1 = half note, 0 = quarter note, 1 = eighth note, 2 = sixteenth note, 3 = thirty-second note, 4 = sixty-fourth note) !I've observed that Guitar Pro can author empty measures as a whole note rest even when that is musically inaccurate (ie. 5/8 meter) !N-TUPLET TYPE (if the beat bitmask declares the beat to be an N-tuplet) [4 bytes]: The number of notes played within the "tuplet" (ie. 3 = triplet) !I've observed that Guitar Pro can inexplicably encode tuplets of ZERO divisions. These instances should probably be interpreted as not being tuplets at all. !CHORD DIAGRAM (if the beat bitmask declares that a chord diagram is present): { [1 byte]: Chord diagram format (1 = GP4 format) !CHORD DIAGRAM FORMAT 0 (if the format identifier was 0, ie. GP3 format): { [4 bytes]: Chord name string field length (including string length byte that follows this value) [1 byte]: Chord name string length [varies]: Chord name string [4 bytes]: Fret number at which the diagram begins FRET CHUNK (ONLY if the above fret number is nonzero, includes definitions for each of the track's defined strings (not padded to 7 strings), starting with the lowest numbered string, ie. high e (-1 = not played, 0 = played open): { For each of the track's strings [4 bytes]: The fret number at which this string is being pressed } ...(repeated data)... } !CHORD DIAGRAM FORMAT 1 (if the format identifier was 1, ie. GP4 format) (105 bytes): { NOTE: In the GP3 file format, it appears that several 1 byte numerical fields are padded to take 4 bytes [1 byte]: Boolean: Display as sharp instead of flat [3 bytes]: Padding (set to 0) [1 byte]: Chord root (0 = C, 1 = C#, ..., 11 = B, 12 = User defined) !GP3 UNKNOWN DATA/PADDING (for 3.x of the file format) [3 bytes]: Unknown data/padding [1 byte]: Chord type (defined in notes section) !GP3 UNKNOWN DATA/PADDING (for 3.x of the file format) [3 bytes]: Unknown data/padding [1 byte]: 9th/11th/13th option !GP3 UNKNOWN DATA/PADDING (for 3.x of the file format) [3 bytes]: Unknown data/padding [4 bytes]: Lowest note played (bass note) in the chord (for determining chord inversions/slash chords) (0 = C, 1= C#, ..., 11 = B, -1 = undefined) [1 byte]: +/- option [4 bytes]: Unknown data [1 byte]: Chord name string length [20 bytes]: Chord name string (padded to 20 bytes) [2 bytes]: Padding (set to 0) [1 byte]: Tonality of the fifth (0 = perfect, 1 = augmented, 2 = diminished) !GP3 UNKNOWN DATA/PADDING (for 3.x of the file format) [3 bytes]: Unknown data/padding [1 byte]: Tonality of the ninth (0 = perfect, 1 = augmented, 2 = diminished) !GP3 UNKNOWN DATA/PADDING (for 3.x of the file format) [3 bytes]: Unknown data/padding [1 byte]: Tonality of the eleventh (0 = perfect, 1 = augmented, 2 = diminished) !GP3 UNKNOWN DATA/PADDING (for 3.x of the file format) [3 bytes]: Unknown data/padding [4 bytes]: Chord diagram's base fret position FRET CHUNK, definitions for 7 strings (starting with the lowest numbered string, ie. high e), or padded if there are less than 7 strings (-1 = not played, 0 = played open): { For each of the 7 strings [4 bytes]: The fret number at which this string is being pressed } ...(repeated data)... [1 byte]: Number of barres in the chord (up to 5) BARRE POSITION CHUNK, definitions for 5 barre positions { For each of the 5 possible barres [1 byte]: The fret number this barre is at } ...(repeated data)... BARRE START CHUNK, definitions for 5 barre starting strings { For each of the 5 possible barres [1 byte]: The first string of the barre (1 is the highest) } ...(repeated data)... BARRE END CHUNK, definitions for 5 barre ending strings { For each of the 5 possible barres [1 byte]: The last string of the barre (1 is the highest) } ...(repeated data)... [1 byte]: Whether the chord includes the first interval (boolean) [1 byte]: Whether the chord includes the third interval (boolean) [1 byte]: Whether the chord includes the fifth interval (boolean) [1 byte]: Whether the chord includes the seventh interval (boolean) [1 byte]: Whether the chord includes the ninth interval (boolean) [1 byte]: Whether the chord includes the eleventh interval (boolean) [1 byte]: Whether the chord includes the thirteenth interval (boolean) [1 byte]: Padding (set to 0) FINGERING CHUNK, definitions for 7 strings (starting with the lowest numbered string, ie. high e), or padded if there are less than 7 strings: { For each of the 7 strings [1 byte]: Which finger plays the string (-2 = unknown, -1 = open or muted, 0 = thumb, 1 = index, 2 = middle, 3 = ring, 4 = pinky) } ...(repeated data)... [1 byte]: Whether the chord fingering is displayed (boolean) } } !BEAT TEXT (if the beat bitmask declares there is text present) { [4 bytes]: Beat text string field length (including string length byte that follows this value) [1 byte]: Beat text string length [varies]: String } !EFFECTS PRESENT (if the beat bitmask declares there are effects present) { [1 byte]: Beat effects bitmask (defined in notes section) !EXTENDED BEAT EFFECTS BITMASK (only if the major file version is >= 4): [1 byte]: Extended beat effects bitmask (byte 2 of the bitmask) !STRING EFFECT (if the beat effects bitmask declares this effect): { [1 byte]: Which string effect is used (0 = Tremolo bar, 1 = Tapping, 2 = Slapping, 3 = Popping (bass guitar)) !STRING EFFECT VALUE (only if the major file version is < 4): [4 bytes]: A value applied to the string effect, ie. how much the tremolo bar dives in cents } !TREMOLO STATUS (if the beat effects bitmask declares this effect): [varies]: BEND CHUNK (defined in notes section) !STROKE EFFECT (if the beat effects bitmask declares this effect): { [1 byte]: Upstroke speed (0 = none, 1 = 128th note, 2 = 64th note, 3 = 32nd note, 4 = 16th note, 5 = 8th note, 4 = quarter note) [1 byte]: Downstroke speed (0 = none, 1 = 128th note, 2 = 64th note, 3 = 32nd note, 4 = 16th note, 5 = 8th note, 4 = quarter note) } !PICKSTROKE EFFECT (if the beat effects bitmask declares this effect): [1 byte]: Stroke direction? (0 = none, 1 = up, 2 = down) } !MIX TABLE CHANGE (if the beat bitmask declares this effect) (19 bytes): { [1 byte]: The number of the new instrument (-1 = no change) RSE RELATED DATA (Version 5.x) { [4 bytes]: RSE related 4 digit number (-1 if RSE is disabled) [4 bytes]: RSE related 4 digit number (-1 if RSE is disabled) [4 bytes]: RSE related 4 digit number (-1 if RSE is disabled) [4 bytes]: Unknown data/padding (bytes set to 0xFF) } [1 byte]: The new volume (-1 = no change, otherwise a value from 0 - 16) [1 byte]: The new pan value (-1 = no change, otherwise a value from 0 - 16) [1 byte]: The new chorus value (-1 = no change, otherwise a value from 0 - 16) [1 byte]: The new reverb value (-1 = no change, otherwise a value from 0 - 16) [1 byte]: The new phaser value (-1 = no change, otherwise a value from 0 - 16) [1 byte]: The new tremolo value (-1 = no change, otherwise a value from 0 - 16) TEMPO STRING DATA (Version 5.x) { [4 bytes]: Tempo text string field length (including string length byte that follows this value) [1 byte]: Tempo text string length [varies]: Tempo text string (including NULL byte) } [4 byte]: The new tempo (-1 = no change, otherwise a value from 0 - 16) VOLUME CHANGE TRANSITION (if the volume changed): [1 byte]: Volume change transition period in bars PAN CHANGE TRANSITION (if the pan changed): [1 byte]: Pan change transition period in bars CHORUS CHANGE TRANSITION (if the chorus changed): [1 byte]: Chorus change transition period in bars REVERB CHANGE TRANSITION (if the reverb changed): [1 byte]: Reverb change transition period in bars PHASER CHANGE TRANSITION (if the phaser changed): [1 byte]: Phaser change transition period in bars TREMOLO CHANGE TRANSITION (if the tremolo changed): [1 byte]: Tremolo change transition period in bars TEMPO CHANGE TRANSITION (if the tempo changed): { [1 byte]: Tempo change transition period in bars TEMPO TEXT HIDDEN (if the file version is > 5.0) [1 byte]: If there was a tempo change, this one byte field indicates whether the tempo text string is hidden (1 = yes) } ? MIX TABLE APPLIED TRACKS BITMASK (Version 4.x and newer) (This field doesn't appear to be included in version 3.0 files) ? [1 byte]: Mix table change applied tracks bitmask (defined in notes section) UNKNOWN DATA/PADDING (Version 5.x) [1 byte]: Unknown data/padding RSE EFFECTS STRINGS (if the file version is > 5.0) { [4 bytes]: Effect 2 string field length (including string length byte that follows this value) [1 byte]: Effect 2 string length [varies]: Effect 2 string (including NULL byte) [4 bytes]: Effect 1 string field length (including string length byte that follows this value) [1 byte]: Effect 1 string length [varies]: Effect 1 string (including NULL byte) } } 1 byte: Used strings mask (Bit 1 represents string 6. Bit 6 represents string 1. Bit 0 represents string 7 if that string if it is in use. Bit 0 is unused) !STRING CHUNK, for each populated string (starting with the lowest numbered string, ie. high e): { [1 byte]: Note bitmask (defined in notes section) !NOTE TYPE (if the note bitmask declares this: Bit 5, AKA 0x20, AKA 32 decimal) [1 byte]: Note type (1 = normal, 2 = tie, 3 = dead (muted)) !TIME INDEPENDENT DURATION (if the file version is < 5.0, and the note bitmask declares this: Bit 1, AKA 1 decimal) { [2 bytes]: Time independent duration data, it may be that the first number is the denominator and the second is the numerator (ie. values of 2, 1 seem to represent 50% duration) } !NOTE DYNAMIC (if the note bitmask declares this: Bit 4, AKA 0x10, AKA 16 decimal) [1 byte]: How soft/strong the note is played ranging from pianissimo possibile (ppp, value of 1) to fortissimo possibile (fff, value of 8): ppp, pp, p, mp, mf, f, ff, fff (If the note dynamic is not defined, a value of 6, forte, is assumed) !FRET NUMBER (if the note bitmask declares a note type: Bit 5, AKA 0x20, AKA 32 decimal) [1 byte]: Fret number !RIGHT/LEFT HAND FINGERING (if the note bitmask declares this: Bit 7, AKA 0x80, AKA 128 decimal) { [1 byte]: Left hand fingering associated with this note (-1 = nothing, 0 = thumb, 1 = index, 2 = middle, 3 = ring, 4 = pinky) [1 byte]: Right hand fingering associated with this note (-1 = nothing, 0 = thumb, 1 = index, 2 = middle, 3 = ring, 4 = pinky) } !TIME INDEPENDENT DURATION (if the file version is >= 5.0, and the note bitmask declares this: Bit 1, AKA 1 decimal) { !Note: The real contents of this data is not known [8 bytes]: Unknown data/padding } ? !UNKNOWN DATA/PADDING (if the file version is >= 5.0) (note: This byte is verified to not be in 3.x/4.x version GP files) [1 byte]: Unknown/padding !NOTE EFFECT (if the note bitmask declares this: Bit 3, AKA 8 decimal) { [1 byte]: Note effect 1 bitmask (defined in notes section) !NOTE EFFECT 2 BITMASK (if the file version is >= 4.0) [1 byte]: Note effect 2 bitmask (defined in notes section) !BEND (if the note effect 1 bitmask defines this) [varies]: BEND CHUNK !GRACE NOTE (if the note effect 1 bitmask defines this) { [1 byte]: The grace note's fret number [1 byte]: The dynamic of the grace note ranging from pianissimo possibile (ppp, value of 1) to fortissimo possibile (fff, value of 8): ppp, pp, p, mp, mf, f, ff, fff (If the dynamic is not defined, a value of 6, forte, is assumed) ? !GRACE NOTE TRANSITION (if the file version is >= 5.0) (this is verified not to be in GP 4.06 files) [1 byte]: The grace note's transition type (0 = none, 1 = slide, 2 = bend, 3 = hammer) !UNKNOWN DATA (if the file version is < 5.0) [1 byte]: This doesn't seem to represent the same thing that the grace note transition field does [1 byte]: Duration of the grace note (3 = 16th note, 2 = 32nd note, 1 = 64th note) ? !GRACE NOTE POSITION (if the file version is >= 5.0) (this is verified not to be in GP 3.0 and 4.06 files) [1 byte]: Grace note bitmask (Bit 0: Is a dead note, Bit 1: Is "On the beat" instead of "Before the beat") } !TREMOLO PICKING (if the note effect 2 bitmask defines this) [1 byte]: Picking speed (3 = 32nd note, 2 = 16th note, 1 = 8th note) !SLIDE (if the note effect 2 bitmask defines this) If the major file version is < 5: [1 byte]: Slide type number (-2 = slide in from above, -1 = slide in from below, 1 = shift slide, 2 = legato slide, 3 = slide out and downwards, 4 = slide out and upwards) If the major file version is >= 5: [1 byte]: Slide type bitmask (0 = no slide, 1 = shift slide, 2 = legato slide, 4 = slide out and downwards, 8 = slide out and upwards, 16 = slide in from below, 32 = slide in from above) !HARMONIC (if the note effect 2 bitmask defines this) { [1 byte]: Harmonic type (0 = none, 1 = Natural, 2 = Artificial, 3 = Tapped, 4 = Pinch, 5 = Semi) ARTIFICIAL HARMONIC DATA (if it is an artificial harmonic note): { [1 byte]: Harmonic note (0 = C, 2 = D, 4 = E, 5 = F, 7 = G, 9 = A, 11 = B) [1 byte]: Sharp/Flat field (-1 = flat, 1 = sharp, 0 = neither) [1 byte]: Harmonic octave field (0 = loco, 1 = 8va, 2 = 15ma) } TAPPED HARMONIC RIGHT HAND FRET (if it is a tapped harmonic note): [1 byte]: The fret played with the right hand } !TRILL (if the note effect 2 bitmask defines this) { [1 byte]: The fret being trilled with [1 byte]: The period between each of the two trilled notes (0 = 4th note, 1 = 8th note, 2 = 16th note) } } } ...(variably repeated string data)... !TRANSPOSE DATA (if the file version is >= 5.0) { [2 bytes]: Note transpose bitmask (defined in notes section) ADDITIONAL UNKNOWN DATA BYTE (if the note transpose bitmask declares this) [1 byte]: Unknown data } } ...(variably repeated beat data)... } ...(variably repeated voice data)... !PADDING (if the file version is >= 5.0) [1 byte]: Padding } ...(variably repeated track data)... } ...(variably repeated measure data)... --------------------------------------------------- *NOTES: The version string is expected to be one of the following: FICHIER GUITARE PRO v1.01 FICHIER GUITARE PRO v1.02 FICHIER GUITARE PRO v1.03 FICHIER GUITARE PRO v1.04 FICHIER GUITAR PRO v2.20 FICHIER GUITAR PRO v2.21 FICHIER GUITAR PRO v3.00 FICHIER GUITAR PRO v4.00 FICHIER GUITAR PRO v4.06 FICHIER GUITAR PRO L4.06 FICHIER GUITAR PRO v5.00 FICHIER GUITAR PRO v5.10 Numerical fields use little endian formatting The enabled header/footer fields bitmask declares which fields are displayed: Bit 0 (LSB): Title field Bit 1: Subtitle field Bit 2: Artist field Bit 3: Album field Bit 4: Words (Lyricist) field Bit 5: Music (Composer) field Bit 6: Words & Music field Bit 7: Copyright field Bit 8: Page Number (field) Bits 9 - 15: Unused (set to 0) The bar (measure) bitmask declares which parameters are defined for the measure: Bit 0 (LSB): Time signature change numerator (GP version >= 3), or start of repeat (GP version < 3) Bit 1: Time signature change denominaator (GP version >= 3), or end of repeat (GP version < 3) Bit 2: Start of repeat (GP version >= 3), number of alternative ending (GP version < 3) Bit 3: End of repeat (GP version >= 3) Bit 4: Number of alternate ending (GP version >= 3) Bit 5: New section Bit 6: Key signature change Bit 7 (MSB): Double bar The track bitmask declares which parameters are defined for the track: Bit 0 (LSB): Drums track Bit 1: 12 stringed guitar track Bit 2: Banjo track Bit 3: Unknown Bit 4: Marked for solo playback Bit 5: Marked for muted playback Bit 6: Use RSE playback (track instrument option) Bit 7: Indicate tuning on the score (track properties) The track properties 1 bitmask declares various options in track properties: Bit 0 (LSB): Unknown (something to do with tablature notation being enabled) Bit 1: Unknown Bit 2: "Diagrams/chords below the standard notation" Bit 3: "Show rhythm with tab" Bit 4: "Force horizontal beams" Bit 5: "Force channels 11 to 16" Bit 6: "Diagrams list on top of the score" Bit 7 (MSB): "Diagrams in the score" The track properties 2 bitmask declares various options in track properties/instrument: Bit 0 (LSB): Unknown Bit 1: "Auto-Let Ring" Bit 2: "Auto Brush" Bit 3: "Extend rhythmic inside the tab" Bits 4-7: Unknown The beat bitmask declares which parameters are defined for the beat: Bit 0 (LSB): Dotted note Bit 1: Chord diagram present Bit 2: Text present Bit 3: Beat effects present Bit 4: Mix table change present Bit 5: This beat is an N-tuplet Bit 6: Is a rest beat Bit 7 (MSB): Unused (set to 0) The beat effects bitmasks declare which parameters are defined for the beat: Byte 1 Bit 0: Vibrato Bit 1: Wide vibrato Bit 2: Natural harmonic Bit 3: Artificial harmonic Bit 4: Fade in Bit 5: String effect Bit 6: Stroke effect Bit 7 (MSB): Unused (set to 0) Byte 2 (extended beat effects, only if the major file version is >= 4): Bit 0 (LSB): Rasguedo Bit 1: Pickstroke Bit 2: Tremolo bar Bits 3 - 7: Unused (set to 0) The mix table change applied tracks bitmask declares which mix change events apply to all tracks (set = all tracks, reset = current track only): Bit 0 (LSB): Volume change Bit 1: Pan change Bit 2: Chorus change Bit 3: Reverb change Bit 4: Phaser change Bit 5: Tremolo change Bits 6-7: Unused The note bitmask declares which parameters are defined for the note: Bit 0 (LSB): Time-independent duration Bit 1: Heavy Accentuated note (GP5 or higher only, usage in older formats is unknown) Bit 2: Ghost note Bit 3: Note effects present Bit 4: Note dynamic Bit 5: Note type Bit 6: Accentuated note Bit 7: Right/Left hand fingering The note effect 1 bitmask declares which effects are defined for the note: Bit 0 (LSB): Bend present Bit 1: Hammer on/Pull off from the current note Bit 2: Slide from the current note (GP3 format version) Bit 3: Let ring Bit 4: Grace note Bits 5-7: Unused (set to 0) The note effect 2 bitmask declares more effects for the note: Bit 0 (LSB): Note played staccato Bit 1: Palm Mute Bit 2: Tremolo Picking Bit 3: Slide from the current note Bit 4: Harmonic note Bit 5: Trill Bit 6: Vibrato Bit 7 (MSB): Unused (set to 0) The note transpose bitmask declares how the note is transposed for play compared to how it is written in standard notation: Bits 0-3: Unknown/unused Bit 4: 8va (up one octave) Bit 5: 8vb (down one octave) Bit 6: 15ma (up two octaves) Bit 7: Unknown/unused Bit 8: 15mb (down two octaves) Bits 9-10: Unknown/unused Bit 11: An extra unknown data byte follows this bitmask Bits 12-15: Unknown/unused Bends are defined in this format: BEND CHUNK { [1 byte]: The type of bend (0 = none, 1 = bend, 2 = bend and release, 3 = bend->release->bend, 4 = prebend, 5 = prebend and release, 6 = tremolo dip, 7 = tremolo dive, 8 = tremolo release [up], 9 = tremolo inverted dip, 10 = tremolo return, 11 = tremolo release [down]) [4 bytes]: Bend height, measured in how much the pitch changes in percent of a full step (it does not store it in cents, which is percent of a half step) Note: The bend points override this bend height, which is just a pre-set selection list [4 bytes]: Number of points to display the bend with, the most GP5 allows to be defined on a single note seems to be 30 BEND POINT CHUNK, for each bend point { [4 bytes]: Absolute time position relative to previous bend point (Valued 0 through 60, in sixtieths of the note's duration) [4 bytes]: Vertical position (Pitch alteration from normal note, signed value as a percent of a full step, which is in intervals of 2 cents) [1 byte]: Vibrato type (0 = none, 1 = fast, 2 = average, 3 = slow) } ...(variably repeated data)... } Key signatures are encoded as follows: If the number is negative, the value defines the number of flats present (ie. -2 is Bb) If the number is positive, the value defines the number of sharps present (ie. 4 is E) Chord types (used in chord diagrams) are defined as follows: 0: M 1: 7 2: 7M 3: 6 4: m 5: m7 6: m7M 7: m6 8: sus2 9: sus4 10: 7sus2 11: 7sus4 12: dim 13: aug 14: 5