GITI
– Electric guitar music text format

Summary

This is a description/specification of GITI (variant E) – Guitar Instrument Text Interface (electric) – version 4.1: an electric guitar music notation text format.

GITI is concise, expressive, and usable by both humans and software. The format is in ASCII text (so also UTF-8). (File-name suffix could be: .giti or: .giti.txt .).

Traditional musical notation is powerful and general, but rather mechanically complex and demanding (despite its aesthetic recompense). Guitar tabs are better focused, but with obvious weaknesses and still awkward to read automatically and write manually. GITI follows the specialisation of tabs but flattens them into a more manipulable word-like form, and redeems the larger shortfall by adding a traditional kind of time information – all somewhat inspired by the event-packet basic form of MIDI. But it can also be rendered in familiar quasi-graphic tab form.

This version does not cover vibrato-bridge use or complex parallelism. The former might be an easy addition, but the latter would need more design and adjustment.

Contents

Piece

A whole Piece is a string of Sounds, Indicators, Annotations, and Comments. Sounds and indicators are blank-separated tokens, and annotations and comments are special lines.

As a brief overview, consider this ordinary tab:

Black Sabbath ‘Black Sabbath’, main riff

|--------|-------------|
|--------|-------------|
|--------|-------------|
|------5-|-------------|
|-5------|-4r1----4/10-|
|-3------|-------------|

In GITI it is (note first how the 3, 5, 4 fret-numbers are prepended with their string-number):

# Black Sabbath ‘Black Sabbath’, main riff
@ giti:e-4.1  tuning:std  tempo:3.603 

|4  63=55:2 ' 45 |
|   54r1:2**e  s:54/10:8s |

The format also allows degrees of simplification: omitting chords, ornament, articulation (second line), and time, down to only pitch (third line):

63=55:2  45  54r1:2**e  s:54/10:8s
63:2     45  54:1
63       45  54

And GITI can also be rendered back into tab-form including all its extras (actuation above, time below):

# Black Sabbath ‘Black Sabbath’, main riff
@ giti:e-4.1  tuning:std  tempo:3.603 

#=                  s     
#= |---------|-----------|
#= |---------|-----------|
#= |---------|-----------|
#= |-------5-|-----------|
#= |---5-----|-4r1--4/10-|
#= |---3-----|-----------|
#= |4: 2 ' 2   2**e 8s    

The following sections will explain the details.

Grammar

SBNF:

(piece
   (* (| content
         annotation
         metadata
         comment
         blankline)))

(content
   (, (* blank)
      (+ (| sound
            indicator)
         (+ blank))
      (* blank)
      newline))

Sound

A Sound has three parts:

  • Act – actuation related (starting the string vibrating),
  • Pitch – frequency related,
  • Time – duration related,

separated by colons. For example: pluck string 5 fret 4 with vibrato for a quarter-note:

p:54v:4

Or more complex: a unison-bend, into a slide:

p:314>2=212:4e  s:314/21
Simplification

Simplified uses can omit either or both act and time:

p:54:4
54:4
p:54
54

(Two other, secondary, sound forms – continuation and rest – will be described later in the time sub-section.).

Grammar

SBNF:

(sound
   (| ordinary
      continuation
      rest))

(ordinary
   (, (? (, act ":"))
      pitch
      (? (, ":" time))))

(continuation
   (, "&" (? (, ":" time))))

(rest
   (, "." (? (, ":" time))))

Act

An act has two parts: basic and extra:

Basics (optional, one of):

  • p – pluck (default)
  • h – hammer-on
  • u – pull-off
  • w – sweep-pick
  • s – sustain from previous sound
  • t – tap
  • i – tremolo picking
  • f – pluck with finger
  • b – pluck with plectrum backed by finger (quasi-harmonic)
  • e – pluck string end (very near bridge)
  • m – pluck string middle

Extras (optional, combination):

  • $ – damp/mute (either this or dead)
  • % – dead-note (either this or damp)
  • + – loud (either this or quiet)
  • - – quiet (either this or loud)
  • < – volume increase (either this or volume decrease)
  • > – volume decrease (either this or volume increase)

A sound can omit its act entirely, or either of its parts, which default to 'p' and none. (So if the act is omitted, the sound has the act 'p(none)'.).

Grammar

SBNF:

(act
   (, (? actbasic)
      (? actextra)))

(actbasic
   (| "p" "h" "u" "w" "s" "t" "i" "f" "b" "e" "m"))

(actextra
   (, (? (| "$" "%"))
      (? (| "+" "-"))
      (? (| "<" ">"))))

