2018-06-22 9:05 GMT+02:00 Menu Jacques <[email protected]>:
> Hello folks,
>
> Is it possible to obtain some text along a glissando, such as:
>
>
> The Internals Reference tells there’s no text property attached to a
> Glissando object, and I couldn’t find anything in the snippets.
>
> Thanks for your help!
>
> JM
>
>
>
Hi,
attached what I currently use.
HTH,
Harm
%%%% written for 2.19.65
%% c/p from lily-library.scm (it is not public)
#(define (sign x)
(if (= x 0)
0
(if (< x 0) -1 1)))
#(define (radians->degree radians)
(/ (* radians 180) PI))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Glissando with text
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Reads from Glissando.details
%%%% - glissando-text
%%%% - glissando-text-font-size
%%%% - glissando-text-padding
#(define* ((gliss-plus-text #:optional always-add-text) grob)
(let* ((orig-grob (ly:grob-original grob))
(broken-beams (ly:spanner-broken-into orig-grob))
(stil (ly:line-spanner::print grob)))
(if (or (null? broken-beams)
(and (pair? broken-beams)
(or
always-add-text
(equal? grob (car broken-beams)))))
(if (not (ly:stencil? stil))
#f
(let* ((layout (ly:grob-layout grob))
(line-thickness
(ly:output-def-lookup layout 'line-thickness))
(props
(ly:grob-alist-chain
grob
(ly:output-def-lookup layout 'text-font-defaults)))
(font
(ly:paper-get-font
layout
(cons
'((font-encoding . fetaMusic) (font-name . #f))
props)))
(trill-glyph
(ly:font-get-glyph font "scripts.trill_element"))
(trill-glyph-height
(interval-length (ly:stencil-extent trill-glyph Y)))
(zigzag-width
(ly:grob-property grob 'zigzag-width))
(thickness (ly:grob-property grob 'thickness))
(thick
(if (number? thickness)
(/ thickness 10)
line-thickness))
(style (ly:grob-property grob 'style))
(corr
(cond ((eq? style 'trill)
trill-glyph-height)
((eq? style 'zigzag)
(+ thick zigzag-width))
(else 0)))
(stil-x-ext (ly:stencil-extent stil X))
(stil-y-ext (ly:stencil-extent stil Y))
(stil-x-length (- (cdr stil-x-ext) (car stil-x-ext)))
(stil-y-length (- (cdr stil-y-ext) (car stil-y-ext)))
(details (ly:grob-property grob 'details))
(gliss-text
(assoc-get 'glissando-text details "gliss."))
(gliss-text-font-size
(assoc-get 'glissando-text-font-size details -5))
(gliss-text-padding
(assoc-get 'glissando-text-padding details 0.5))
(left-bound-info (ly:grob-property grob 'left-bound-info))
(y-left (assoc-get 'Y left-bound-info))
(right-bound-info (ly:grob-property grob 'right-bound-info))
(y-right (assoc-get 'Y right-bound-info))
(slant (sign (- y-right y-left)))
(gradient
(/ (- stil-y-length corr) stil-x-length))
;; `ly:stencil-rotate' needs an angle in degrees...
;; TODO use ly:angle ?
(alpha
(radians->degree
(angle
(make-rectangular
stil-x-length
(- stil-y-length corr line-thickness)))))
(text-stencil
(grob-interpret-markup
grob
(make-halign-markup CENTER
(make-fontsize-markup
gliss-text-font-size
gliss-text))))
(text-stencil-height
(interval-length (ly:stencil-extent text-stencil Y)))
(y-move
(+
(/ text-stencil-height 2)
gliss-text-padding))
(rotated-text-stil
(ly:stencil-rotate text-stencil (* slant alpha) 0 0))
(text-center-X
(interval-center (ly:stencil-extent rotated-text-stil X)))
(translated-text-stencil
(ly:stencil-translate
rotated-text-stil
;; Constuction-helpers
;text-stencil
;(make-cross-stencil '(0 . 0)) ;; not included atm
(cons
(+
(car stil-x-ext)
(/ stil-x-length 2)
(* slant -1 y-move gradient))
(+
(car stil-y-ext)
(/ stil-y-length 2)
y-move)))))
(ly:stencil-add
stil
;; Construction-helpers
;;
;(make-line-stencil
; 0.1
; (+ (car stil-x-ext)(/ stil-x-length 2))
; (+ (car stil-y-ext)(/ stil-y-length 2))
; (+ (car stil-x-ext)(/ stil-x-length 2)(* slant -1 10 gradient))
; 10)
;;
;; (2) colors the text-part
;;
;(stencil-with-color translated-text-stencil red)
translated-text-stencil
)))
stil)))
glissandoTextOn =
\temporary \override Glissando.stencil =
#(gliss-plus-text
;; change to true, if added text is wished for both parts of a broken
;; glissando
;; TODO added text at second parts needs to be improved, vertical
;; positioning is sometimes bad
#f)
glissandoTextOff = \revert Glissando.stencil
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXAMPLE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%{
\version "2.19.65"
\paper { line-width = 70 }
\layout {
\override Glissando.details.glissando-text = \markup \box "glissglissgliss."
\override Glissando.details.glissando-text-font-size = -5
%\override Glissando.details.glissando-text-padding = 1
\override Glissando.font-shape = #'italic
\override Glissando.font-series = #'bold
\override Glissando.breakable = ##t
\override Glissando.bound-details.right.padding = 0
\override Glissando.bound-details.right-broken.padding = 0
\override Glissando.bound-details.left.padding = 0
\override Glissando.bound-details.left-broken.padding = 0
\override Glissando.color = #blue
\override NoteHead.layer = -300
\override NoteHead.color = #'(0.8 0.8 0.8)
%\override Glissando.thickness = 10
}
\markup \box CENTER
{
\glissandoTextOn
d''1\glissando
\break
s1
d''
}
{
\override Glissando.style = #'trill
\glissandoTextOn
d''1\glissando
\break
s1
d''
}
{
\override Glissando.style = #'zigzag
\glissandoTextOn
d''1\glissando
\break
s1
d''
}
%%%%%%%%%%%%%%%%%%%%%%% UP
\markup \box UP
{
\glissandoTextOn
d'1\glissando
\break
s1
d''
}
{
\override Glissando.style = #'trill
\glissandoTextOn
d'1\glissando
\break
s1
d''
}
{
\override Glissando.style = #'zigzag
\glissandoTextOn
d'1\glissando
\break
s1
d''
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DOWN
\markup \box DOWN
{
\glissandoTextOn
d''1\glissando
\break
s1
d'
}
{
\override Glissando.style = #'trill
\glissandoTextOn
d''1\glissando
\break
s1
d'
}
{
\override Glissando.style = #'zigzag
\glissandoTextOn
d''1\glissando
\break
s1
d'
}
%}_______________________________________________
lilypond-user mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/lilypond-user