[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Pedal indication
From: |
Kieren MacMillan |
Subject: |
Re: Pedal indication |
Date: |
Sun, 23 Oct 2016 20:12:41 -0400 |
Hi Andrew,
Don’t have time to do a custom snippet for you, but maybe this boilerplate will
give you enough hints?
Best,
Kieren.
%%% BOILERPLATE SNIPPET BEGINS
\version "2.19"
pedalSim =
\once \override Staff.PianoPedalBracket.stencil =
#(lambda (grob)
(let* (;; have we been split?
(orig (ly:grob-original grob))
;; if yes, get the split pieces (our siblings)
(siblings (if (ly:grob? orig)
(ly:spanner-broken-into orig)
'())))
;; Modify the unbroken grob-stencil or the first part of the broken
;; grob-stencil.
(if (or (null? siblings)
(and (>= (length siblings) 2)
(eq? (car siblings) grob)))
(let* (;; Get the default-stencil and its x-dimension and x-length.
(stil (ly:piano-pedal-bracket::print grob))
(stil-x-extent (ly:stencil-extent stil X))
(stil-x-length (interval-length stil-x-extent))
;; Create a stencil to be added to the default-stencil.
;; Gets its x-dimension and x-length.
(sim-stil
(grob-interpret-markup grob
(markup #:fontsize -1 #:hspace 0.75 #:raise -0.05 #:italic
"sim.")))
(sim-stil-x-extent (ly:stencil-extent sim-stil X))
(sim-stil-x-length (interval-length sim-stil-x-extent))
(thickness (max (layout-line-thickness grob) 0.1))
;; The value to shorten the default-stencil from the right side.
;; 0.8 will shorten about 80%.
;; Hard-coded, could be turned into a music-function.
(amount 0.6))
;; Print a warning if the length of the default-stencil would not
;; warrant a sufficient output.
(if (> sim-stil-x-length stil-x-length)
(ly:warning "PianoPedalBracket is too short"))
;; Shorten the default-stencil.
(ly:grob-set-property!
grob
'shorten-pair
(cons 0 (* amount stil-x-length)))
;; Calculate the final stencil.
(let* (;; Get the shortened (default-)stencil
;; and its y-dimension.
(shortened-stil (ly:piano-pedal-bracket::print grob))
(shortened-stil-y-ext (ly:stencil-extent shortened-stil Y))
;; Modify the sim-stil to gain a little gap to the left and
;; enlarge it downwards a little (otherwise the stencil-whiteout
;; will not work sufficient.
(new-sim-stil
(ly:make-stencil
(ly:stencil-expr sim-stil)
(interval-widen sim-stil-x-extent (* 2 thickness))
(cons (- (car shortened-stil-y-ext) thickness)
(cdr shortened-stil-y-ext)))))
(ly:stencil-add
shortened-stil
(ly:stencil-translate-axis
(stencil-whiteout-box new-sim-stil)
(* (- 1 amount) (- stil-x-length sim-stil-x-length))
X))))
;; TODO:
;; Is there any need to return #f explicitly?
;; Deleting it seems to make no difference.
;#f
)))
pedaltesting = {
\set Staff.pedalSustainStyle = #'bracket
c''1\sustainOn \pedalSim c''\sustainOff\sustainOn c''1\sustainOff
}
\score { \pedaltesting }
%%% BOILERPLATE SNIPPET ENDS
________________________________
Kieren MacMillan, composer
‣ website: www.kierenmacmillan.info
‣ email: address@hidden
- Pedal indication, Andrew Bernard, 2016/10/23
- Re: Pedal indication,
Kieren MacMillan <=