Pitch

A pitch has two parts: basic and extra:

Basics (required, one of):

  • string-fret:
    • 3 – first digit: string 1-9 (numbered thin to thick) (omitted in quasi-graphic rendering)
    • 10 – second digit and third if needed: fret 0-24 (leading 0 allowed)
  • score-note:
    • D#3 – letter (A-G uppercase) (and maybe # or b): note, digit: octave (0-8)

Extras (optional, combination):

  • chord sounds separated with ‘=
  • >2? – bend up, to 2 frets plus microtone above
  • <1 – bend down, from 1 frets above (i.e. pre-bend)
  • /15 – slide up, to fret 15
  • \8 – slide down, to fret 8
  • v – vibrato
  • r14 – trill, 1 fret above (- for below), with 4 sub-sounds (digits optional)
  • h – neck harmonic (touching over fret)
  • i – bridge harmonic (touching with picking thumb)

Chords have multiple pitchs separated by ‘=’:

p:63=55:4

(Pitchs do not have a default.).

Grammar

SBNF:

(pitch
   (+ (, pitchbasic
         pitchextra)
      "="))

(pitchbasic
   (| stringfret
      scorenote))

(stringfret
   (, int1-9 int0-24))

(scorenote
   (, (| "A" "B" "C" "D" "E" "F" "G")
      (? (| "#" "b"))
      int0-8))

(pitchextra
   (, (? (| (, ">" (| "?"
                      (, int1-5 (? "?"))))
            (, "<" (| "?"
                      (, int1-5 (? "?"))))
            (, "/" int0-24)
            (, "\\" int0-24)))
      (? (| "v"
            (, "r" (? (, (? "-")
                         int1-9
                         (? int1-9))))))
      (? (| "h"
            "i"))))

Time

A time has two parts: basic and extra:

Basics (optional):

  • 4 – number: lower part of the fraction of bar length, with three optional augmentations:
    • - – (prefix) continue from previous sound – right side of a tie
    • * or -8 – (suffix) extend by dot, or number fraction (repeatable)
    • - – (suffix) continue to next sound – left side of a tie

(E.g.: whole note = 1, 1/4 note = 4, 1/3 note = 3, dotted 1/4 note = 4-8, double-dotted 1/2 note = 2**, grace note = 0.)

Extras (optional, one of):

  • e – legato
  • s – staccato

There are two special sound forms: Continuation and Rest. Continuation sounds are merely a shorthand for a tied note, and have a ‘&’ and time, instead of act and pitch:

&:2

and Rests have a ‘.’ and time, instead of act and pitch:

.:2

A sound (including continuations and rests) can omit its time entirely, or either of its main two parts. Basic defaults to the previous sound's (a special, ‘carry-on’, default (with the ultimate default being the last annotation tempo fractional note)), and extra defaults to none (so the extra is not carried-on: it must always be explicitly stated).

Grammar

SBNF:

(time
   (, (? timebasic)
      (? timeextra)))

(timebasic
   (, (? "-")
      int0-999
      (| (* "*")
         (* (, "-" int1-999)))
      (? "-")))

(timeextra
   (| "e" "s"))

Indicator

Indicators are of three kinds: bar, segment, and tuplet. They are optional: all timing information is in sounds, but indicators help human users.

Bars can be indicated with lines, and optional suffix numbers for time division:

|3   |
|    |
||   ||

Segments of a bar can be indicated by a quote (to give a sort-of ersatz beaming):

|4  61:4 ' 61:4 ' 61:8 62:8 ' 61:4 | 

Tuplets can be indicated with parentheses and suffix number:

|4  .:2-4 ' (3 45:6  43:12 ) |

(NB: tuplet parentheses, like segments and bars, must be tokens – surrounded by blanks, not immediately abutting any other chars.).

Grammar

SBNF:

(indicator
   (| bar
      tuplet
      segment))

(bar
   (, (+ "|") (? int1-9)))

(tuplet
   (| (, (+ "(") (? int1-9))
      (+ ")")))

(segment
   (+ "'"))

Annotation

An Annotation is a line starting with @, containing three possible kinds of data: version, tuning, and/or tempo.

Version (giti), followed by:

  • e-4.1 – variant E, version 4.1

Tuning, followed by one of:

  • std – standard: E2 A2 D3 G3 B3 E4 (assuming C4 = 261.6Hz) (default)
  • -2? – -/+ semitones, and microtone
  • 6D2= ... – string, pitch (multiple separated by =)

