[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
dynamic alignment
From: |
Jan-Peter Voigt |
Subject: |
dynamic alignment |
Date: |
Mon, 13 Dec 2010 12:21:09 +0100 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101208 Lightning/1.0b2 Thunderbird/3.1.7 |
Hello list,
I wrote a script to align dynamics centered on the corresponding note:
--snip--
\version "2.12.3"
% calculate x-alignment based on attribute text + dynamic text
#(define-markup-command (center-dyn layout props atr-text dyn)(markup?
string?)
"x-align on center of dynamic"
(let* (
(text (string-append atr-text " "))
(atr-stencil (interpret-markup layout props (markup
#:normal-text #:italic text)))
(dyn-stencil (interpret-markup layout props (markup #:dynamic
dyn)))
(atr-x-ext (ly:stencil-extent atr-stencil X))
(dyn-x-ext (ly:stencil-extent dyn-stencil X))
(atr-x (- (cdr atr-x-ext)(car atr-x-ext)))
(dyn-x (- (cdr dyn-x-ext)(car dyn-x-ext)))
(x-align
(* (-
(/ (+ atr-x (/ dyn-x 2)) (+ atr-x dyn-x) )
0.5) 2)
)
)
(interpret-markup layout props (markup #:halign x-align
#:concat (#:normal-text #:italic text #:dynamic dyn)))
))
% define some dynamics
pocof = #(make-dynamic-script (markup #:center-dyn "poco" "f"))
menof = #(make-dynamic-script (markup #:center-dyn "meno" "f"))
subp = #(make-dynamic-script (markup #:center-dyn "subito" "p"))
% activate X-offset, so that halign works
dynx = #(define-music-function (parser location musik)(ly:music?)
#{
\override DynamicText #'X-offset = #0 $musik \revert DynamicText
#'X-offset
#})
%%%%% example %%%%%
<<
\new Staff <<
\relative c'' {
d \dynx c\pocof d e | d\ff d cis eis ~ | \dynx eis1\subp | r4
\dynx b\menof c\f
}
>>
>>
--snip--
This script first calculates the widthes of the "attribute"-text (wa)
and the dynamic text (wd), so that I can calculate the right \halign value:
halign = ((wa + (wd / 2)) / (wa + wd) - 0.5) * 2
Then I use a markup with \halign. This works quite well as long
DynamicText #'X-offset is set! If that is set all other dynamics are
aligned badly.
So I wrote a little function, that sets and unsets (reverts) that value
to let the halign work.
My question is:
Is it possible to set that value inside the make-dynamic-script or align
it some other way, so that I can simply use my defined \pocof (etc.)
without switching X-offset on and off?
Regards,
Jan-Peter
- dynamic alignment,
Jan-Peter Voigt <=