tablature with lilypond

Do you typeset your scores on Linux? Share your thoughts, tips, and tricks here.

Moderators: MattKingUSA, khz

studio32

tablature with lilypond

Post by studio32 »

Last edited by studio32 on Sat Sep 06, 2008 12:24 pm, edited 3 times in total.
studio32

Post by studio32 »

Bends: http://lilypond.org/doc/v2.11/Documenta ... -and-doits

Slides: http://lilypond.org/doc/v2.11/Documenta ... #Glissando

or (for midi)

Code: Select all

 \acciaccatura {fis\5  } g4\5
Fake Hammer on with slurs:
http://lilypond.org/doc/v2.11/Documenta ... lurs#Slurs

Harmonic and dampened notes
http://lilypond.org/doc/v2.11/Documenta ... ened-notes

Parentheses
http://kainhofer.com/~lilypond/Document ... arentheses

Transparant stems and beams:

Code: Select all

\override TabStaff.Stem #'transparent = ##t %% Makes stems transparent
\override TabStaff.Beam #'transparent = ##t %% Makes beams transparent
Invisible Dots in tablature

Code: Select all

\override TabStaff.Dots #'transparent = ##t
Invisible slurs in the tablature

use \tag , see also the second example below....
http://kainhofer.com/~lilypond/Document ... Using-tags

examples
Check: http://draft.wikilily.org/wiki/index.php/Signe for an example.
or: http://12stringmusings.blogspot.com/200 ... ogram.html
studio32

Re: tablature with lilypond

Post by studio32 »

There are some new tablature functions in 2.12:

http://lilypond.org/doc/v2.12/Documenta ... /NEWS.html
http://lilypond.org/doc/v2.12/Documenta ... fe648fb.ly

Sponsored by Mike Amundsen
studio32

Re: tablature with lilypond

Post by studio32 »

Anyone who would like to be involved in documenting/discussing features missing from LilyPond's guitar tab support, please send me an off-list email at the following address:

dstocker<at>thenotesetter.com

When we have a list of around 10-15 specific items, we can then prioritize and start to talk about sponsorship of features and then send a proposal to -devel.

Thanks,

Dave
User avatar
nathan
Site Admin
Posts: 405
Joined: Mon Dec 11, 2006 8:53 pm
Location: Phoenix, AZ
Been thanked: 5 times
Contact:

Re: tablature with lilypond

Post by nathan »

Thanks for all this info...this is a great reference.
studio32

Re: tablature with lilypond

Post by studio32 »

nathan wrote:Thanks for all this info...this is a great reference.
I just hope more people will use lilypond for tablature and that lilypond will be improved for lilypond ;)

Check the Lilypond Snippet Repository (LSR) for example: http://lsr.dsi.unimi.it/LSR/Search?q=tab
User avatar
nathan
Site Admin
Posts: 405
Joined: Mon Dec 11, 2006 8:53 pm
Location: Phoenix, AZ
Been thanked: 5 times
Contact:

Re: tablature with lilypond

Post by nathan »

Cool. I actually didn't know Lily had this capability when it comes to tabs.
studio32

Re: tablature with lilypond

Post by studio32 »

I'm also discussing how to improve the Frescobaldi templates for (notation and) tablature, for guitar and bass.
studio32

Re: tablature with lilypond

Post by studio32 »

It's now possible in Frescobaldi svn to include predefined fret diagrams into the score
studio32

Re: tablature with lilypond

Post by studio32 »

(lilypond user mailinglist: tablature.ly)
Hello tablature users*,

after some days of struggling with lilypond's internals, I have created a file tablature.ly
which supports:

1) two commands to switch between the display style:
\tabNumbersOnly shows only the mubers,
\tabFullNotation shows up everything (as it is the default in \TabVoice upto now)

2) two commands for the possible clefs:
\calligraphicTabClef #<tuning>
\sansSerifTabClef #<tuning>
(I didn't like "modern" or "old" clef, so I used commands which describe the apperance
of the clefs).
The sans serif clef is available for 4 to 7 strings. It internally sets
\TabStaff.stringTunings to <tuning>.

