I've now got version of the piece with no warnings or errors (attached), and it
looks perfect.
I had to break some of the parts up so I could handle overlaps between the guitar parts
and the melody, and while still using the "skip-of-length" constructs as much
as possible.
I don't know if there is a cleaner way to handle the overlaps, but I'm open to
suggestions. Also, is there a way to do math on the skipped lengths?
I could not figure out the scheme syntax for that yet, but if there was a way to say
something like "#(skip-of-length melody_notes) minus one measure", that would
be helpful.
Steve
\version "2.23.9" % absolutely necessary!
\header {
snippet-title = "Guitar string bending notation"
snippet-author = "Marc Hohl"
snippet-source = "http://code.google.com/p/lilypond/issues/detail?id=1196"
snippet-description = \markup {
This snippet allows to typeset bend symbols -
typically used on guitar - on Staff and TabStaff.
While issue 1196 aims to create a specific engraver
for bends, this snippet leverages the slur engraver.
}
% add comma-separated tags to make searching more effective:
tags = "guitar, bend, string bending"
% is this snippet ready? See meta/status-values.md
status = "buggy"
}
% TODO:
% - draw dashed line for \holdBend
% - enable consecutive bend ups
% - simplify \preBend and \holdBend usage
% - ...
#(display "\nbend.ly ─ 2011-03-11 (revised: 2013-07-16)\n\n")
%%% sizes and values (to be changed/adapted):
#(define bend-line-thickness 0.1)
#(define bend-arrow-curvature-factor 0.35)
#(define y-distance-from-tabstaff-to-arrow-tip 2.75)
#(define consecutive-bends-arrow-height 2.75)
#(define bend-arrowhead-height 1.25)
#(define bend-arrowhead-width 0.8)
#(define y-distance-from-staffline-to-arrow 0.35)
%%% internal commands
#(define (quarterdiff->string quarterdiff)
(let ((wholesteps (floor (/ quarterdiff 4))))
(string-append (case wholesteps
((0) "")
(else (number->string wholesteps)))
(case (modulo quarterdiff 4)
((1) "¼")
((2) "½")
((3) "¾")
(else "")))))
%%% markup commands
#(define-markup-command (pointedSlur layout props thickness bx by mx my ex ey)
(number? number? number? number? number? number? number?)
(interpret-markup layout props
(markup #:postscript
(ly:format "~f setlinewidth
~f ~f moveto
~f ~f lineto
~f ~f lineto stroke" thickness bx by mx my ex ey))))
#(define-markup-command (drawBendArrow layout props
thickness begin-x middle-x end-x begin-y end-y
arrow-lx arrow-rx arrow-y outstring)
(number? number? number? number? number? number? number? number? number?
string?)
(interpret-markup layout props
(markup #:postscript
(ly:format "~f setlinewidth
~f ~f moveto
~f ~f lineto
~f ~f ~f ~f ~f ~f curveto
stroke
~f ~f moveto
~f ~f lineto
~f ~f lineto
closepath fill"
thickness
begin-x begin-y
middle-x begin-y
middle-x begin-y end-x begin-y end-x arrow-y
arrow-lx arrow-y
end-x end-y
arrow-rx arrow-y)
#:hspace 0
#:translate (cons (- end-x 1.2) (+ end-y 0.5))
#:fontsize -2
#:bold
;; changed:
;#:center-column (outstring)
outstring
)))
#(define-markup-command (drawHoldBendWithArrow layout props
thickness begin-x begin-y end-x end-y arrow-lx
arrow-rx arrow-y outstring)
(number? number? number? number? number? number? number? number? string?)
(interpret-markup layout props
(markup #:postscript
(ly:format "~f setlinewidth
~f ~f moveto
~f ~f lineto
stroke
~f ~f moveto
~f ~f lineto
~f ~f lineto
closepath fill
~f ~f moveto
~f ~f lineto
stroke"
thickness
begin-x begin-y
begin-x arrow-y
arrow-lx arrow-y
begin-x end-y
arrow-rx arrow-y
begin-x end-y
end-x end-y)
#:hspace 0
#:translate (cons (- begin-x 1.2) (+ end-y 0.5))
#:fontsize -2
;; Why does it work here??
#:bold #:center-column (outstring))))
#(define-markup-command (drawHoldBendArrowOnly layout props
thickness begin-x begin-y end-x end-y arrow-lx
arrow-rx arrow-y outstring)
(number? number? number? number? number? number? number? number? string?)
(interpret-markup layout props
(markup #:postscript
(ly:format "~f setlinewidth
~f ~f moveto
~f ~f lineto
stroke
~f ~f moveto
~f ~f lineto
~f ~f lineto
closepath fill"
thickness
begin-x begin-y
begin-x arrow-y
arrow-lx arrow-y
begin-x end-y
arrow-rx arrow-y)
#:hspace 0
#:translate (cons (- begin-x 1.2) (+ end-y 0.5))
#:fontsize -2
;; Why does it work here??
#:bold #:center-column (outstring))))
%% The markup-command 'draw-dashed-line' was implemented with version 2.17.x
%% TODO: use 'draw-dashed-line' instead. See also 'tie::draw-hold-bend' below.
#(define-markup-command (drawDashedLine layout props
thickness begin-x end-x line-y)
(number? number? number? number?)
;; TODO: draws a full line instead of a dashed line
(interpret-markup layout props
(markup #:postscript
(ly:format "~f setlinewidth
~f ~f moveto
~f ~f lineto
stroke"
thickness begin-x line-y end-x line-y))))
%%% callbacks
#(define (slur::draw-pointed-slur grob)
(let* ((control-points (ly:grob-property grob 'control-points))
(direction (ly:grob-property grob 'direction))
(first-point (car control-points))
(second-point (cadr control-points))
(third-point (caddr control-points))
(forth-point (cadddr control-points))
(first-x (+ (car first-point) 0.125)) ;; due to David's proposals
(first-y (cdr first-point))
(second-x (car second-point))
(second-y (cdr second-point))
(third-x (car third-point))
(third-y (cdr third-point))
(forth-x (- (car forth-point) 0.125))
(forth-y (cdr forth-point))
(middle-x (/ (+ third-x second-x) 2))
(middle-y (/ (+ third-y second-y) 2)))
(grob-interpret-markup grob
(make-pointedSlur-markup bend-line-thickness
first-x first-y middle-x middle-y forth-x forth-y))))
#(define (slur::draw-bend-arrow grob)
(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))
(left-bound (ly:spanner-bound grob LEFT))
(right-bound (ly:spanner-bound grob RIGHT))
(left-tab-note-head (ly:grob-property left-bound 'cause))
(right-tab-note-head (ly:grob-property right-bound 'cause))
(control-points (ly:grob-property grob 'control-points))
(left-point (car control-points))
;;changed: cadddr changed to last
(right-point (last control-points))
(left-pitch (ly:event-property (event-cause left-bound) 'pitch))
(right-pitch (ly:event-property (event-cause right-bound) 'pitch))
(quarterdiff (- (ly:pitch-quartertones right-pitch)
(ly:pitch-quartertones left-pitch)))
(begin-x (car left-point))
(begin-y (+ (* (/ (ly:grob-property left-tab-note-head
'staff-position) 2)
staff-space)
y-distance-from-staffline-to-arrow))
;; cdr left-point doesn't work, because invisible stems are included
(end-x (car right-point))
(end-y (+ (* (/ (- line-count 1) 2) staff-space)
y-distance-from-tabstaff-to-arrow-tip))
(arrow-lx (- end-x (/ bend-arrowhead-width 2)))
(arrow-rx (+ end-x (/ bend-arrowhead-width 2)))
(arrow-y (- end-y bend-arrowhead-height))
(middle-x (+ begin-x (* bend-arrow-curvature-factor (- end-x
begin-x))))
(bend-amount (quarterdiff->string quarterdiff)))
(if (< quarterdiff 0)
;; bend down
(let* ((y-offset (cdr (ly:grob-extent left-tab-note-head
left-tab-note-head Y)))
(temp begin-y))
(set! begin-y end-y) ;; swap begin-y/end-y
(set! end-y (+ temp y-offset))
(set! arrow-y (+ end-y bend-arrowhead-height))
(set! bend-amount "")
(ly:grob-set-property! right-tab-note-head 'display-cautionary #t)
(ly:grob-set-property! right-tab-note-head 'stencil
tab-note-head::print))
;; bend up
(let* ((x-offset (/ (cdr (ly:grob-extent left-tab-note-head
left-tab-note-head X))
2)))
(set! begin-x (+ begin-x x-offset))
(ly:grob-set-property! right-tab-note-head 'transparent #t)))
;; draw resulting bend arrow
(grob-interpret-markup grob
(make-drawBendArrow-markup
bend-line-thickness
begin-x middle-x end-x begin-y end-y
arrow-lx arrow-rx arrow-y
bend-amount))))
#(define (slur::draw-shifted-bend-arrow grob)
(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))
(left-bound (ly:spanner-bound grob LEFT))
(right-bound (ly:spanner-bound grob RIGHT))
(left-tab-note-head (ly:grob-property left-bound 'cause))
(right-tab-note-head (ly:grob-property right-bound 'cause))
(control-points (ly:grob-property grob 'control-points))
(left-point (car control-points))
(right-point (cadddr control-points))
(left-pitch (ly:event-property (event-cause left-bound) 'pitch))
(right-pitch (ly:event-property (event-cause right-bound) 'pitch))
(quarterdiff (- (ly:pitch-quartertones right-pitch)
(ly:pitch-quartertones left-pitch)))
(begin-x (car left-point))
(begin-y (+ (* (/ (ly:grob-property left-tab-note-head
'staff-position) 2)
staff-space)
y-distance-from-tabstaff-to-arrow-tip))
;; cdr left-point doesn't work, because invisible stems are included
(end-x (car right-point))
(end-y (+ (* (/ (- line-count 1) 2) staff-space)
y-distance-from-tabstaff-to-arrow-tip consecutive-bends-arrow-height))
(arrow-lx (- end-x (/ bend-arrowhead-width 2)))
(arrow-rx (+ end-x (/ bend-arrowhead-width 2)))
(arrow-y (- end-y bend-arrowhead-height))
(middle-x (+ begin-x (* bend-arrow-curvature-factor (- end-x
begin-x))))
(bend-amount (quarterdiff->string quarterdiff)))
(if (< quarterdiff 0)
;; bend down
(let* ((y-offset (cdr (ly:grob-extent left-tab-note-head
left-tab-note-head Y)))
(temp begin-y))
(set! begin-y end-y) ;; swap begin-y/end-y
(set! end-y (+ temp y-offset))
(set! arrow-y (+ end-y bend-arrowhead-height))
(set! bend-amount "")
(ly:grob-set-property! right-tab-note-head 'stencil
(lambda (grob) (parenthesize-tab-note-head grob))))
;; bend up
(ly:grob-set-property! right-tab-note-head 'transparent #t))
;; draw resulting bend arrow
(grob-interpret-markup grob
(make-drawBendArrow-markup
bend-line-thickness
begin-x middle-x end-x begin-y end-y
arrow-lx arrow-rx arrow-y
bend-amount))))
#(define (slur::draw-pre-bend-hold grob)
(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))
(left-bound (ly:spanner-bound grob LEFT))
(right-bound (ly:spanner-bound grob RIGHT))
(left-tab-note-head (ly:grob-property left-bound 'cause))
(right-tab-note-head (ly:grob-property right-bound 'cause))
(control-points (ly:grob-property grob 'control-points))
(left-point (car control-points))
(right-point (cadddr control-points))
(left-pitch (ly:event-property (event-cause left-bound) 'pitch))
(right-pitch (ly:event-property (event-cause right-bound) 'pitch))
(quarterdiff (- (ly:pitch-quartertones right-pitch)
(ly:pitch-quartertones left-pitch)))
(begin-x (car left-point))
(y-offset (cdr (ly:grob-extent left-tab-note-head left-tab-note-head
Y)))
(begin-y (+ (* (/ (ly:grob-property left-tab-note-head
'staff-position)
2)
staff-space)
y-offset))
;; cdr left-point doesn't work, because invisible stems are included
(end-x (car right-point))
(end-y (+ (* (/ (- line-count 1) 2) staff-space)
y-distance-from-tabstaff-to-arrow-tip))
(arrow-lx (- begin-x (/ bend-arrowhead-width 2)))
(arrow-rx (+ begin-x (/ bend-arrowhead-width 2)))
(arrow-y (- end-y bend-arrowhead-height))
(bend-amount (quarterdiff->string quarterdiff)))
(ly:grob-set-property! right-tab-note-head 'transparent #t)
;; draw resulting bend arrow
(grob-interpret-markup grob
(make-drawHoldBendWithArrow-markup
bend-line-thickness
begin-x begin-y
end-x end-y
arrow-lx arrow-rx arrow-y
bend-amount))))
#(define (slur::draw-pre-bend-only grob)
(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))
(left-bound (ly:spanner-bound grob LEFT))
(right-bound (ly:spanner-bound grob RIGHT))
(left-tab-note-head (ly:grob-property left-bound 'cause))
(right-tab-note-head (ly:grob-property right-bound 'cause))
(control-points (ly:grob-property grob 'control-points))
(left-point (car control-points))
(right-point (cadddr control-points))
(left-pitch (ly:event-property (event-cause left-bound) 'pitch))
(right-pitch (ly:event-property (event-cause right-bound) 'pitch))
(quarterdiff (- (ly:pitch-quartertones right-pitch)
(ly:pitch-quartertones left-pitch)))
(begin-x (car left-point))
(y-offset (cdr (ly:grob-extent left-tab-note-head left-tab-note-head
Y)))
(begin-y (+ (* (/ (ly:grob-property left-tab-note-head
'staff-position)
2)
staff-space)
y-offset))
;; cdr left-point doesn't work, because invisible stems are included
(end-x (car right-point))
(end-y (+ (* (/ (- line-count 1) 2) staff-space)
y-distance-from-tabstaff-to-arrow-tip))
(arrow-lx (- begin-x (/ bend-arrowhead-width 2)))
(arrow-rx (+ begin-x (/ bend-arrowhead-width 2)))
(arrow-y (- end-y bend-arrowhead-height))
(bend-amount (quarterdiff->string quarterdiff)))
(ly:grob-set-property! right-tab-note-head 'transparent #t)
;; draw resulting bend arrow
(grob-interpret-markup grob
(make-drawHoldBendArrowOnly-markup
bend-line-thickness
begin-x begin-y
end-x end-y
arrow-lx arrow-rx arrow-y
bend-amount))))
#(define (tie::draw-hold-bend grob)
(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))
(left-tab-note-head (ly:spanner-bound grob LEFT))
(right-tab-note-head (ly:spanner-bound grob RIGHT))
(control-points (ly:grob-property grob 'control-points))
(left-point (car control-points))
(right-point (cadddr control-points))
(begin-x (car left-point))
(end-x (car right-point))
(line-y (+ (* (/ (- line-count 1) 2) staff-space)
y-distance-from-tabstaff-to-arrow-tip)))
(ly:grob-set-property! right-tab-note-head 'transparent #t)
(grob-interpret-markup grob
(make-drawDashedLine-markup
bend-line-thickness
begin-x end-x line-y)
;; with 2.17.21 one could use:
;(make-translate-markup (cons 0 line-y)
; (make-override-markup '(on . 0.3)
; (make-draw-dashed-line-markup
; (cons end-x 0))))
)))
%%% music functions
bendOn =
#(define-music-function (note) (ly:music?)
#{
\override Voice.Slur.stencil = #slur::draw-pointed-slur
\override TabVoice.Slur.stencil = #slur::draw-bend-arrow
$note \noBreak
#})
bendOff = {
\revert Voice.Slur.stencil
% \override TabVoice.Slur.stencil = #slur::draw-tab-slur
}
bendGrace =
#(define-music-function (note) (ly:music?)
#{
\once \override Voice.Stem.stencil = #point-stencil
\once \override Voice.Flag.stencil = ##f
\once \override Voice.Stem.direction = #DOWN
\once \override Voice.Slur.direction = #UP
\grace #note
#})
preBendHold =
#(define-music-function (note) (ly:music?)
#{
\once \override TabVoice.Slur.stencil = #slur::draw-pre-bend-only
\once \override TabStaff.Parentheses.transparent = ##t
<>\noBeam \parenthesize #note
#})
preBendRelease =
#(define-music-function (note) (ly:music?)
#{
\once \override TabVoice.Slur.stencil = #slur::draw-pre-bend-hold
\once \override TabStaff.Parentheses.transparent = ##t
\once \override Voice.Slur.direction = #DOWN
<>\noBeam \parenthesize #note
#})
holdBend =
#(define-music-function () ()
#{
\once \override TabVoice.Tie.stencil = #tie::draw-hold-bend
#})
shiftBend = {
\once \override TabVoice.Slur.stencil = #slur::draw-shifted-bend-arrow
}
\version "2.23.9"
\header{
title="Memphis, Tennessee"
composer="Chuck Berry"
enteredby="saf"
tagline = "" % remove the tag line
}
\include "english.ly"
\include "predefined-guitar-fretboards.ly"
\include "definitions.ily"
% We break the riff up, so we can overlap with the melody.
riff_first_measure = {
\relative {
< e,\6 b'\5-1 >4 < e\6 b'\5-1 >4 < e\6 cs'\5-3 >4 < e\6 cs'\5-3 >4 | % measure 7 / 26
}
}
riff_last_measure = {
\relative {
< e,\6 d'\5-4 >4 < e\6 d'\5-4 >4 < e\6 cs'\5-3 >4 r4 | % measure 10 / 29
}
}
riff_notes = {
\relative {
< e,\6 d'\5-4 >4 < e\6 d'\5-4 >4 < e\6 cs'\5-3 >4
\tuplet 3/2 { \bendOn < e'\4-1 >8 ( < eqs\4-1 >8 ) ( < e\4-1 >8 ) \bendOff } | % measure 8 / 27
< e,\6 b'\5-1 >4 < e\6 b'\5-1 >4 < e\6 cs'\5-3 >4 < e\6 cs'\5-3 >4 | % measure 9 / 28
}
}
intro_notes = {
\tempo 4=180
\time 2/2
\clef "treble_(8)"
\relative {
\grace < d'\2-3 e\1 >16 \glissando < e\2-3 e\1 >2 < d\2-3 e\1 >2 | % measure 1
\grace < a\3-1 b\2 >16 \glissando < b\3-1 b\2 >2 \tuplet 3/2 { < a\3-1 >4 < g\3 >4 < e\4-2 >4 } | % measure 2
\grace < d'\2-3 e\1 >16 \glissando < e\2-3 e\1 >2 < d\2-3 e\1 >2 | % measure 3
\grace < a\3-1 b\2 >16 \glissando < b\3-1 b\2 >2 \tuplet 3/2 { < a\3-1 >4 < g\3 >4 < e\4-2 >4 } | % measure 4
\grace < d'\2-3 e\1 >16 \glissando < e\2-3 e\1 >2 < d\2-3 e\1 >2 | % measure 5
\grace < a\3-1 b\2 >16 \glissando < b\3-1 b\2 >2 \tuplet 3/2 { < a\3-1 >4 < g\3 >4 < e\4-2 >4 } | % measure 6
\break
}
}
global = {
\key e \major
% We don't want doubleSlurs on bends, because it gives us double arrows.
\set doubleSlurs = ##f
\set fingeringOrientations = #'(up)
\set glissandoMap = #'((0 . 0))
}
% We break the outro up because we need to start all staves with a grace note to avoid a
% program bug. But, we want to be able to skip the length of as much of the outro as
% possible, for convenience.
outro_first_measure = {
\relative {
\grace < d'\2-3 e\1 >16 \glissando < e\2-3 e\1 >2 < d\2-3 e\1 >2 | % measure 30
}
}
outro_notes = {
\relative {
\grace < a\3-1 b\2 >16 \glissando < b\3-1 b\2 >2 \tuplet 3/2 { < a\3-1 >4 < g\3 >4 < e\4-2 >4 } | % measure 31
\grace < d'\2-3 e\1 >16 \glissando < e\2-3 e\1 >2 < d\2-3 e\1 >2 | % measure 32
\grace < a\3-1 b\2 >16 \glissando < b\3-1 b\2 >2 \tuplet 3/2 { < a\3-1 >4 < g\3 >4 < e\4-2 >4 } | % measure 33
\grace < d'\2-3 e\1 >16 \glissando < e\2-3 e\1 >2 < d\2-3 e\1 >2 | % measure 34
\grace < a\3-1 b\2 >16 \glissando < b\3-1 b\2 >2 \tuplet 3/2 { < a\3-1 >4 < g\3 >4 < e\4-2 >4 } | % measure 35
\bar "||"
}
}
chord_notes = {
\chordmode {
\set chordChanges = ##t
#(skip-of-length intro_notes) % length = 6
#(skip-of-length riff_first_measure) % length = 1
#(skip-of-length riff_notes) % length = 2
#(skip-of-length riff_last_measure) % length = 1
\repeat volta 2 {
\repeat unfold 8 {b1 } | % measure 11-18
\repeat unfold 5 {e1 } | % measure 19-23
\repeat unfold 6 {b1:7 } | % measure 24-29
}
\grace s16 s1 | % measure 30
#(skip-of-length outro_notes) % length = 6
% last measure = 35
}
}
melody_first_measure = {
% overlaps with riff last measure (first time)
\relative {
r2. b'4 | % measure 10
}
}
melody_last_measure = {
% overlaps with riff first measure (during repeat)
\relative {
e'2. r4 | % measure 26
}
}
melody_notes = {
\relative {
b'4 b4 b4 b4 | % measure 11
a4 fs4 fs4 gs4 | % measure 12
b4 b4 b4 b4 | % measure 13
a2
<<
\new Voice = "v1" \relative { \voiceOne r2 }
\new Voice = "v2" \relative { \voiceTwo \magnifyMusic 0.63 { fs'4 gs4 }}
>> | % measure 14
\break
b4 b4 b4 b4 | % measure 15
a4 fs4 fs4 gs4 | % measure 16
b4 b4 b4 b4 | % measure 17
a2. gs4 | % measure 18
\break
b4 b4 b4 cs4 | % measure 19
b4 gs4 e4 gs | % measure 20
b4 b4 b4 gs4 | % measure 21
b2 r4 fs8 gs8 | % measure 22
\break
b4 b4 b4 gs4 | % measure 23
a4 a4 a4 fs4 | % measure 24
gs4 gs4 gs4 fs4 | % measure 25
}
}
verse_one_part = \lyricmode {
""1 | % measure 1
""1 | % measure 2
""1 | % measure 3
""1 | % measure 4
""1 | % measure 5
""1 | % measure 6
""1 | % measure 7
""1 | % measure 8
""1 | % measure 9
""2 ""4 Long | % measure 10
dis- tance, in- for- | % measure 11
ma- tion, Give me | % measure 12
Mem- phis, Ten- nes- | % measure 13
see. "" "" "" | % measure 14
Help me find the | % measure 15
par- ty trying to | % measure 16
get in touch with | % measure 17
me.2. She4 | % measure 18
could not leave her | % measure 19
num- ber, but I | % measure 20
know who placed the | % measure 21
call2 ""4 'cause8 my | % measure 22
un-4 cle took the | % measure 23
mes- sage and he | % measure 24
wrote it on the | % measure 25
wall.2. ""4 | % measure 26
""1 | % measure 27
""1 | % measure 28
""1 | % measure 29
% outro
""1 | % measure 30
""1 | % measure 31
""1 | % measure 32
""1 | % measure 33
""1 | % measure 34
""1 | % measure 35
}
verse_two_part = \lyricmode {
""1 | % measure 1
""1 | % measure 2
""1 | % measure 3
""1 | % measure 4
""1 | % measure 5
""1 | % measure 6
""1 | % measure 7
""1 | % measure 8
""1 | % measure 9
""1 | % measure 10
Help4 me, in- for- | % measure 11
ma- tion, get in | % measure 12
touch with my Ma- | % measure 13
rie.2 She's4 the | % measure 14
on- ly one who'd | % measure 15
call me here from | % measure 16
Mem- phis Ten- nes | % measure 17
see.2. Her4 | % measure 18
home is on the | % measure 19
south2 side, | % measure 20
high4 up on a | % measure 21
ridge,2 "" | % measure 22
just4 a half a | % measure 23
mile2 from4 the | % measure 24
Mis- sis- sip- pi | % measure 25
Bridge.2. ""4 | % measure 26
""1 | % measure 27
""1 | % measure 28
""1 | % measure 29
% outro
""1 | % measure 30
""1 | % measure 31
""1 | % measure 32
""1 | % measure 33
""1 | % measure 34
""1 | % measure 35
}
verse_three_part = \lyricmode {
""1 | % measure 1
""1 | % measure 2
""1 | % measure 3
""1 | % measure 4
""1 | % measure 5
""1 | % measure 6
""1 | % measure 7
""1 | % measure 8
""1 | % measure 9
""1 | % measure 10
Last2 time4 I | % measure 11
saw Ma- rie, she's | % measure 12
wav- ing me good- | % measure 13
by.2 ""4 With | % measure 14
hur- ry home drops | % measure 15
on her cheek that | % measure 16
trick- l'd from her | % measure 17
eye.2. But4 | % measure 18
we were pulled a- | % measure 19
part, be- cause her | % measure 20
Mom did not a- | % measure 21
gree,2 ""4 and8 ""8 | % measure 22
tore4 a- part our | % measure 23
hap- py home in | % measure 24
Mem- phis Ten- nes- | % measure 25
see.2. ""4 | % measure 26
""1 | % measure 27
""1 | % measure 28
""1 | % measure 29
% outro
""1 | % measure 30
""1 | % measure 31
""1 | % measure 32
""1 | % measure 33
""1 | % measure 34
""1 | % measure 35
}
verse_four_part = \lyricmode {
""1 | % measure 1
""1 | % measure 2
""1 | % measure 3
""1 | % measure 4
""1 | % measure 5
""1 | % measure 6
""1 | % measure 7
""1 | % measure 8
""1 | % measure 9
""1 | % measure 10
Help4 me, in- for- | % measure 11
ma- tion, more than | % measure 12
that I can- not | % measure 13
add,2 ""2 | % measure 14
On-4 ly that I | % measure 15
miss her2 and4 | % measure 16
all the fun we | % measure 17
had.2. Ma-4 | % measure 18
rie is on- ly | % measure 19
six years old,2 | % measure 20
in-4 for- ma- tion, | % measure 21
please,2 ""2 | % measure 22
try4 to put me | % measure 23
through to her in | % measure 24
Mem- phis Ten- nes- | % measure 25
see.2. ""4 | % measure 26
""1 | % measure 27
""1 | % measure 28
""1 | % measure 29
% outro
""1 | % measure 30
""1 | % measure 31
""1 | % measure 32
""1 | % measure 33
""1 | % measure 34
""1 | % measure 35
}
solo_part = {
\tempo 4 = 180
\time 2/2
\key e \major
\clef "treble_(8)"
\relative {
\set doubleSlurs = ##f
\set fingeringOrientations = #'(up)
\set glissandoMap = #'()
\mark \markup
{
\left-column {
"Solo - play between 2nd and 3rd verses."
" "
" "
" "
}
}
\repeat percent 4 {
\grace < a\4-3 cs\3-2 fs\2-1 a\1-4 >8 \glissando < b\4-3 ds\3-2 gs\2-1 b\1-4 >4 < b\4-3 ds\3-2 gs\2-1 b\1-4 >4
\grace < a\4-3 cs\3-2 fs\2-1 a\1-4 >8 \glissando < b\4-3 ds\3-2 gs\2-1 b\1-4 >4 < b\4-3 ds\3-2 gs\2-1 b\1-4 >4 | % measure 1 / 3
\grace < b\4-3 ds\3-2 gs\2-1 b\1-4 >8 \glissando < a\4-3 cs\3-2 fs\2-1 a\1-4 >4 < a\4-3 cs\3-2 fs\2-1 a\1-4 >4
< a\4-3 cs\3-2 fs\2-1 a\1-4 >4 < a\4-3 cs\3-2 fs\2-1 a\1-4 >8 < a\4-3 cs\3-2 fs\2-1 a\1-4 >8 | % measure 2 / 4
}
\break
\repeat percent 2 {
\grace < d\4-3 fs\3-2 b\2-1 d\1-4 >8 \glissando < e\4-3 gs\3-2 cs\2-1 e\1-4 >4 < e\4-3 gs\3-2 cs\2-1 e\1-4 >4
\grace < d\4-3 fs\3-2 b\2-1 d\1-4 >8 \glissando < e\4-3 gs\3-2 cs\2-1 e\1-4 >4 < e\4-3 gs\3-2 cs\2-1 e\1-4 >4 | % measure 9 / 11
\grace < e\4-3 gs\3-2 cs\2-1 e\1-4 >8 \glissando < d\4-3 fs\3-2 b\2-1 d\1-4 >4 < d\4-3 fs\3-2 b\2-1 d\1-4 >4
< d\4-3 fs\3-2 b\2-1 d\1-4 >4 < d\4-3 fs\3-2 b\2-1 d\1-4 >8 < d\4-3 fs\3-2 b\2-1 d\1-4 >8 | % measure 10 / 12
}
\grace < a\4-3 cs\3-2 fs\2-1 a\1-4 >8 \glissando < b\4-3 ds\3-2 gs\2-1 b\1-4 >4 < b\4-3 ds\3-2 gs\2-1 b\1-4 >4
\grace < a\4-3 cs\3-2 fs\2-1 a\1-4 >8 \glissando < b\4-3 ds\3-2 gs\2-1 b\1-4 >4 < b\4-3 ds\3-2 gs\2-1 b\1-4 >4 | % measure 13
\grace < b\4-3 ds\3-2 gs\2-1 b\1-4 >8 \glissando < a\4-3 cs\3-2 fs\2-1 a\1-4 >4 < a\4-3 cs\3-2 fs\2-1 a\1-4 >4
< a\4-3 cs\3-2 fs\2-1 a\1-4 >4 < a\4-3 cs\3-2 fs\2-1 a\1-4 >8 < a\4-3 cs\3-2 fs\2-1 a\1-4 >8 | % measure 14
\break
\grace < a\4-3 cs\3-2 fs\2-1 a\1-4 >8 \glissando < b\4-3 ds\3-2 gs\2-1 b\1-4 >4 < b\4-3 ds\3-2 gs\2-1 b\1-4 >4
\grace < b\4-3 ds\3-2 gs\2-1 b\1-4 >8 \glissando < a\4-3 cs\3-2 fs\2-1 a\1-4 >4 < a\4-3 cs\3-2 fs\2-1 a\1-4 >4 | % measure 15
< e,\6 b'\5-1 >4 < e\6 b'\5-1 >4 < e\6 cs'\5-3 >4 < e\6 cs'\5-3 >4 | % measure 16
< e\6 d'\5-4 >4 < e\6 d'\5-4 >4
< e\6 cs'\5-3 >4 \tuplet 3/2 { \bendOn < e'\4-1 >8 ( < eqs\4-1 >8 ) ( < e\4-1 >8 ) \bendOff } | % measure 17
< e,\6 b'\5-1 >4 < e\6 b'\5-1 >4 < e\6 cs'\5-3 >4 < e\6 cs'\5-3 >4 | % measure 18
< e\6 d'\5-4 >4 < e\6 d'\5-4 >4 < e\6 cs'\5-3 >4 r4 | % measure 19
}
}
\book {
\paper {
#(set-paper-size "arch a")
system-system-spacing = #'((basic-distance . 0.1) (padding . 4))
indent = 0
ragged-right = ##f
ragged-bottom = ##f
ragged-last-bottom= ##t
}
\score {
<<
\new ChordNames {\set chordChanges = ##t \chord_notes}
\new StaffGroup <<
\new Staff {
\global
\intro_notes % length 6
\riff_first_measure % length 1
\riff_notes % length 2
\riff_last_measure % length 1
\repeat volta 2 {
#(skip-of-length melody_notes) % length 15
\riff_first_measure % length 1
\riff_notes % length 2
\riff_last_measure % length 1
}
\outro_first_measure % length 1
\outro_notes % length 5
}
\new TabStaff \with {\RemoveAllEmptyStaves}{
\global
\intro_notes % length 6
\riff_first_measure % length 1
\riff_notes % length 2
\riff_last_measure % length 1
\repeat volta 2 {
#(skip-of-length melody_notes) % length 15
\riff_first_measure % length 1
\riff_notes % length 2
\riff_last_measure % length 1
}
\outro_first_measure % length 1
\outro_notes % length 5
}
\new Staff {
\global
#(skip-of-length intro_notes) % length 6
#(skip-of-length riff_first_measure) % length 1
#(skip-of-length riff_notes) % length 2
\melody_first_measure % length 1
\repeat volta 2 {
\melody_notes % length 15
\melody_last_measure % length 1
#(skip-of-length riff_notes) % length 2
#(skip-of-length riff_last_measure) % length 1
}
\grace s16 s1 | % measure 30
#(skip-of-length outro_notes) % length 5
}
>>
\new Lyrics \verse_one_part % length = 35
\new Lyrics \verse_two_part % length = 35
\new Lyrics \verse_three_part % length = 35
\new Lyrics \verse_four_part % length = 35
>>
\layout {
% #(layout-set-staff-size 16)
\omit Voice.StringNumber
\context {
\Staff \RemoveAllEmptyStaves
}
}
\midi { }
}
\pageBreak
\score {
<<
\new Voice { \solo_part }
\new TabStaff \with { \RemoveAllEmptyStaves } { \solo_part }
>>
\layout {
% #(layout-set-staff-size 16)
\omit Voice.StringNumber
\context {
\Staff \RemoveAllEmptyStaves
}
}
\midi { }
}
}