Great job! Really appreciate it! \r
On Mon, May 4, 2009 at 9:47 AM, Marc Hohl <m...@hohlart.de> wrote: > 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.lyis > included, the stems etc. are gone > (as proposed by Grammostola Rosea) > > 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 > %%%% > %%%% source file of the GNU LilyPond music typesetter > %%%% > %%%% (c) 2009 Marc Hohl <m...@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 > } > } > > \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 } > >> > } > > > >
_______________________________________________ lilypond-user mailing list lilypond-user@gnu.org http://lists.gnu.org/mailman/listinfo/lilypond-user