[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: O Canada with Ukrainian lyrics
From: |
Peter A. Buhr |
Subject: |
Re: O Canada with Ukrainian lyrics |
Date: |
Tue, 27 Jun 2023 09:29:29 -0400 |
The included file guitar.ly is missing. It might not be strictly required
but I thought I’d mention it.
Right, guitar.ly is slightly scary (see below) and might not be used. Again it
may not build with newer lilypond.
Basically, I got pulled away from my guitars about 5+ years ago by life. I can't
even remember which end to blow into. 8-(
I attached a PDF of O Canada.
Oh, and I attached something I was working on and never finished. Some of it is
rubbish and needs people with more knowledge than me to get right. I may have
posted it to lilypond in the past, so sorry if this is a repeat.
=====================================================
\version "2.16.0"
% postscript slash for half barres
#(define slash "0.18 setlinewidth 0.76 1.53 moveto 0 -1.62 rlineto stroke")
% variable definitions
date = #(strftime "%d/%m/%Y" (localtime (current-time)))
copywrite = #(strftime "Copyright © %Y" (localtime (current-time)))
lu = \once \override LaissezVibrerTie #'direction = #UP
ld = \once \override LaissezVibrerTie #'direction = #DOWN
fl = \set fingeringOrientations = #'(left)
fr = \set fingeringOrientations = #'(right)
flr = \set fingeringOrientations = #'(left right)
fu = \set fingeringOrientations = #'(up)
fd = \set fingeringOrientations = #'(down)
fud = \set fingeringOrientations = #'(up down)
fdu = \set fingeringOrientations = #'(down up)
furd = \set fingeringOrientations = #'(up right down)
fuld = \set fingeringOrientations = #'(up left down)
frlr = \set fingeringOrientations = #'(right left right)
frl = \set fingeringOrientations = #'(right left)
fp = \override Fingering #'script-priority = #-100
faa = \once \override Fingering #'script-priority = #101
fsp = \once \override Fingering #'script-priority = #451
graceFinger = \once \override Fingering #'font-size = #-8
fis = \override Fingering #'avoid-slur = #'inside
fos = \override Fingering #'avoid-slur = #'outside
sfl = \set strokeFingerOrientations = #'(left)
sfr = \set strokeFingerOrientations = #'(right)
sfu = \set strokeFingerOrientations = #'(up)
sfd = \set strokeFingerOrientations = #'(down)
sfud = \set strokeFingerOrientations = #'(up down)
sfsst = \override StrokeFinger #'add-stem-support = ##t
sfssf = \override StrokeFinger #'add-stem-support = ##f
snsst = \override StringNumber #'add-stem-support = ##t
snssf = \override StringNumber #'add-stem-support = ##f
snl = \set stringNumberOrientations = #'(left)
snr = \set stringNumberOrientations = #'(right)
snu = \set stringNumberOrientations = #'(up)
snd = \set stringNumberOrientations = #'(down)
snrd = \set stringNumberOrientations = #'(right down)
snru = \set stringNumberOrientations = #'(right up)
snud = \set stringNumberOrientations = #'(up down)
snar = \once \override StringNumber #'self-alignment-X = #RIGHT
snal = \once \override StringNumber #'self-alignment-X = #LEFT
igncf = \once \override NoteColumn #'ignore-collision = ##f
ignct = \once \override NoteColumn #'ignore-collision = ##t
su = \stemUp
sn = \stemNeutral
sd = \stemDown
onceStemDown = \once \override Stem #'direction = #DOWN
onceStemUp = \once \override Stem #'direction = #UP
onceSlurDown = \once \override Slur #'direction = #DOWN
onceSlurUp = \once \override Slur #'direction = #UP
harmMixed = \override NoteHead #'style = #'harmonic-mixed
harmOff = \revert NoteHead #'style
onceHarmMixed = \once \override NoteHead #'style = #'harmonic-mixed
hSeven = \markup \teeny \italic { "harm.7" }
hTwelve = \markup \teeny \italic { "harm.12" }
hNineteen = \markup \teeny \italic { "harm.19" }
seven = \markup \teeny { 7 }
eight = \markup \teeny { 8 }
twelve = \markup \teeny { 12 }
ospe = \once \override TextScript #'outside-staff-priority = #-101
sfis = \override StrokeFinger #'avoid-slur = #'inside
sfos = \override StrokeFinger #'avoid-slur = #'outside
stemkkkki = \once \override Stem #'length-fraction = #(magstep -4.5)
stemkkkk = \once \override Stem #'length-fraction = #(magstep -4)
stemkkki = \once \override Stem #'length-fraction = #(magstep -3.5)
stemkkk = \once \override Stem #'length-fraction = #(magstep -3)
stemkki = \once \override Stem #'length-fraction = #(magstep -2.5)
stemkk = \once \override Stem #'length-fraction = #(magstep -2)
stemki = \once \override Stem #'length-fraction = #(magstep -1.5)
stemk = \once \override Stem #'length-fraction = #(magstep -1)
stem = \once \override Stem #'length-fraction = #(magstep 0)
stemi = \once \override Stem #'length-fraction = #(magstep 1.5)
steml = \once \override Stem #'length-fraction = #(magstep 2)
stemli = \once \override Stem #'length-fraction = #(magstep 2.5)
stemll = \once \override Stem #'length-fraction = #(magstep 3)
stemlli = \once \override Stem #'length-fraction = #(magstep 3.5)
stemlll = \once \override Stem #'length-fraction = #(magstep 4)
stemllli = \once \override Stem #'length-fraction = #(magstep 4.5)
stemllll = \once \override Stem #'length-fraction = #(magstep 5)
stemlllli = \once \override Stem #'length-fraction = #(magstep 5.5)
% vibrato symbol
vibrato = \markup { \override #'(font-name . "Tempera") \fontsize #6 "z" }
% better alignment of stroke fingering in a succession of fingering indications
#(define (my-stroke-finger::calc-text grob)
(let* ((digit (ly:event-property (event-cause grob) 'digit))
(text (ly:event-property (event-cause grob) 'text))
(finger (vector-ref (ly:grob-property grob 'digit-names)
(1- (max (min 5 digit) 1))))
(direction (ly:grob-property grob 'direction)))
(if (string? text)
text
(if (= direction 0)
finger
(make-combine-markup (cond
((= direction UP)
(make-transparent-markup "p"))
((= direction DOWN)
(make-transparent-markup "i")))
finger)))))
fingering = {
\override Fingering #'staff-padding = #'()
\override StringNumber #'staff-padding = #'()
\override StrokeFinger #'staff-padding = #'()
\override Fingering #'add-stem-support = ##f
\override StringNumber #'add-stem-support = ##t
\override StrokeFinger #'add-stem-support = ##t
\set fingeringOrientations = #'(left)
\set strokeFingerOrientations = #'(down)
\set stringNumberOrientations = #'(right)
\override Fingering #'avoid-slur = #'inside
\override StrokeFinger #'avoid-slur = #'outside
\override StringNumber #'avoid-slur = #'outside
\override StrokeFinger #'text = #my-stroke-finger::calc-text
\override Fingering #'outside-staff-priority = ##f
\override StrokeFinger #'outside-staff-priority = ##f
\override StringNumber #'outside-staff-priority = ##f
\override Fingering #'script-priority = #-101
\override Fingering #'padding = #0.3
\override StringNumber #'padding = #0.3
\override StrokeFinger #'padding = #0.3
\override Stem #'length-fraction = #(magstep 1)
\override Staff.AccidentalPlacement #'left-padding = #0
}
% shortcuts for stroke finger indications
% can't use a or p, so use upper case for all
P = #(define-music-function (parser location) ()
(apply make-music
(append
(list
'StrokeFingerEvent
'origin location)
(list 'digit 1))))
I = #(define-music-function (parser location) ()
(apply make-music
(append
(list
'StrokeFingerEvent
'origin location)
(list 'digit 2))))
M = #(define-music-function (parser location) ()
(apply make-music
(append
(list
'StrokeFingerEvent
'origin location)
(list 'digit 3))))
A = #(define-music-function (parser location) ()
(apply make-music
(append
(list
'StrokeFingerEvent
'origin location)
(list 'digit 4))))
% Basic spanner with alterations
% Parameters
% #osp % outside-staff-priority - normally set to #0
unless barre is colliding with other elements
% #dirn % set to #UP for above the staff, #DOWN for
below
% #'(lpad . rpad) % left and right padding to apply to TextSpanner
(shorten)
% #adjBreak % when barre wraps to following stave, set
value to prevent TextSpanner on following stave starting above the clef symbol
% #adjend % when barre wraps to following stave, set
value to prevent TextSpanner going to the very end of the stave
% #align % vertical alignment of bar with respect to
text (e.g., #UP #CENTER, #DOWN, #number)
% #lineStyle % style to format spanner line (e.g.,
#solid-line, #dashed-line)
% #fontShape % font shape for text (e.g., #upright, #italic,
#caps)
%
% Example:
% \spanner "5" #0 #UP #'(-0.5 . -1) #8 #1 #CENTER
% <g-2>\startTextSpan <c-3> <bf'-4>-> <ef,-1> <af-1>-> <c,-3>\stopTextSpan
%
spanner = #(define-music-function (parser location osp dirn shorten adjBreak
adjEnd align lineStyle fontShape)
(number? number? pair? number? number? number? symbol? symbol?)
#{
% set osp to 999 if spanner is colliding with another element this will
position the spanner outside all other
% elements can be normally be set to zero
\once \override TextSpanner #'outside-staff-priority = #osp
\once \override TextSpanner #'style = #lineStyle
\once \override TextSpanner #'font-shape = #fontShape
\once \override TextSpanner #'direction = #dirn
%draw a bracket edge on RHS
\once \override TextSpanner #'bound-details #'right #'text = \markup {
\draw-line #(cons 0 (/ dirn -1)) }
% set alignment of line with reference to left text
\once \override TextSpanner #'bound-details #'left
#'stencil-align-dir-y = $align
% change X pos of LH and RH end as desired
\once \override TextSpanner #'bound-details #'left #'padding = #(car
shorten)
\once \override TextSpanner #'bound-details #'right #'padding = #(cdr
shorten)
% allow adjustment of line end when it wraps to following stave
\once \override TextSpanner #'bound-details #'right-broken #'padding =
#adjEnd
% adjust LH end of line when it wraps to following stave so that it
doesn't
% extend to the left of the notes on the stave
\once \override TextSpanner #'bound-details #'left-broken #'X =
#adjBreak
% optional override to remove text and bracket edge at line breaks
\once \override TextSpanner #'bound-details #'left-broken #'text = ##f
\once \override TextSpanner #'bound-details #'right-broken #'text = ##f
#})
barreStart = \startTextSpan
barreStop = \stopTextSpan
% Full barre with alterations
% Parameters
% "<fretnum>" % fret number (e.g., "5") for full barre
% same as spanner
%
% Example:
% \barre "5" #0 #UP #'(-0.5 . -1) #8 #1
% <g-2> \barreStart <c-3> <bf'-4>-> <ef,-1> <af-1>-> <c,-3> \barreStop
%
barre = #(define-music-function (parser location fretnum osp dirn shorten
adjBreak adjEnd) (string? number? number? pair? number? number?)
#{
\spanner #osp #dirn #shorten #adjBreak #adjEnd #CENTER #'solid-line
#'upright
\once \override TextSpanner #'bound-details #'left #'text = \markup {
\concat { "C" $fretnum " " } }
#})
% Half barre with alterations
% Parameters
% "<fretnum>" % fret number (e.g., "5") for half barre
% "<partial>" % number of strings to cover - subscripted to
the fret number
% same as spanner
%
% Example:
% \hbarre "5" "3" #0 #UP #'(-0.5 . -1) #8 #1
% <g-2> \barreStart <c-3> <bf'-4>-> <ef,-1> <af-1>-> <c,-3> \barreStop
%
hbarre = #(define-music-function (parser location fretnum partial osp dirn
shorten adjBreak adjEnd) (string? string? number? number? pair? number? number?)
#{
\spanner #osp #dirn #shorten #adjBreak #adjEnd #0.35 #'solid-line
#'upright
\once \override TextSpanner #'bound-details #'left #'text =
% \markup { \concat { "C" $fretnum \raise #0.8 \sub $partial " "
} }
\markup { \small { \concat { \postscript #slash "C" $fretnum
\raise #0.8 \sub $partial " " } } }
#})
% RCM full barre with alterations
% Parameters
% same as barre
%
% Example:
% \fbarre "III" #0 #UP #'(-0.5 . -1) #8 #1
% <g-2> \barreStart <c-3> <bf'-4>-> <ef,-1> <af-1>-> <c,-3> \barreStop
%
fbarre = #(define-music-function (parser location fretnum osp dirn shorten
adjBreak adjEnd) (string? number? number? pair? number? number?)
#{
\pbarre $fretnum #"6" #"6" #osp #dirn #shorten #adjBreak #adjEnd
#})
% RCM partial barre with alterations
% Parameters
% "<fretnum>" % fret number (e.g., "5") for half barre
% "<lowest>" % lowest string stopped by barre
% "<partial>" % number of strings (including the lowest) to
cover
% same as spanner
%
% Example:
% \pbarre "III" "5" "4" #0 #UP #'(-0.5 . -1) #8 #1
% <g-2> \barreStart <c-3> <bf'-4>-> <ef,-1> <af-1>-> <c,-3> \barreStop
%
pbarre = #(define-music-function (parser location fretnum low num osp dirn
shorten adjBreak adjEnd) (string? string? string? number? number? pair? number?
number?)
#{
\spanner #osp #dirn #shorten #adjBreak #adjEnd #CENTER #'solid-line
#'upright
\once \override TextSpanner #'bound-details #'left #'text = \markup{
\line { \sans \fontsize #-2 \fraction $low $num $fretnum } }
#})
ritStart = \startTextSpan
ritStop = \stopTextSpan
% Ritardando with alterations
% Parameters
% same as spanner
%
% Example:
% \rit #0 #DOWN #'(-0.5 . -1) #8 #1
% <g-2> \ritStart <c-3> <bf'-4>-> <ef,-1> <af-1>-> <c,-3> \ritStop
%
rit = #(define-music-function (parser location osp dirn shorten adjBreak
adjEnd) (number? number? pair? number? number?)
#{
\spanner #osp #dirn #shorten #adjBreak #adjEnd #CENTER #'solid-line
#'upright
\once \override TextSpanner #'bound-details #'left #'text = \markup {
\italic "rit." }
#})
% usage e.g.:
% \harmonics "harm. 8va " #0 #'(0 . -0.5) #5 #1
% <g,-2>\startTextSpan <c-3> <bf'-4>-> <ef,-1> <af-1>-> <c,-3> g c bf'->
ef, af-> c,\stopTextSpan
harmonics = #(define-music-function (parser location text osp shorten adjBreak
adjEnd) (string? number? pair? number? number?)
#{
\spanner #osp #UP #shorten #adjBreak #adjEnd #CENTER #'dashed-line
#'italic
\once \override TextSpanner #'bound-details #'left #'text = \markup {
\teeny $text }
% setup dashed line and draw a bracket edge on RHS
\once \override TextSpanner #'dash-period = #1.5
\once \override TextSpanner #'dash-fraction = #0.6
\once \override TextSpanner #'thickness = #0.8
\once \override TextSpanner #'bound-details #'right #'text = \markup {
\draw-line #'(0 . -0.5) }
#})
% % usage e.g.:
% % \string "2" #0 #UP #'(0 . -0.5) #5 #1
% % <g,-2>\startTextSpan <c-3> <bf'-4>-> <ef,-1> <af-1>-> <c,-3> g c bf'->
ef, af-> c,\stopTextSpan
% string = #(define-music-function (parser location stringnum osp dirn shorten
adjBreak adjEnd)
% (string? number? number? pair? number? number?)
% #{
% % set osp to 999 if spanner is colliding with another element
% % this will position the spanner outside all other elements
% % can be normally be set to zero
% \once \override TextSpanner #'bound-details #'left #'text = \markup
\bold { \teeny \concat { \circle { \finger $stringnum } " " } }
% \once \override TextSpanner #'outside-staff-priority = #osp
% \once \override TextSpanner #'font-shape = #'upright
% \once \override TextSpanner #'direction = #dirn
% % setup dashed line and draw a bracket edge on RHS
% \once \override TextSpanner #'dash-period = #0.8
% \once \override TextSpanner #'dash-fraction = #0.6
% \once \override TextSpanner #'thickness = #0.8
% \once \override TextSpanner #'bound-details #'right #'text = \markup {
\draw-line #(cons 0 (/ dirn -2)) }
% % set alignment of line with reference to left text
% \once \override TextSpanner #'bound-details #'left
#'stencil-align-dir-y = #CENTER
% \once \override TextSpanner #'bound-details #'left #'padding = #(car
shorten)
% \once \override TextSpanner #'bound-details #'right #'padding = #(cdr
shorten)
% % allow adjustment of line end when it wraps to following stave
% \once \override TextSpanner #'bound-details #'right-broken #'padding =
#adjEnd
% % adjust LH end of line when it wraps to following stave so that it
doesn't
% % extend to the left of the notes on the stave
% \once \override TextSpanner #'bound-details #'left-broken #'X =
#adjBreak
% % optional override to remove text and bracket edge at line breaks
% \once \override TextSpanner #'bound-details #'left-broken #'text =
\markup \bold { \teeny \concat { \circle { \finger $stringnum } " " } }
% \once \override TextSpanner #'bound-details #'right-broken #'text = ##f
% #})
% usage e.g.:
% \tspan "cresc. poco a poco" #0 #DOWN #'(0 . -0.5) #5 #1
% <g,-2>\startTextSpan <c-3> <bf'-4>-> <ef,-1> <af-1>-> <c,-3> g c bf'->
ef, af-> c,\stopTextSpan
tspan = #(define-music-function (parser location text osp dirn shorten adjBreak
adjEnd) (string? number? number? pair? number? number?) #{
% set osp to 999 if spanner is colliding with another element
% this will position the spanner outside all other elements
% can be normally be set to zero
\once \override TextSpanner #'outside-staff-priority = #osp
\once \override TextSpanner #'bound-details #'left #'text =
\markup\italic\small\bold { \concat { { $text } " " } }
\once \override TextSpanner #'font-shape = #'upright
\once \override TextSpanner #'direction = #dirn
% setup dashed line and draw a bracket edge on RHS
\once \override TextSpanner #'dash-period = #1.5
\once \override TextSpanner #'dash-fraction = #0.3
\once \override TextSpanner #'thickness = #0.8
\once \override TextSpanner #'bound-details #'right #'text = \markup {
\draw-line #(cons 0 (/ dirn -1)) }
% set alignment of line with reference to left text
\once \override TextSpanner #'bound-details #'left
#'stencil-align-dir-y = #CENTER
\once \override TextSpanner #'bound-details #'left #'padding = #(car
shorten)
\once \override TextSpanner #'bound-details #'right #'padding = #(cdr
shorten)
% allow adjustment of line end when it wraps to following stave
\once \override TextSpanner #'bound-details #'right-broken #'padding =
#adjEnd
% adjust LH end of line when it wraps to following stave so that it
doesn't
% extend to the left of the notes on the stave
\once \override TextSpanner #'bound-details #'left-broken #'X =
#adjBreak
% optional override to remove text and bracket edge at line breaks
\once \override TextSpanner #'bound-details #'left-broken #'text = ##f
\once \override TextSpanner #'bound-details #'right-broken #'text = ##f
#})
% rotated text spanner
rtspan = #(define-music-function (parser location text rightY offset shorten)
(string? number? pair? pair?)
#{
\once \override TextSpanner #'bound-details #'left #'text =
\markup \italic \small \concat { { $text } " " }
\once \override TextSpanner #'direction = #DOWN
\once \override TextSpanner #'(bound-details right Y) = #rightY
\once \override TextSpanner #'extra-offset = #offset
\once \override TextSpanner #'dash-period = #1.5
\once \override TextSpanner #'dash-fraction = #0.3
\once \override TextSpanner #'thickness = #0.8
\once \override TextSpanner #'bound-details #'right #'text =
\markup { \draw-line #'(0 . 2) }
\once \override TextSpanner #'bound-details #'left
#'stencil-align-dir-y = #DOWN
\once \override TextSpanner #'bound-details #'left #'padding = #(car
shorten)
\once \override TextSpanner #'bound-details #'right #'padding = #(cdr
shorten)
#})
% usage e.g.:
% \strfngr "p" #0 #DOWN #'(0 . -0.5) #5 #1
strfngr = #(define-music-function (parser location finger osp dirn shorten
adjBreak adjEnd)
(string? number? number? pair? number? number?)
#{
% set osp to 999 if spanner is colliding with another element
% this will position the spanner outside all other elements
% can be normally be set to zero
\once \override TextSpanner #'outside-staff-priority = #osp
\once \override TextSpanner #'direction = #DOWN
\once \override TextSpanner #'font-size = #-4
\once \override TextSpanner #'bound-details #'left #'text = \markup
\concat { { $finger } " " }
% \once \override TextSpanner #'font-shape = #'upright
\once \override TextSpanner #'direction = #dirn
% setup dashed line and draw a bracket edge on RHS
\once \override TextSpanner #'dash-period = #0.8
\once \override TextSpanner #'dash-fraction = #0.6
\once \override TextSpanner #'thickness = #0.8
\once \override TextSpanner #'bound-details #'right #'text = \markup {
\draw-line #(cons 0 (/ dirn -2)) }
% set alignment of line with reference to left text
\once \override TextSpanner #'bound-details #'left
#'stencil-align-dir-y = #CENTER
\once \override TextSpanner #'bound-details #'left #'padding = #(car
shorten)
\once \override TextSpanner #'bound-details #'right #'padding = #(cdr
shorten)
% allow adjustment of line end when it wraps to following stave
\once \override TextSpanner #'bound-details #'right-broken #'padding =
#adjEnd
% adjust LH end of line when it wraps to following stave so that it
doesn't
% extend to the left of the notes on the stave
\once \override TextSpanner #'bound-details #'left-broken #'X =
#adjBreak
% optional override to remove text and bracket edge at line breaks
\once \override TextSpanner #'bound-details #'left-broken #'text = ##f
\once \override TextSpanner #'bound-details #'right-broken #'text = ##f
#})
% left-hand finger guide before note
#(define (guide-finger slope len fingering)
;; Purpose
;; add ornamentation line before fingering symbol to indicate figner
movement along a
;; string without making a sound (i.e., not a glissando)
;; Parameters
;; slope : angle of rotation around right centre
;; len : length of line prefacing fingering
;; fingering : fingering designation for note
(let ((music (make-music 'FingeringEvent)))
(set! (ly:music-property music 'tweaks)
(acons 'stencil
(lambda (grob)
(let* (
;; assign to finger the "digit" property from parameter
"fingering"
(finger (ly:music-property fingering 'digit))
;; DOES NEXT LINE GENERATE A STENCIL FROM THE STRING FOR A
FINGER NUMBER???
;; IS THERE A WAY TO GENERATE A FINGER STENCIL THAT IS A FINGER
NUMBER RATHER THAN A MARKUP?
(finger-stil (grob-interpret-markup grob (number->string
finger)))
;; assign to finger-stil-X the width of finger-stil
(finger-stil-X (ly:stencil-extent finger-stil X))
;; assign to finger-stil-Y the height slightly below the middle
of finger number
(finger-stil-Y (* 0.4 (interval-length (ly:stencil-extent
finger-stil Y))))
;; assign to guide-line a horizontal line-stencil with thickness
;; and length "len" up "finger-stil-Y" vertically on
fingering number
(guide-line (make-line-stencil 0.13 0 finger-stil-Y len
finger-stil-Y))
;; rotate guide-line "slope" degrees around right centre
(guide-line (ly:stencil-rotate guide-line slope 1 0))
;; center line vertically on fingering number
(guide-line-X (ly:stencil-extent guide-line X))
;; assign to stil the concatenation of stencil line and finger
number along X-axis on right
;; add padding 0.2 to move guide slightly left from finger
number
(stil (ly:stencil-combine-at-edge guide-line X 1 finger-stil
0.2))
;; assign to stil-ext-X the width of stil
(stil-ext-X (ly:stencil-extent stil X))
) ;; end declarations
;; fingering oriented on left/right side ?
(if (= 0 (ly:grob-property grob 'side-axis))
;; return finger guide as is
stil
;; otherwise, create and return new finger guide with X-extents
positioned with the number
;; centered over the note
(ly:make-stencil
;; copy expr from stil
(ly:stencil-expr stil)
(coord-translate stil-ext-X (* 0.5 (- (interval-length
stil-ext-X) (interval-length finger-stil-X))))
;;#########################################################################
;; widen the stencil by doubling its width minus one
finger-number width,
;; which should have a center point under the remaining
finger number
;;#########################################################################
;; (cons 0 (- (* 2 (interval-length stil-ext-X)) (interval-length
finger-stil-X)))
;; (cons 0 (+ (interval-length stil-ext-X) (* 1.6 (-
(interval-length stil-ext-X) (interval-length finger-stil-X)))))
(ly:stencil-extent finger-stil Y)
) ;; end make-stencil
) ;; end if
) ;; end let
) ;; end lambda
(ly:music-property music 'tweaks)
) ;; end acons
) ;; end set
music
) ;; end let
)
% % left-hand finger guide finger between notes
% #(define (gx slope character fingering)
% ;; Purpose
% ;; add ornamentation character before fingering symbol
% ;; Parameters
% ;; slope : angle of rotation around right centre
% ;; character : ornamentation character for fingering
% ;; fingering : fingering designation for note
% ;; Examples
% ;; (gx 0 #x2013 fingering)
% ;; unicode #x2011 <-> #x2015 are different length "-" punctuation
% (let ((music (make-music 'FingeringEvent))
% (finger (ly:music-property fingering 'digit))
% (guide-char character))
% (set! (ly:music-property music 'tweaks)
% (acons 'stencil
% (lambda (grob)
% (ly:stencil-aligned-to
% (ly:stencil-combine-at-edge
% (ly:stencil-rotate (grob-interpret-markup grob (markup
#:char guide-char))
% slope 1 0) ;; rotate "slope" around right
centre
% X 1 ;; combine stencils
along X-axis on right
% (grob-interpret-markup grob (number->string finger))
% 0.2)
% 0 1)
% ) ;; add padding to move guide
slightly left from finger number
% (ly:music-property music 'tweaks)))
% music))
% guide-neutral
% <c-\gn-1>4 c4^\gn^2 c4-\gn-3 c4_\gn_4
gn = #(define-music-function (parser location fingering) (ly:music?)
(guide-finger 0 0.7 fingering)) % line-slope line-length
% guide-down
% <c-\gd-1>4 c4^\gd^2 c4-\gd-3 c4_\gd_4
gd = #(define-music-function (parser location fingering) (ly:music?)
(guide-finger 20 0.7 fingering))
% guide-up
% <c-\gu-1>4 c4^\gu^2 c4-\gu-3 c4_\gu_4
gu = #(define-music-function (parser location fingering) (ly:music?)
(guide-finger -20 0.7 fingering))
% guide slope
% <c-\gsl #-15 -1>4 c4^\gsl #45 ^2 c4-\gsl #-15 -3 c4_\gsl# -14 _4
gsl = #(define-music-function (parser location slope fingering) (number?
ly:music?)
(guide-finger slope 0.7 fingering))
% guide slope length
% <c-\gsl #-15 #1 -1>4 c4^\gsl #45 #1 ^2 c4-\gsl #-15 #1 -3 c4_\gsl 1 #2 _4
gsn = #(define-music-function (parser location slope len fingering) (number?
number? ly:music?)
(guide-finger slope len fingering))
% function to slope beams. Often needed when fingering is colliding with the
beam
% the two parameters are the position of the left- and right-hand ends of the
beam
% eg. \slope #6 #7
slope = #(define-music-function (parser location move) (pair?) #{
\once \override Beam #'positions = #move
#})
% shortcut for once-off moving of fingering, string number indications, etc
% eg. \offset "StringNumber" #'(0.5 . 0)
% \offset "Fingering" #'(0.7 . 0)
% \offset "TextScript" #'(0 . -4)
offset = #(define-music-function (parser location type move) (string? pair?) #{
\once \override $type #'extra-offset = #move
#})
% shortcut for moving notecolumn left or right
% eg. \ncShift #0.7
% to move 0.7 staff units to the right
ncShift = #(define-music-function (parser location move) (number?) #{
\once \override NoteColumn #'force-hshift = #move
#})
% shortcut for moving rest left or right
% eg. \rShift #0.7
% to move 0.7 staff units to the right
rShift = #(define-music-function (parser location move) (number?) #{
\once \override Voice.Rest #'X-offset = #move
#})
#(define (colour-alteration? note symbol)
(let ((p (ly:music-property note 'pitch)))
(and (ly:pitch? p)
(equal? (ly:pitch-alteration p) symbol))))
colouration = #(define-music-function (parser location music) (ly:music?)
(music-map
(lambda (event)
(if (eq? 'EventChord (ly:music-property event 'name))
(map (lambda (note)
(if (colour-alteration? note SHARP)
(ly:music-set-property! note 'tweaks (list
(cons 'color red))) note)
(if (colour-alteration? note FLAT)
(ly:music-set-property! note 'tweaks (list
(cons 'color blue))) note))
(ly:music-property event 'elements))) event) music))
stemLen = #(define-music-function (parser location stemlength) (number?) #{
\once \override Stem #'length = #stemlength
#})
% extend laissez-vibrer tie
extendLV = #(define-music-function (parser location further) (number?) #{
\once \override LaissezVibrerTie #'X-extent = #'(0 . 0)
\once \override LaissezVibrerTie #'details #'note-head-gap = #(/
further -2)
\once \override LaissezVibrerTie #'extra-offset = #(cons (/ further 2)
0)
#})
% lilypond doesn't correctly handle accidental rules on volta alternatives
% e.g. \repeat { c } \alternative { { cis } { \forget c } }
forget = #(define-music-function (parser location music) (ly:music?) #{
\accidentalStyle "forget"
$music
\accidentalStyle "modern"
#})
% shortcut for setting arpeggio padding
arppad = #(define-music-function (parser location pad) (number?) #{
\once \override Arpeggio #'padding = #pad
#})
arpspace = #(define-music-function (parser location extent) (pair?) #{
\once \override Staff.Arpeggio #'X-extent = #extent
#})
barspace = #(define-music-function (parser location extent) (pair?) #{
\once \override Staff.BarLine #'extra-spacing-width = #extent
#})
clefspace = #(define-music-function (parser location extent) (pair?) #{
\once \override Staff.Clef #'extra-spacing-width = #extent
#})
stemspace = #(define-music-function (parser location extent) (pair?) #{
\once \override Staff.Stem #'X-extent = #extent
#})
restspace = #(define-music-function (parser location extent) (pair?) #{
\once \override Staff.Rest #'X-extent = #extent
#})
arpfinger = #(define-music-function (parser location pad) (number?) #{
\once \override Staff.Arpeggio #'direction = #RIGHT
\once \override Staff.Arpeggio #'padding = #pad
#})
accspace = #(define-music-function (parser location extent) (pair?) #{
\once \override Staff.Accidental #'X-extent = #extent
#})
% e.g. c-\underlineFinger #4
underlineFinger = #(define-music-function (parser location finger) (integer?)
(let ((music (make-music 'FingeringEvent)))
(set! (ly:music-property music 'digit) finger)
(set! (ly:music-property music 'tweaks)
(acons 'stencil (lambda (grob)
(grob-interpret-markup
grob
(markup #:underline (number->string finger))))
(ly:music-property music 'tweaks)))
music))
#(define ((grob2-extra-offset offset) grob)
(let* (
(orig (ly:grob-original grob))
(siblings (if (ly:grob? orig)
(ly:spanner-broken-into orig)
'())))
(if (and (>= (length siblings) 2)
(eq? (car (last-pair siblings)) grob))
(ly:grob-set-property! grob 'extra-offset offset))))
albOffset = #(define-music-function (parser location type move) (string? pair?)
#{
\once \override $type #'after-line-breaking = #(grob2-extra-offset move)
#})
#(define-public EasyHeadsSize 1.0)
#(define-public (note-head::Brew-ez-stencil grob)
(let* ((log (ly:grob-property grob 'duration-log))
(pitch (ly:event-property (event-cause grob) 'pitch))
(pitch-index (ly:pitch-notename pitch))
(note-names (ly:grob-property grob 'note-names))
(pitch-string (if (and (vector? note-names)
(> (vector-length note-names) pitch-index))
(vector-ref note-names pitch-index)
(string
(integer->char
(+ (modulo (+ pitch-index 2) 7)
(char->integer #\A))))))
(staff-space (ly:staff-symbol-staff-space grob))
(line-thickness (ly:staff-symbol-line-thickness grob))
(stem (ly:grob-object grob 'stem))
(stem-thickness (* (if (ly:grob? stem)
(ly:grob-property stem 'thickness)
1.3)
line-thickness))
(radius (/ (+ staff-space line-thickness) EasyHeadsSize))
(letter (markup #:center-align #:vcenter pitch-string))
(filled-circle (markup #:draw-circle radius 0 #t)))
(ly:stencil-translate-axis
(grob-interpret-markup
grob
(if (>= log 2)
(make-combine-markup
filled-circle
(make-with-color-markup white letter))
(make-combine-markup
(make-combine-markup
filled-circle
(make-with-color-markup white (make-draw-circle-markup
(- radius stem-thickness) 0 #t)))
letter)))
radius X)))
EasyHeadsOn = {
\override NoteHead #'stencil = #note-head::Brew-ez-stencil
% \override NoteHead #'font-size = #-8
\override NoteHead #'font-size = #-1
\override NoteHead #'font-family = #'sans
\override NoteHead #'font-series = #'bold
}
EasyHeadsOff = {
\revert NoteHead #'stencil
\revert NoteHead #'font-size
\revert NoteHead #'font-family
\revert NoteHead #'font-series
}
\layout {
\pointAndClickOff
\override Score.ClefModifier #'font-shape = #'upright
\override Score.ClefModifier #'font-name = #"times"
\override Score.ClefModifier #'font-size = #-2
\override Score.LyricText #'font-size = #3
\override Score.Fingering #'font-name = #"sans-serif"
\override Score.Fingering #'font-size = #-2
\override Score.StrokeFinger #'font-name = #"sans-serif"
\override Score.StrokeFinger #'font-size = #-1
indent = 0
} % layout
% Local Variables: %
% tab-width: 4 %
% End: %
=================================================
OCanada.pdf
Description: Adobe PDF document
lessons.pdf
Description: Adobe PDF document