Tempo, followed by either:

  • 3.603 – duration of a bar in seconds, to millisecs precision
  • 4=120 – fractional note having some BPM

For example:

@ giti:e-4.1  tuning:-2  tuning:6D2=5F2  tempo:1.824

Grammar

SBNF:

(annotation
   (, "@"
      (* blank)
      (* (| version
            tuning
            tempo)
         (+ blank))
      newline))

(version
   (, "giti:"
      (* non-blank)))

(tuning
   (, "tuning:"
      (| "std"
         (, (| "-" "+") int0-12 (? "?"))
         (+ (, int1-9
               (| "A" "B" "C" "D" "E" "F" "G")
               (? (| "#" "b"))
               (? (| "-" "+"))
               int0-8)
            "="))))

(tempo
   (, "tempo:"
      (| (, int0-99 "." int0-999)
         (, int1-99 "=" int1-999))))

Metadata

Metadata is a line starting with !, containing a name and a value (preferably according to Dublin Core).

Name – a single word (containing no space)

Value – arbitrary text (but space at ends is ignored)

Separated by an =, and with optional surrounding spaces.

For example:

! title = Opus 3 Concerto 4
! date = 2016-07-29
! language = en-GB

Grammar

SBNF:

(metadata
   (, "!"
      (* blank) name (* blank)
      =
      (* blank) value newline))

(name
   (+ non-blank))

(value
   (, non-blank
      (* non-newline)))

Comment

A Comment is a line starting with #, containing arbitrary text.

Grammar

SBNF:

(comment
   (, "#"
      (* non-newline)
      newline))

Tab

GITI translates very directly to familiar old quasi-graphic tab form, but it brings a more appreciable structure with the modularity of act, pitch, and time.

The original example:

# Black Sabbath ‘Black Sabbath’, main riff
@ giti:e-4.1  tuning:std  tempo:3.603 

|4  63=55:2 ' 45 | 54r1:2**e  s:54/10:8s |

can be rendered as:

# Black Sabbath ‘Black Sabbath’, main riff
@ giti:e-4.1  tuning:std  tempo:3.603 

#=                  s     
#= |---------|-----------|
#= |---------|-----------|
#= |---------|-----------|
#= |-------5-|-----------|
#= |---5-----|-4r1--4/10-|
#= |---3-----|-----------|
#= |4: 2 ' 2   2**e 8s    

Acts go along the top, times along the bottom, and pitches in the middle, with the first digit removed (and chords across lines). And as with word-form GITI, acts and times can be omitted to simplify down to pitches, and the main tab lines, alone. It is basically a 2D transpose, and a lossless conversion (in either direction).

Other details follow intuitively:

  • act is on the line immediately above the string-lines
  • rests must put their ‘.’ on the third string-line
  • bar indicator number precedes time items
  • time is on the line immediately below the string-lines
  • segment and tuplet indicators go between time items
  • lines start with ‘#=

Appendix

Tools

Validator and reformatter: OCaml source-code.

Changes

From GITI 4:

  • added: metadata lines

From GITI 3.3:

  • removed: act basic ‘d
  • removed: pitch basic relative
  • removed: pitch*
  • changed: pitch extra bends to ‘>’ and ‘<
  • changed: string numbering to reverse order
  • changed: act and time basics to be optional
  • changed: time extend and continue to sub-options of basic
  • changed: continuation to ‘&
  • added: act basic ‘f’, ‘b’, ‘e’, ‘m
  • added: act extra ‘%
  • added: pitch basic score-note
  • added: pitch extra microtonal bends
  • added: time basic prefix-continue ‘-
  • added: time basic dot extension ‘*
  • added: annotation tuning microtonal amounts ‘?’, ‘-’, ‘+
  • added: tab-form
  • clarified: sound part defaulting

Colophon

DC:`
   title:`GITI - Electric guitar music text format`
   creator:`Harrison Ainsworth / HXA7241`

   date:`2017-12-11`
   date:`2016-10-20`
   date:`2015-01-17`
   date:`2013-06-30`
   date:`2013-01-21`

   description:`Description/specification of GITI (variant E) version 4.1: an
      electric guitar music notation text format.`
   subject:`guitar, electric-guitar, music, notation, text, format`

   language:`en-GB`
   type:`technical article`
   identifier:`urn:uuid:629CB8C7-A007-470C-BA90-2DC6BD9BDA41`
   relation:`http://www.hxa.name/giti/`
   rights:`Creative Commons BY-SA 4.0 License.`
`