[LAU] [Fwd: tablature.ly]

From: Grammostola Rosea <rosea.grammostola@email-addr-hidden>
Date: Sat Apr 25 2009 - 13:21:36 EEST

attached mail follows:


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

% 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
}

\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 }
>>
}

_______________________________________________
Linux-audio-user mailing list
Linux-audio-user@email-addr-hidden
http://lists.linuxaudio.org/mailman/listinfo/linux-audio-user
Received on Sat Apr 25 16:15:01 2009

This archive was generated by hypermail 2.1.8 : Sat Apr 25 2009 - 16:15:01 EEST