3) some more tunings are defined:
guitar-seven-string-tuning
guitar-drop-d-tuning bass-four-string-tuning bass-drop-d-tuning bass-five-string-tuning bass-six-string-tuning
(yes I know, the already defined "bass-tuning" is the same as my "bass-four-string-tuning", but
as I write music for various basses, this is easier to read at first glance.)

4) commandos for palm mute playing and dead notes are supported (palm mute is not a tablature-specific
issue, but as electric guitar players use tablature and often play palm mute, I think this is ok).
At first I thought of using \x for dead notes, but in other threads \x is used for almost everything,
so I leave it to the user to say x = \deadNotes and use \x for faster typing myriads of dead notes :-)

I post this along with a test file, so you can check this out.

*Carl, which isn't really a tablature user, has given me a lot of support an insight to lilypond,
and he proposed to include tablature.ly in future releases of lilypond, so this would be the place to
go for further development (bendings, etc.). Establishing \tabNumbersOnly as a standard would mean to
break with older versions, but as it is a single command, this should not be considered as a serious
drawback.

As there are more people invoved in developing tablature extensions for lilypond, I send tablature.ly
to this list for testing purposes, so changes, corrections etc. could be discussed before establishing
the file in future versions. As I said before, it is just a starting point, any suggestions, improvements
etc. are welcome. Are there other tunings we should consider being defined internally?

Yet again, I would like to thank Carl for his great help and patience, and as far as I can see now,
making contributions to lilypond is easier than one might think, there are a lot of people outside
willing to help you, if you are willing to bring lilypond further on, so give it a try!

Greetings,

Marc
tablature.ly:

Code: Select all

% tablature.ly

% these definitions will be moved to scm/output-lib.scm
#(define-public guitar-seven-string-tuning '(4 -1 -5 -10 -15 -20 -25))
#(define-public guitar-drop-d-tuning       '(4 -1 -5 -10 -15 -22))
#(define-public bass-four-string-tuning    '(-17 -22 -27 -32))
#(define-public bass-drop-d-tuning         '(-17 -22 -27 -34))
#(define-public bass-five-string-tuning    '(-17 -22 -27 -32 -37))
#(define-public bass-six-string-tuning     '(-12 -17 -22 -27 -32 -37))



