MidiEditor AI can natively open all Guitar Pro formats — from the original 1990s DOS-era GP1 files all the way to the latest Guitar Pro 8. Files are converted to MIDI on-the-fly with tempo, time signature, key signature, tuning, and instrument mapping preserved. No external converter or Guitar Pro installation needed.
📂 Open via: File → Open (Ctrl+O) — the file dialog accepts .gp, .gp3, .gp4, .gp5, .gpx, and .gtp files. Format detection is header-based, so even misnamed extensions work correctly.
Every Guitar Pro version released between 1993 and 2024 is supported:
| Format | Extensions | Version Range | Parser | Encoding |
|---|---|---|---|---|
| GP1 | .gtp |
v1.0 – v1.04 | Gp12Parser | Binary (DOS, French header “GUITARE”) |
| GP2 | .gtp |
v2.20 – v2.21 | Gp12Parser | Binary (DOS, adds triplet feel, repeats, capo) |
| GP3 | .gp3 |
v3.00 | Gp345Parser | Binary |
| GP4 | .gp4 |
v4.00 – v4.06 | Gp345Parser | Binary (adds lyrics, RSE, key signatures) |
| GP5 | .gp5 |
v5.00 – v5.10 | Gp345Parser | Binary (adds RSE2, extended note effects) |
| GP6 / GPX | .gpx |
v6.x | Gp678Parser | BCFZ-compressed GPIF XML |
| GP7 / GP8 | .gp |
v7.x – v8.x | Gp678Parser | ZIP-packaged GPIF XML |
.gp3) with multi-track support, tempo changes, and text annotations.
.gpx.
.gp.
.gp extension.
MidiEditor AI does not rely on the file extension to determine the format. Instead, it reads the magic bytes at the start of each file. This means:
.gtp file could be GP1 or GP2 — the header distinguishes them.gp file could be GP7 or GP8 — the internal version tag is checked.gp5 to .gpx, MidiEditor AI will still parse it correctly as GP5| Family | Detection Method |
|---|---|
| GP1 / GP2 | Header string: FICHIER GUITAR PRO v1 or v2 (French) |
| GP3 / GP4 / GP5 | Header string: FICHIER GUITAR PRO v3, v4, or v5 |
| GP6 (BCFZ) | Magic bytes: BCFZ at offset 0 |
| GP7 / GP8 (ZIP) | ZIP header PK\x03\x04 containing Content/score.gpif |
When you open a Guitar Pro file, the following data is extracted and converted to MIDI:
String/fret tablature is converted to MIDI note numbers using the track’s tuning. Note velocity, duration, and timing are preserved.
Tempo changes (BPM markers) are inserted as MIDI tempo meta events at the correct tick positions.
Time signature changes (e.g., 4/4 → 6/8) are extracted per measure and inserted as MIDI time signature meta events.
Key signature markers (GP4+) are converted to MIDI key signature meta events with correct sharps/flats and major/minor mode.
Guitar Pro instrument assignments are mapped to General MIDI program numbers. Track names are preserved. Each track gets its own MIDI channel.
Bends, slides, hammer-on/pull-off, vibrato, and harmonics are converted to MIDI pitch bend and controller events where possible.
The import system uses three parser families, all sharing a common entry point (GpImporter):
| Parser | Formats | Approach |
|---|---|---|
| Gp12Parser | GP1, GP2 | Sequential binary reading of DOS-era format. Ported from TuxGuitar’s Java reference implementation (GP1InputStream, GP2InputStream). |
| Gp345Parser | GP3, GP4, GP5 | Inheritance chain: Gp3Parser → Gp4Parser → Gp5Parser. Each subclass adds version-specific fields. Binary format with typed fields (strings, ints, bytes). |
| Gp678Parser | GP6, GP7, GP8 | First decompresses the container (BCFZ or ZIP), then parses the GPIF XML document. DOM-based XML traversal extracts scores, tracks, bars, voices, beats, and notes. |
The Meowchestra/MidiEditor upstream contained a non-functional Guitar Pro parser skeleton. MidiEditor AI fixed and completed it:
| Issue | Problem | Fix |
|---|---|---|
| GP5 note effects | Missing readNoteEffects() override — GP5 effect flags were read as GP3 format, corrupting subsequent data |
Added Gp5Parser::readNoteEffects() with correct GP5 flag layout |
| Field ordering | readNote() read accentuatedNote and ghostNote flags in wrong order |
Swapped to match the actual binary layout |
| EOF crashes | No boundary checking — truncated files caused segfaults | Added EOF checks throughout binary readers |
| BCFZ decompression | Used zlib inflate() — completely wrong algorithm for BCFZ |
Rewrote with correct bit-level LZ77 algorithm (ported from BardMusicPlayer C# source) |
| ZIP extraction | Parsed local file headers which have unreliable sizes with data descriptors | Rewrote to parse the central directory from the end of the file |
| XML lookup | getSubnodeByName() found nested elements before top-level collections (e.g., <Bars> inside <MasterBar>) |
All lookups now use directOnly=true for first-child-only matching |
| GP1/GP2 missing | No support at all for the original DOS formats | New Gp12Parser ported from TuxGuitar reference |
The parser has been validated against real-world files spanning all supported formats:
| File | Format | Tracks | Measures |
|---|---|---|---|
| You’ve Got Something There.gtp | GP1 | 8 | 12 |
| U2 – Lemon.gp3 | GP3 | 9 | 199 |
| Sakuran – Sakuran.gp4 | GP4 | 5 | 137 |
| Flogging Molly – Float.gp5 | GP5 | 5 | 74 |
| Guns N’ Roses – Sweet Child O’ Mine.gpx | GP6 | 6 | 180 |
| The Mirror.gp | GP7 | 6 | 147 |
A common use case is converting Guitar Pro tabs into FFXIV Bard Performance files. Here’s the recommended workflow:
File → Open and select your .gp, .gp5, .gpx, or other Guitar Pro file. Tracks, notes, and tempo are imported automatically.
Check the imported tracks in the Track Editor. Rename, delete, or rearrange tracks as needed. Guitar Pro track names are preserved.
Click Fix X|V Channels
to set up the FFXIV channel mapping, program changes, and guitar variant switching automatically.
Save with File → Save As (.mid). The file is now ready for MidiBard2 or other FFXIV performance tools.
💡 Tip: You can also ask MidiPilot to help: “Convert this Guitar Pro import for FFXIV 8-player ensemble, constrain range to C3–C6, make all tracks monophonic”