dart_gp_tab_reader 0.4.0 copy "dart_gp_tab_reader: ^0.4.0" to clipboard
dart_gp_tab_reader: ^0.4.0 copied to clipboard

Pure-Dart, read-only reader for Guitar Pro tablature files (GP3, GP4, GP5, GP6 .gpx and GP7/GP8 .gp). Parses them into a Song > Track > Measure > Voice > Beat > Note tree.

0.4.0 #

  • Vibrato keeps its written width. NoteEffect.vibrato and BeatEffect.vibrato changed from bool to the new VibratoKind (none / slight / wide) — BREAKING for anyone reading those fields. GP6/7/8 write the width out (<Vibrato>Slight</Vibrato> / <Vibrato>Wide</Vibrato>, and <Strength> inside the beat's VibratoWTremBar property) and it was thrown away: every vibrato read as one undifferentiated flag. The GP3-5 binaries have no strength byte, so their note flag reads as slight and their beat flag — the trem-bar vibrato — as wide, which is what those flags mean.
  • BeatEffect.vibrato is now documented for what it is: vibrato played with the TREMOLO BAR across the whole beat, not the fretting hand's ~ (NoteEffect.vibrato).
  • GPIF reader: the pickup (anacrusis) bar is no longer timed as a full one. GP7/8 flags it once on the <MasterTrack> (<Anacrusis/>), meaning "the first bar is a pickup"; the reader only looked for the flag inside a <MasterBar> (where older writers put it), so a half-note pickup notated in 4/4 kept the full four beats. Everything after the pickup was pushed late by the unplayed rest — a two-beat gap after the intro note, and a bar grid offset from the music for the whole song.

0.3.4 #

  • GPIF reader: mid-bar automations are no longer dropped. An <Automation>'s <Position> is an offset in QUARTER NOTES from the bar's start (2.5 = the "and" of beat 3 in a 4/4 bar); it was read as a 0..1 fraction of the bar, which sent every off-downbeat automation past the end of its own bar, where no beat matched and the change was silently skipped. Only Position 0 automations survived. So a mid-bar Sound switch — the usual clean → distortion change, which players write on the upbeat going into the riff — never reached MixTableChange.instrument, and mid-bar tempo changes were lost the same way.

0.3.3 #

  • GPIF reader: natural harmonics keep their HFret touch node. NaturalHarmonic gained an optional fret field (absolute node position in frets above the nut, e.g. 5.8 = seventh-partial node). Previously the node was dropped for natural harmonics, so consumers could only guess the sounding partial from the notated fret — which is ambiguous (a harmonic notated at fret 6 is the 5.8 node, two-octaves-and-a-seventh above the open string, not an octave). GP3-5 files still produce fret == null (the binary formats carry no node).

0.3.2 #

  • GPIF reader: multi-point bend curves. The full BendOrigin/Middle/Destination{Value,Offset} property set is now read (mirroring alphaTab's mapping), so bend-releases, pre-bends and held bends keep their real shape — previously every bend was flattened to a single 0 → destination linear ramp.
  • GPIF reader: whammy bar. Both the GP7/8 WhammyBar* beat properties and the GP6 <Whammy> attribute form now land on BeatEffect.tremoloBar with the same multi-point curve; whammy gestures in .gp/.gpx files were previously dropped entirely.
  • GPIF reader: tremolo picking (<Tremolo>1/2|1/4|1/8</Tremolo> beat element → NoteEffect.tremoloPicking at eighth/16th/32nd strokes), trills (<Trill> note element, MIDI value converted to a fret on the note's string, 16th period) and accent flags (<Accent> bit field: 0x01 staccato, 0x04 heavy accent, 0x08 accent) are now read — all were previously dropped.
  • GPIF reader: grace notes. A <GraceNotes> beat's notes now become GraceEffects on the matching notes of the following real beat (fret, velocity, duration, on/before-beat placement, hammered/slid transition) instead of being skipped outright. Bar timing is unchanged (a grace beat still consumes no bar time).

0.3.1 #

  • GPIF reader: HarmonicType values are now matched case-insensitively — some GPIF writers emit artificial/natural lowercase, which previously dropped the harmonic entirely. A note with an enabled Harmonic property but no recognized type now falls back to a natural harmonic instead of none.
  • GPIF reader: the HarmonicFret touch-node distance is now read — artificial harmonics carry it in the new ArtificialHarmonic.fret field, tapped harmonics resolve it to their absolute tap fret (TappedHarmonic.fret), matching the GP4/5 readers.

0.3.0 #

  • Guitar Pro 6 (.gpx) support. parseGp now decodes the proprietary BCFS/BCFZ container (lib/src/gpx_reader.dart, bit-level LZ decompressor + sector filesystem, ported from alphaTab's GpxFileSystem) and feeds the inner score.gpif to the GPIF reader. New export: parseGpx.
  • GPIF reader: GP6 percussion notes (Element/Variation properties) are now mapped to GM drum keys, matching the GP7/8 articulation handling.

0.2.0 #

  • Guitar Pro 7/8 (.gp) support. parseGp now detects the zip-based .gp container by its bytes and parses the Content/score.gpif GPIF XML score into the same Song tree as the GP3–5 readers. Covered: metadata, tempo (incl. mid-song tempo automations, mapped to MixTableChange.tempo), per-track tuning/capo/GM program/volume/pan, mid-song sound switches (Sound automations → MixTableChange.instrument), percussion articulation mapping to GM drum keys, time signatures, repeats, section markers, anacrusis (pickup) bars, rests, ties, dead/ghost notes, palm mute, let ring, hammer-on/pull-off, slides, bends, harmonics, vibrato, slap/pop/tap and dynamics. Grace beats are skipped (they carry no bar time in GPIF).
  • New exports: parseGp7 (zip container) and parseGpif (bare score.gpif XML, useful for GP6 .gpx payloads unpacked by other means).
  • GP6 .gpx (BCFS/BCFZ container) is still not decoded, but is now rejected with a clear GpException instead of an "unsupported version" error.
  • New dependencies: archive, xml.

0.1.1 #

  • Added dartdoc comments across the public API (models.dart): every model class, enum, constructor and key field is now documented (≈99% coverage).
  • No functional changes.

0.1.0 #

  • Initial release.
  • Pure-Dart, read-only reader for Guitar Pro GP3, GP4 and GP5 files.
  • Parses into a SongTrackMeasureVoiceBeatNote tree.
  • Dart port of PyGuitarPro; the binary parsing logic mirrors it closely. Test fixtures and the reference dump are taken from the PyGuitarPro test suite.
0
likes
160
points
331
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Pure-Dart, read-only reader for Guitar Pro tablature files (GP3, GP4, GP5, GP6 .gpx and GP7/GP8 .gp). Parses them into a Song > Track > Measure > Voice > Beat > Note tree.

Repository (GitHub)
View/report issues

Topics

#guitar #tablature #music #parser

License

LGPL-3.0 (license)

Dependencies

archive, xml

More

Packages that depend on dart_gp_tab_reader