% some publications use the triangled note head 
% for palm mute, so here we go:
palmMuteOn = { \set shapeNoteStyles = #'#(do do do do do do do ) }
palmMuteOff = { \unset shapeNoteStyles }
% for single notes (or groups of notes within { ...} :
palmMute =  #(define-music-function (parser location note) (ly:music?)
      #{ 
         \set shapeNoteStyles = #'#(do do do do do do do )
         $note
         \unset shapeNoteStyles
      #})

% x-tab-format uses a "x" instead of the fret number:
#(define (x-tab-format str context event)
    (make-whiteout-markup
      (make-vcenter-markup
        (markup #:musicglyph "noteheads.s2cross"))))

% dead notes are marked with a cross-shape note head,
% both in normal notation and in tablature:
deadNotesOn = { 
   \override NoteHead #'style = #'cross
   \set tablatureFormat = #x-tab-format
}
deadNotesOff = {
   \unset tablatureFormat
   \revert NoteHead #'style
}
% for single notes or groups of notes within {...}:
deadNotes = #(define-music-function (parser location notes) (ly:music?)
   #{
      \override NoteHead #'style = #'cross
      \set tablatureFormat = #x-tab-format
      $notes
      \unset tablatureFormat
      \revert NoteHead #'style
   #})

% define sans serif-style tab-Clefs according to
% http://lsr.dsi.unimi.it/LSR/Item?id=323
% for 4, 5, 6 and 7 strings

#(define-markup-command (customTabClef layout props tuning) (pair?)
    (let* ((num-strings (length tuning))
           ;; the number of strings has to be in 4...7
           (num-strings (cond ((< num-strings 4) 4)
                              ((> num-strings 7) 7)
                              (else num-strings)))
           (raise-value (- (* num-strings 0.4) 0.9))
           (font-size (- (* num-strings 1.5) 7))
           (base-skip (cond ((= 4 num-strings) 1.55)
                            ((= 5 num-strings) 1.84)
                            ((= 6 num-strings)  2.00)
                            ((= 7 num-strings) 2.08)))
           (new-props (cons (list
                              '(font-family . sans)
                              (cons 'baseline-skip base-skip))
                             props)))
       (interpret-markup layout new-props
         (markup #:raise raise-value #:bold #:fontsize font-size
                #:column ("T" "A" "B")))))

% Wrappers for the different clefs
% the argument is the string-tuning, which is automatically set.
sansSerifTabClef = #(define-music-function (parser location tuning) (pair?)
   #{
      \override TabStaff.Clef #'stencil = #ly:text-interface::print
      \override TabStaff.Clef #'text = \markup \customTabClef $tuning
      \set TabStaff.stringTunings = $tuning
   #})

calligraphicTabClef = #(define-music-function (parser location tuning) (pair?)
   #{
      \revert TabStaff.Clef #'stencil
      \set TabStaff.stringTunings = $tuning
   #})

% commands for switching between tablature with numbers only...
tabNumbersOnly = {
   % no time signature
   \override TabStaff.TimeSignature #'stencil = ##f
   % no stems, beams, dots, ties and slurs
   \override TabVoice.Stem #'stencil = ##f
   \override TabVoice.Beam #'stencil = ##f
   \override TabVoice.Dots #'stencil = ##f
   \override TabVoice.Tie  #'stencil = ##f
   \override TabVoice.Slur #'stencil = ##f
   % no tuplet stuff
   \override TabVoice.TupletBracket #'stencil = ##f
   \override TabVoice.TupletNumber #'stencil = ##f
   % no dynamic signs, text spanners etc.
   \override DynamicText #'transparent = ##t 
   \override DynamicTextSpanner #'stencil = ##f
   \override TextSpanner #'stencil = ##f
   \override Hairpin #'transparent = ##t
   % no rests
   \override TabVoice.Rest #'stencil = ##f
   \override TabVoice.MultiMeasureRest #'stencil = ##f
   % no markups
   \override TabVoice.Script #'stencil = ##f
   \override TabVoice.TextScript #'stencil = ##f
}
% and the full notation
tabFullNotation = {
   % time signature
   \revert TabStaff.TimeSignature #'stencil
   % stems, beams, dots
   \revert TabVoice.Stem #'stencil
   \revert TabVoice.Beam #'stencil
   \revert TabVoice.Dots #'stencil
   \revert TabVoice.Tie #'stencil
   \revert TabVoice.Slur #'stencil
   % tuplet stuff
   \revert TabVoice.TupletBracket #'stencil
   \revert TabVoice.TupletNumber #'stencil
   % dynamic signs
   \revert DynamicText #'transparent
   \override DynamicTextSpanner #'stencil = ##f
   \revert TabVoice.DynamicTextSpanner #'stencil
   \revert TabVoice.Hairpin #'transparent
   % rests
   \revert TabVoice.Rest #'stencil
   \revert TabVoice.MultiMeasureRest #'stencil
   % markups
   \revert TabVoice.Script #'stencil
   \revert TabVoice.TextScript #'stencil
}


tablature-test1.ly

Code: Select all

\version "2.12.2"
\include "tablature.ly"

\markup {First, a lot of stuff as it is displayed both in notation and in tablature.}

alotofstuff = { 
   \time 3/4
   c4^"test" d( e) 
   f4\f g a^\fermata
   c8\< c16 c ~ c2\!
   c'2.
   \mark \default
   R2.
   r4 d4 r8 r
   \times 3/4 { b4 c d c }
   c4. d-_( e\varcoda)
   ->f g~ a\prall g\thumb e-. f-. g-.
   \times 3/4 { b4 c d c }
   \bar "|."
}

\score {
   <<
      \new Staff \alotofstuff
      \new TabStaff \alotofstuff
   >>
}

\markup{When we invoke tabNumbersOnly, it looks better.}

\score {
   <<
      \new Staff \alotofstuff
      \new TabStaff   { \tabNumbersOnly \alotofstuff }
   >>
}

\markup{ tablature.ly supports an easy way to mark notes as played palm mute-style...}

palmmute = \relative c, {
    \time 4/4
    e8^\markup { \musicglyph #"noteheads.u2do"  = palm mute } \palmMuteOn e e \palmMuteOff  e e  \palmMute e e e
    e8 \palmMute { e e e } e e e e 
    \palmMuteOn
    < e b' e>8 e e e <e b' e>2
    \bar "|."
}

\score {
   <<
      \new Staff { \clef "G_8" \palmmute }
      \new TabStaff  { \tabNumbersOnly 
                       \calligraphicTabClef #guitar-tuning
                       \palmmute }
   >>
}

\markup {... or dead notes:}

deadnotes = \relative c,, {
   e8. \deadNotesOn e16 \deadNotesOff g4 a b
   e8. \deadNotes e16 g4 a b
   e,4. \deadNotes { e8 e e } e4
   \bar "|."
}

\score {
   <<
      \new Staff { \clef "bass_8" \deadnotes }
      \new TabStaff  { \tabNumbersOnly 
                       \sansSerifTabClef #bass-four-string-tuning
                       \deadnotes }
   >>
}

\markup { The new sansSerifTab-Clef supports tablatures from 4 to 7 strings.}
% some stuff 
bass = \relative c,, {
   e4 g a b
   b4 f g d'
   \bar "|."
}

% four strings, calculated clef
\score {
   <<
      \new Staff { \mark \markup{4 strings}
                   \clef "bass_8" \bass }
      \new TabStaff   { \tabNumbersOnly 
                        \sansSerifTabClef #bass-four-string-tuning
                        \bass }
   >>
}

% five strings, calculated clef
\score {
   <<
      \new Staff { \mark \markup{5 strings}
                   \clef "bass_8" \bass }
      \new TabStaff   { \tabNumbersOnly 
                        \sansSerifTabClef #bass-five-string-tuning
                        \bass }
   >>
}

guitar = \relative c {
   c4 d e f
   g4 a b c 
   \bar "|."
}

% six strings, calculated clef
\score {
   <<
      \new Staff { \mark \markup{6 strings}
                   \clef "G_8" \guitar }
      \new TabStaff   { \tabNumbersOnly 
                        \sansSerifTabClef #guitar-tuning
                        \guitar }
   >>
}

% seven strings, calculated clef
\score {
   <<
      \new Staff { \mark \markup{7 strings}
                   \clef "G_8" \guitar }
      \new TabStaff   { \tabNumbersOnly 
                        \sansSerifTabClef #guitar-seven-string-tuning
                        \guitar }
   >>
}
(save files with *.ly extension)

Happy testing and report issues on the lilypond user mailinglist :)
studio32

Re: tablature with lilypond

Post by studio32 »

New update
Hello tablature users,

after sending my first version of a tablature.ly-file, I got a lot of positive resonse,
and a lot more of corrections/improvements. Thank you all!

Now, there is a (hopefully) better file which includes the following features/changes:

1) the palmmute/deadnote stuff is the same, only the code has been simplified, thanks to Neil's proposals

2) the \tabNumbersOnly settings are now the default, so when tablature.ly is included, the stems etc. are gone


3) the modern tab clef is now available as any other clef by typing \clef "moderntab"

To implement (3), there is another function necessary, which will be in future releases of lilypond, but
for now, you have to insert the following lines into scm/parser-clef.scm:

;; a function to add new clefs at runtime
(define-public (add-new-clef clef-name clef-glyph clef-position octavation c0-position)
"Append the entries for a clef symbol to supported-clefs and c0-pitch-alist"
(set! supported-clefs
(acons clef-name (list clef-glyph clef-position octavation) supported-clefs))
(set! c0-pitch-alist
(acons clef-glyph c0-position c0-pitch-alist)))

Otherwise the new clef definition won't work.

Thanks again to Carl and Neil for their help!

There is one problem now with the settings in tablature.ly: I simply made ties transparent, but
then, the fret number appears as it were a note to be played. Hopefully somewhere in the future,
I will find a possibility to let the fret number disappear, but as David Stocerk pointed out,
some cases had to be distinguished (the following is a quote from a former posting from David):

(quote...)

It should be noted that a publishing standard is when there is a Note Staff + Tab Staff, tied notes (that is, the notes that are 'held') in the Tab Staff are indicated by parenthesizing the tab number(s). There are several conventions that are related to tied notes in a Notes+Tab situation:

* Tab numbers that are 'tied to' are sometimes parenthesized,
sometimes hidden.
* In the case that 'tied to' notes are hidden, a parenthesized tab
number is usually forced if the 'tied to' note is at the beginning
of a line (i.e., the note is tied over a system break).
* Likewise, parenthesized tab numbers are forced when a 'tied to'
note begins a 2nd ending or Coda section.
* A parenthesized chord in the Tab Staff are indicated with a single
pair of parentheses surrounding all of the notes in the chord (as
opposed to as single pair of parentheses around each individual
note in the chord).

(...quote)

So this seems to be a difficult task, but somehow to manage.

Marc

tablature.ly

Code: Select all


%%%% tablature.ly
%%%%
%%%% source file of the GNU LilyPond music typesetter
%%%%
%%%% (c) 2009 Marc Hohl <marc@hohlart.de>


% some publications use the triangled note head
% for palm mute, so here we go:
palmMuteOn = { \set shapeNoteStyles = #(make-vector 7 do) }
palmMuteOff = { \unset shapeNoteStyles }
% for single notes (or groups of notes within { ...} :
palmMute =  #(define-music-function (parser location notes) (ly:music?)
     #{
        \palmMuteOn $notes \palmMuteOff
     #})

% x-tab-format uses a "x" instead of the fret number:
#(define (x-tab-format str context event)
   (make-whiteout-markup
     (make-vcenter-markup
       (markup #:musicglyph "noteheads.s2cross"))))

% dead notes are marked with a cross-shape note head,
% both in normal notation and in tablature:
deadNotesOn = {
  \override NoteHead #'style = #'cross
  \set tablatureFormat = #x-tab-format
}
deadNotesOff = {
  \unset tablatureFormat
  \revert NoteHead #'style
}
% for single notes or groups of notes within {...}:
deadNotes = #(define-music-function (parser location notes) (ly:music?)
  #{
     \deadNotesOn  $notes \deadNotesOff
  #})

% definitions for the "moderntab" clef:
% the "moderntab" clef will be added to the list of known clefs,
% so it can be used as any other clef:
%
% \clef "moderntab"
%
#(add-new-clef "moderntab" "markup.moderntab" 0 0 0)

% this function decides which clef to take
#(define (clef::print-modern-tab-if-set grob)
   (let* ((glyph (ly:grob-property grob 'glyph)))
         ;; which clef is wanted?
         (if (string=? glyph "markup.moderntab")
             ;; if it is "moderntab", we'll draw it
             (let* ((staff-symbol (ly:grob-object grob 'staff-symbol))
                    (line-count   (ly:grob-property staff-symbol 'line-count))
                    (staff-space  (ly:grob-property staff-symbol 'staff-space 1)))
                   (grob-interpret-markup grob (make-customTabClef-markup line-count staff-space)))
             ;; otherwise, we simply use the default printing routine
             (ly:clef::print grob))))

% define sans serif-style tab-Clefs as a markup:
#(define-markup-command (customTabClef layout props num-strings staff-space) (integer? number?)
   (define (square x) (* x x))
   (let* ((scale-factor (/ staff-space 1.5))
          (font-size (- (* num-strings 1.5 scale-factor) 7))
          (base-skip (* (square (+ (* num-strings 0.195) 0.4)) scale-factor)))
      (interpret-markup layout props
        (markup #:vcenter #:bold
                #:override (cons 'font-family 'sans)
                #:fontsize font-size
                #:override (cons 'baseline-skip base-skip)
                #:left-align
                #:center-column ("T" "A" "B")))))

% commands for switching between tablature with numbers only...
tabNumbersOnly = {
  % no time signature
  \override TabStaff.TimeSignature #'stencil = ##f
  % no stems, beams, dots, ties and slurs
  \override TabVoice.Stem #'stencil = ##f
  \override TabVoice.Beam #'stencil = ##f
  \override TabVoice.Dots #'stencil = ##f
  \override TabVoice.Tie  #'stencil = ##f
  \override TabVoice.Slur #'stencil = ##f
  % no tuplet stuff
  \override TabVoice.TupletBracket #'stencil = ##f
  \override TabVoice.TupletNumber #'stencil = ##f
  % no dynamic signs, text spanners etc.
  \override DynamicText #'transparent = ##t
  \override DynamicTextSpanner #'stencil = ##f
  \override TextSpanner #'stencil = ##f
  \override Hairpin #'transparent = ##t
  % no rests
  \override TabVoice.Rest #'stencil = ##f
  \override TabVoice.MultiMeasureRest #'stencil = ##f
  % no markups
  \override TabVoice.Script #'stencil = ##f
  \override TabVoice.TextScript #'stencil = ##f
}
% and the full notation
tabFullNotation = {
  % time signature
  \revert TabStaff.TimeSignature #'stencil
  % stems, beams, dots
  \revert TabVoice.Stem #'stencil
  \revert TabVoice.Beam #'stencil
  \revert TabVoice.Dots #'stencil
  \revert TabVoice.Tie #'stencil
  \revert TabVoice.Slur #'stencil
  % tuplet stuff
  \revert TabVoice.TupletBracket #'stencil
  \revert TabVoice.TupletNumber #'stencil
  % dynamic signs
  \revert DynamicText #'transparent
  \override DynamicTextSpanner #'stencil = ##f
  \revert TabVoice.DynamicTextSpanner #'stencil
  \revert TabVoice.Hairpin #'transparent
  % rests
  \revert TabVoice.Rest #'stencil
  \revert TabVoice.MultiMeasureRest #'stencil
  % markups
  \revert TabVoice.Script #'stencil
  \revert TabVoice.TextScript #'stencil
}

% the defaults for tablature:
% the clef handler will be included and the tablature
% is displayed \tabNumbersOnly-style:
\layout {
  \context {
     \TabStaff
     % the clef handler
     \override Clef #'stencil = #clef::print-modern-tab-if-set
     \override TimeSignature #'stencil = ##f
  }
  \context {
     \TabVoice
     \override Stem #'stencil = ##f
     \override Beam #'stencil = ##f
     \override Dots #'stencil = ##f
     \override Tie  #'stencil = ##f
     \override Slur #'stencil = ##f
     \override TupletBracket #'stencil = ##f
     \override TupletNumber #'stencil = ##f
     \override DynamicText #'transparent = ##t
     \override DynamicTextSpanner #'stencil = ##f
     \override TextSpanner #'stencil = ##f
     \override Hairpin #'transparent = ##t
     \override Rest #'stencil = ##f
     \override MultiMeasureRest #'stencil = ##f
     \override Script #'stencil = ##f
     \override TextScript #'stencil = ##f
  }
}
tablature-test.ly

Code: Select all

\version "2.12.2"
\include "tablature.ly"

% for testing purposes only; in newer versions of lilypond, they will be
% already defined:
#(define-public guitar-seven-string-tuning '(4 -1 -5 -10 -15 -20 -25))
#(define-public guitar-drop-d-tuning       '(4 -1 -5 -10 -15 -22))
#(define-public bass-four-string-tuning    '(-17 -22 -27 -32))
#(define-public bass-drop-d-tuning         '(-17 -22 -27 -34))
#(define-public bass-five-string-tuning    '(-17 -22 -27 -32 -37))
#(define-public bass-six-string-tuning     '(-12 -17 -22 -27 -32 -37))

\markup{tablature.ly - second attempt.}

alotofstuff = {
  \time 3/4
  c4^"test" d( e)
  f4\f g a^\fermata
  c8\< c16 c ~ c2\!
  c'2.
  \mark \default
  R2.
  r4 d4 r8 r
  \times 3/4 { b4 c d c }
  c4. d-_( e\varcoda)
  ->f g~ a\prall g\thumb e-. f-. g-.
  \times 3/4 { b4 c d c }
  \bar "|."
}

\score {
  <<
     \new Staff { \clef "G_8"  \alotofstuff }
     \new TabStaff { \clef "tab" \alotofstuff }
  >>
}

\markup{When we invoke tabNumbersOnly, it looks better.}

\score {
  <<
     \new Staff { \clef "G_8" \alotofstuff }
     \new TabStaff   { \tabNumbersOnly \alotofstuff }
  >>
}

\markup{ tablature.ly supports an easy way to mark notes as played palm mute-style...}

palmmute = \relative c, {
   \time 4/4
   e8^\markup { \musicglyph #"noteheads.u2do"  = palm mute } \palmMuteOn e e \palmMuteOff  e e  \palmMute e e e
   e8 \palmMute { e e e } e e e e
   \palmMuteOn
   < e b' e>8 e e e <e b' e>2
   \bar "|."
}

\score {
  <<
     \new Staff { \clef "G_8" \palmmute }
     \new TabStaff  { \clef "moderntab"
                      \palmmute }
  >>
}

\markup {... or dead notes:}

deadnotes = \relative c,, {
  e8. \deadNotesOn e16 \deadNotesOff g4 a b
  e8. \deadNotes e16 g4 a b
  e,4. \deadNotes { e8 e e } e4
  \bar "|."
}

\score {
  <<
     \new Staff { \clef "bass_8" \deadnotes }
     \new TabStaff  { \set TabStaff.stringTunings =  #bass-four-string-tuning
                      \clef "moderntab"
                      \deadnotes }
  >>
}

\markup { The new sansSerifTab-Clef supports tablatures from 4 to 7 strings.}
% some stuff
bass = \relative c,, {
  e4 g a b
  b4 f g d'
  \bar "|."
}

\score {
  <<
     \new Staff { \mark \markup{4 strings}
                  \clef "bass_8" \bass }
     \new TabStaff   { \set TabStaff.stringTunings =   #bass-four-string-tuning
                       \bass }
  >>
}

% five strings, calculated clef
\score {
  <<
     \new Staff { \mark \markup{5 strings}
                  \clef "bass_8" \bass }
     \new TabStaff   { \set TabStaff.stringTunings =  #bass-five-string-tuning
                       \bass }
  >>
}

guitar = \relative c {
  c4 d e f
  g4 a b c
  \bar "|."
}

% six strings, calculated clef
\score {
  <<
     \new Staff { \mark \markup{6 strings}
                  \clef "G_8" \guitar }
     \new TabStaff   { \set TabStaff.stringTunings = #guitar-tuning
                       \guitar }
  >>
}

% seven strings, calculated clef
\score {
  <<
     \new Staff { \mark \markup{7 strings}
                  \clef "G_8" \guitar }
     \new TabStaff   { \clef "moderntab"
                       \set TabStaff.stringTunings = #guitar-seven-string-tuning
                       \guitar }
  >>
}

% seven strings, calculated clef
\score {
  <<
     \new Staff { \mark \markup{7 strings, staff space 1.2}
                  \clef "G_8" \guitar }
     \new TabStaff   { \clef "moderntab" \override TabStaff.StaffSymbol #'staff-space = #1.2
                       \set TabStaff.stringTunings =  #guitar-seven-string-tuning
                       \guitar }
  >>
}

happy testing, or wait for the next lilypond release :)
studio32

Re: tablature with lilypond

Post by studio32 »

studio32

Re: tablature with lilypond

Post by studio32 »

Here is an example of the tablature test file:

http://rapidshare.com/files/236300960/t ... t.pdf.html
studio32

Re: tablature with lilypond

Post by studio32 »

I think those tablature things I posted above are in the dev version of Lilypond.

Another step forward is taken by D. Stocker, he has posted a proposal for bends.

See lilypond user mailinglist archive, message "take 1"
Post Reply