-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy pathGuitar Pro 5.10 format.txt
738 lines (714 loc) · 35.6 KB
/
Guitar Pro 5.10 format.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
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