Strings and tunings

id value
standard e, a, d g b e’
seven b,, e, a, d g b e’
dropD d, a, d g b e’
dropC c, g, c f a d’
openG d, g, d g b d’
openD d, a, d fis a d’
DADGAD d, a, d g a d’
lute e, a, d fis b e’
asus4 e, a, d e a e’
bass e,, a,, d, g,
bassdropD d,, a,, d, g,
bass5 b,,, e,, a,, d, g,
bass6 b,,, e,, a,, d, g, c
mandolin g d’ a’ e’’
banOG g’ d g b d’
banC g’ c g b d’
banModal g’ d g c’ d’
banOD a’ d fis a d’
banODm a’ d fis a d’
ban4OG g’ d g b d’
ban4C g’ c g b d’
ban4Modal g’ d g c’ d’
ban4OD a’ d fis a d’
ban4ODm a’ d fis a d’
uke g’ c’ e’ a’
ukeD a’ d’ fis’ b’
ukeTenor g c’ e’ a’
ukeBaritone d g b e’
violin g d’ a’ e’’
viola c g d’ a’
cello c, g, d a
doublebass e,, a,, d, g,

This section covers differently strung guitars and string instruments as well as non-standard tunings. Different tunings can be associated with individual music staves and are therefore specified when calling track.

Predefined tunings

The tuning argument to track accepts a variety of predefined commonly used string tunings, defaulting to standard. To the right is a table of predefined tunings for various instruments.


Arbitrary tunings

More importantly, track tuning can also be expressed using explicit pitch for completely arbitrary tunings with any number of strings (tabr technically supports up to seven strings as a general rule). While the predefined set is convenient, it is not necessary to use and this is where the use of alternate tunings really shines.

Any of the explicit tunings shown in the tunings table can be supplied to track exactly as shown instead of using the given names, or any other explicit tuning. Tuning can be provided using tick or integer octave numbering style.

When providing a tuning, names are checked first against the IDs in tunings. If there is no match, it is assumed to be an explicit tuning already. Some additional checks are performed to catch common user errors in entering a tuning.

Tuning for a track defaults to standard tuning on a six string guitar. The following calls are equivalent and result in the same explicit tuning stored in each of the the track tables.

p1 <- p("a", 1)
track(p1, tuning = "standard")
#> # A tibble: 1 x 6
#>   phrase       tuning         voice staff    ms_transpose ms_key
#>   <list>       <chr>          <int> <chr>           <int> <chr> 
#> 1 <S3: phrase> e, a, d g b e'     1 treble_8            0 <NA>
track(p1, tuning = "e2 a2 d g b e4")
#> # A tibble: 1 x 6
#>   phrase       tuning         voice staff    ms_transpose ms_key
#>   <list>       <chr>          <int> <chr>           <int> <chr> 
#> 1 <S3: phrase> e, a, d g b e'     1 treble_8            0 <NA>
track(p1, tuning = "e, a, d g b e'")
#> # A tibble: 1 x 6
#>   phrase       tuning         voice staff    ms_transpose ms_key
#>   <list>       <chr>          <int> <chr>           <int> <chr> 
#> 1 <S3: phrase> e, a, d g b e'     1 treble_8            0 <NA>

Number of strings

While tabr has a focus on guitar tablature, it does offer some built in support for string instruments more generally.

A convenient approach taken by tabr is that the number of strings an instrument has, and in turn the number of horizontal lines in a rendered tablature staff, is inferred directly from the explicit tuning.

Take the predefined bass tuning (standard bass tuning) or the explicit tuning it is converted to by track, which is e,, a,, d, g,. This is a tuning that specifies four strings. This is all tabr needs to know and pass along to LilyPond to yield a tablature staff with four staff lines as opposed to the standard six line staff used for typical guitar tabs.

The next example shows three different tablature staves: six string guitar in standard tuning, four string bass in standard tuning, and just for illustration, a one string instrument tuning to the fourth octave C note.

guitar <- tuplet("e, a, d g b e'", 4)
bass <- p("e,, a,, d, g,", 4)
one_string <- p("c' d' e' f'", 4)
tracks <- trackbind(track(guitar, music_staff = NA), track(bass, "bass", music_staff = NA), 
    track(one_string, "c'", music_staff = NA))
#> # A tibble: 3 x 7
#>   phrase       tuning         voice staff ms_transpose ms_key tabstaff
#>   <list>       <chr>          <int> <chr>        <int> <chr>     <int>
#> 1 <S3: phrase> e, a, d g b e'     1 <NA>             0 <NA>          1
#> 2 <S3: phrase> e,, a,, d, g,      1 <NA>             0 <NA>          2
#> 3 <S3: phrase> c'                 1 <NA>             0 <NA>          3
score(tracks) %>% tab("out.pdf")

Notice that for tunings other than standard guitar, the default is to show the note each string is tuned to at the start of the tablature staff. These can be turning off in score using string_names = FALSE. For example, when making a pure bass tab in standard tuning, you might opt to exclude this. There must still be some familiarity with the instrument of course. In the case of the made up one string instrument, no one would know which octave the open C belongs to, but the person with such an instrument would surely know what to expect.

Take another look at the same example, but this time including music staves. Because of the different octave ranges of the different instruments, it is best to use an appropriate clef. Recall the default (used for guitar) is treble_8 because guitar is a transposing instrument. Compare this with treble used for the third instrument that is in a higher octave. These different notations help prevent difficult to read transcriptions where the notes go far above or below the staff lines.

tracks <- trackbind(track(guitar), track(bass, "bass", music_staff = "bass_8"), 
    track(one_string, "c'", music_staff = "treble"))
#> # A tibble: 3 x 7
#>   phrase       tuning         voice staff    ms_transpose ms_key tabstaff
#>   <list>       <chr>          <int> <chr>           <int> <chr>     <int>
#> 1 <S3: phrase> e, a, d g b e'     1 treble_8            0 <NA>          1
#> 2 <S3: phrase> e,, a,, d, g,      1 bass_8              0 <NA>          2
#> 3 <S3: phrase> c'                 1 treble              0 <NA>          3
score(tracks) %>% tab("out.pdf")

Current limitations

Although tabr infers the an instrument’s number of strings from its tuning, there are limitations. Chord fretboard diagrams are only supported for guitar, six string guitar specifically. If you trying to pass four or five strings worth of information to chord_set for bass, ukulele or banjo for example, this will incompletely fill in a six string guitar fretboard diagram in the chord chart of the output. Similarly, if you trying to provide seven strings for a seven string guitar, the chord chart will show the additional note, but it will be floating to the side of the chart because a seventh string line is not will not be added to the diagram. Number of strings inferred from instrument tuning shows up in the tablature staff but does not generalize to fretboard diagrams.