beginning of blue shift
This commit is contained in:
parent
82a1877f53
commit
d639303215
66
blue-shift.ly
Normal file
66
blue-shift.ly
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
\version "2.18.2"
|
||||||
|
\language "english"
|
||||||
|
\include "lib/guitar-bend.ily"
|
||||||
|
|
||||||
|
\header {
|
||||||
|
title = "Blue Shift"
|
||||||
|
composer = "Tommy Montgomery"
|
||||||
|
copyright = "(c) 2009 Tommy Montgomery"
|
||||||
|
}
|
||||||
|
|
||||||
|
globalConfig = {
|
||||||
|
\key b \mixolydian
|
||||||
|
\time 4/4
|
||||||
|
\numericTimeSignature
|
||||||
|
\tempo 4 = 90
|
||||||
|
}
|
||||||
|
|
||||||
|
rhythmGuitar = \new Staff \with {
|
||||||
|
instrumentName = "Rhythm Guitar"
|
||||||
|
} {
|
||||||
|
\globalConfig
|
||||||
|
\clef treble \relative c' {
|
||||||
|
\repeat unfold 3 { b16 fs' a fs a( b) fs a fs a( b) fs c' fs, b( a) | }
|
||||||
|
b,16 fs' a fs a( b) fs a \times 4/6 { c( b a) g( fs e) } \times 4/6 { ds( e fs) e( ds) c } |
|
||||||
|
|
||||||
|
\repeat unfold 3 { b16 fs' a fs a( b) fs a fs a( b) fs c' fs, b( a) | }
|
||||||
|
b,16 fs' a fs a( b) fs a \times 4/6 { c( b a) g( fs e) } \times 4/6 { ds( e fs) e( ds) c } |
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
leadGuitarOne = {
|
||||||
|
\relative c'' {
|
||||||
|
\set TabStaff.minimumFret = #8
|
||||||
|
\set TabStaff.restrainOpenStrings = ##t
|
||||||
|
\omit Voice.StringNumber
|
||||||
|
|
||||||
|
r1 | r1 | r1 |
|
||||||
|
r2 \times 4/6 { c16\2( b a) g\3( fs e) } \times 4/6 { ds( e fs) e( ds) c } |
|
||||||
|
|
||||||
|
\repeat unfold 3 { b16 fs' a fs a( b) fs a fs a( b) fs c'\2 fs, b( a) | }
|
||||||
|
b,16 fs' a fs a( b) fs a \times 4/6 { c\2( b a) g( fs e) } \times 4/6 { ds( e fs) e( ds) c } |
|
||||||
|
|
||||||
|
fs4. b,8 ~ b2 \grace { b16 ds fs\2 b\1 } |
|
||||||
|
c8( b\1) g d\3 ~ d4. d16\3( e) |
|
||||||
|
\bendGrace e( fs4.) \bendGrace e8( fs\harmonic) ~ fs8 e d\3 e ~ |
|
||||||
|
e cs4\3 a8\4 ~ a4 a16\4 cs\3 e cs\3 |
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
\score {
|
||||||
|
<<
|
||||||
|
\new Staff \with { \clef "G_8" instrumentName = "Lead I" } {
|
||||||
|
\globalConfig
|
||||||
|
\leadGuitarOne
|
||||||
|
}
|
||||||
|
\new TabStaff { \leadGuitarOne }
|
||||||
|
\rhythmGuitar
|
||||||
|
|
||||||
|
>>
|
||||||
|
\layout {
|
||||||
|
\context {
|
||||||
|
\Staff \RemoveEmptyStaves
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
BIN
blue-shift.pdf
Normal file
BIN
blue-shift.pdf
Normal file
Binary file not shown.
443
lib/guitar-bend.ily
Normal file
443
lib/guitar-bend.ily
Normal file
@ -0,0 +1,443 @@
|
|||||||
|
\version "2.16.2" % 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 = "undocumented"
|
||||||
|
}
|
||||||
|
|
||||||
|
% 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))
|
||||||
|
;;changed: car and cadddr changed to: first and last
|
||||||
|
(left-point (first control-points))
|
||||||
|
(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 = {
|
||||||
|
\override Voice.Slur #'stencil = #slur::draw-pointed-slur
|
||||||
|
\override TabVoice.Slur #'stencil = #slur::draw-bend-arrow
|
||||||
|
}
|
||||||
|
|
||||||
|
bendOff = {
|
||||||
|
\revert Voice.Slur #'stencil
|
||||||
|
\override TabVoice.Slur #'stencil = #slur::draw-tab-slur
|
||||||
|
}
|
||||||
|
|
||||||
|
bendGrace =
|
||||||
|
#(define-music-function (parser location 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 (parser location note) (ly:music?)
|
||||||
|
#{
|
||||||
|
\once \override TabVoice.Slur #'stencil = #slur::draw-pre-bend-only
|
||||||
|
\once \override TabStaff.ParenthesesItem #'transparent = ##t
|
||||||
|
<>\noBeam \parenthesize #note
|
||||||
|
#})
|
||||||
|
|
||||||
|
preBendRelease =
|
||||||
|
#(define-music-function (parser location note) (ly:music?)
|
||||||
|
#{
|
||||||
|
\once \override TabVoice.Slur #'stencil = #slur::draw-pre-bend-hold
|
||||||
|
\once \override TabStaff.ParenthesesItem #'transparent = ##t
|
||||||
|
\once \override Voice.Slur #'direction = #DOWN
|
||||||
|
<>\noBeam \parenthesize #note
|
||||||
|
#})
|
||||||
|
|
||||||
|
holdBend =
|
||||||
|
#(define-music-function (parser location) ()
|
||||||
|
#{
|
||||||
|
\once \override TabVoice.Tie #'stencil = #tie::draw-hold-bend
|
||||||
|
#})
|
||||||
|
|
||||||
|
shiftBend = {
|
||||||
|
\once \override TabVoice.Slur #'stencil = #slur::draw-shifted-bend-arrow
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user