Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
7332730
GPIF reader — Phase 1: skeleton + song metadata
kaizenman Apr 18, 2026
ea93ba6
GPIF reader — Phase 2: tracks, tuning, MIDI channels
kaizenman Apr 18, 2026
92e814b
GPIF reader — Phase 3: measures, voices, beats, notes
kaizenman Apr 18, 2026
f5dba0a
GPIF reader — Phase 4: note effects + beat effects
kaizenman Apr 18, 2026
4f93339
GPIF reader — Phase 5: full parity with GP3/4/5
kaizenman Apr 18, 2026
49d92cb
GPIF reader — Phase 5 audit: close every parity gap we can
kaizenman Apr 18, 2026
6b74d58
GPIF reader — fingering, legato, anacrusis, track automations
kaizenman Apr 18, 2026
2d43992
gpif: extract pick-slide flags (0x40 PickSlideDown, 0x80 PickSlideUp)
kaizenman Apr 21, 2026
1deb82d
gpif: extract LeftHandTapped note property
kaizenman Apr 21, 2026
1bc69f3
gpif: extract note accidental mode (ConcertPitch / TransposedPitch)
kaizenman Apr 21, 2026
fa97d00
gpif: extract <InstrumentArticulation> sibling element
kaizenman Apr 21, 2026
40bec64
gpif: propagate note-level <Tapped> property to beat slapEffect
kaizenman Apr 21, 2026
6bc5fb0
gpif: map <Fadding> to full FadeType enum (FadeIn/FadeOut/VolumeSwell)
kaizenman Apr 21, 2026
204acfd
gpif: extract <Fermatas> / <Fermata> master-bar elements
kaizenman Apr 21, 2026
e6f9acf
gpif: extract <Ornament> sibling element on notes
kaizenman Apr 21, 2026
f528bae
gpif: distinguish Slight vs Wide <Vibrato> on notes
kaizenman Apr 21, 2026
b35d39a
gpif: extract Accent bit 0x10 (Tenuto) as a dedicated flag
kaizenman Apr 21, 2026
74ba3f4
gpif: extract <TransposedPitchStemOrientation> beat siblings
kaizenman Apr 21, 2026
770f636
gpif: extract <SimileMark> bar element
kaizenman Apr 21, 2026
f137690
gpif: extract <Property name="ShowStringNumber"> note property
kaizenman Apr 21, 2026
0949a47
gpif: extract beat-level Hairpin / Slashed / DeadSlapped / Golpe / Wa…
kaizenman Apr 21, 2026
e37c8fa
gpif: apply <WordsAndMusic> fallback when Words/Music are empty
kaizenman Apr 21, 2026
fcbe7c0
gpif: map <Property Element>+<Variation> via the GP6 percussion table
kaizenman Apr 21, 2026
d9793f7
gpif: expose full <Sounds> collection via Track.sounds (GpifSound)
kaizenman Apr 21, 2026
8925fdd
gpif: extract Track layout batch (SystemsLayout / NotationPatch / Ins…
kaizenman Apr 21, 2026
89971b8
gpif: extract tuning <Label> and <PartSounding> (transposition hints)
kaizenman Apr 21, 2026
08136d9
gpif tests: unskip Directions / Drums (pre-existing silent skips)
kaizenman Apr 21, 2026
dcb510a
gpif: rewrite stale docstring + relabel GP7+ → GPIF
kaizenman Apr 21, 2026
f4427e9
gpif: extract Note <Octave>/<Tone> (GP6 pitch) + Feedback harmonic
kaizenman Apr 21, 2026
e9fbc4b
gpif: map full <Rasgueado> enum (18 fingering patterns)
kaizenman Apr 21, 2026
0646bd8
gpif: extract <FreeTime/> onto MeasureHeader.isFreeTime
kaizenman Apr 21, 2026
5f85176
gpif: extract beat-level <BarreFret> + <BarreString> (BarreShape enum)
kaizenman Apr 21, 2026
b1f2c64
gpif: extract per-beat <Lyrics><Line> into Beat.lyrics
kaizenman Apr 21, 2026
fd61be0
gpif: extract <XProperties> on Beat / Bar / MasterBar
kaizenman Apr 21, 2026
3176449
gpif: extract <Automation type="SustainPedal"> markers
kaizenman Apr 21, 2026
e4aac09
gpif: extract <BackingTrack> + master-track <SyncPoint> automations
kaizenman Apr 21, 2026
1db7a69
gpif: TripletFeel full 7-variant enum + DoubleWhole duration
kaizenman Apr 21, 2026
45f5b56
gpif: score-layout batch — ScoreSystemsLayout + Chord show flags + Vi…
kaizenman Apr 22, 2026
aab2ce7
tests: add AT parity gate — freeze GpifParser case snapshot
kaizenman Apr 22, 2026
6e9b486
gpif: extract full <NotationPatch>/<InstrumentSet> articulation table
kaizenman Apr 22, 2026
81797e1
gpif: load <Assets><Asset> raw audio bytes into BackingTrack.rawAudio…
kaizenman Apr 22, 2026
363b7fe
gpif: fix three audit-surfaced semantic divergences vs alphaTab
kaizenman Apr 22, 2026
c8d6dce
gpif: tighten parity gate — full 365-label snapshot + noteheadSlashed…
kaizenman Apr 22, 2026
378a4b2
gpif: two more audit findings — Whammy offsets + Arpeggio fallback
kaizenman Apr 22, 2026
2d60155
gpif: three block-by-block audit findings (chord frets + clef ottava)
kaizenman Apr 22, 2026
8d83b8f
gpif: BeatEffect.vibratoType for Slight/Wide enum parity
kaizenman Apr 22, 2026
4b70987
gpif: block-by-block audit round 2 — five more divergences fixed
kaizenman Apr 22, 2026
157267d
gpif: read <Program> from GeneralMidi/MidiConnection (AT fallback path)
kaizenman Apr 22, 2026
867e232
gpif: clear hasDoubleBar on last master bar (alphaTab _buildModel fix)
kaizenman Apr 22, 2026
ac8de8b
gpif: docstring cleanup — stale "Deliberately skipped" list
kaizenman Apr 22, 2026
0d75e5f
gpx: add BCFZ/BCFS container support — enables GP6 reads
kaizenman Apr 22, 2026
261f8de
gpif: clear percussionArticulations on non-percussion tracks
kaizenman Apr 25, 2026
7e8e77c
gpif: align defaultSystemsLayout default with alphaTab (3, not 4)
kaizenman Apr 25, 2026
f8a863b
gpif: rename gp7.py → gpif.py + GP7File → GpifFile
kaizenman Apr 25, 2026
95e8466
ci: exclude binary GP files from end-of-file-fixer + trim gpif.py tra…
kaizenman Apr 25, 2026
2dd178f
ci: fix flake8 and pyupgrade lint findings in gpif.py + gpx.py
kaizenman Apr 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,6 @@ repos:
rev: v6.0.0
hooks:
- id: trailing-whitespace
exclude: '\.(gp|gp3|gp4|gp5|gp7|gp8|gpx|tmp)$'
- id: end-of-file-fixer
exclude: '\.(gp|gp3|gp4|gp5|gp7|gp8|gpx|tmp)$'
13 changes: 13 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
Changelog
=========

Unreleased
----------

**Changes:**

- Added Guitar Pro 6 (``.gpx`` / BCFZ + BCFS) read support via a port of
AlphaTab's ``GpxFileSystem`` + ``BitReader``. Containers are unpacked
and the embedded ``score.gpif`` is parsed via the existing GP7/GP8
GPIF code path — no duplicate parser. The port is byte-for-byte
verified against AlphaTab on 3,768 real-world GP6 files (entry
``fileName`` + ``fileSize`` + SHA-256 match on every entry).


Version 0.10.2
-------------

Expand Down
Loading