lilypond-user
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]