lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Symmetrical hairpins


From: Valentin Petzel
Subject: Re: Symmetrical hairpins
Date: Tue, 26 Sep 2023 01:01:58 +0200

Hello Arjen,

I’m wondering if in your case it ight be beneficial to not create two Hairpins, 
but rather a special case stencil like this:

%%%%%

#(define (ly:expr-hairpin::print grob)
   (let* ((orig (ly:hairpin::print grob))
          (sp (ly:grob-property grob 'shorten-pair '(0 . 0)))
          (spl (car sp))
          (spr (cdr sp))
          (t (ly:grob-property grob 'text #f))
          (tst (if t (grob-interpret-markup grob t) empty-stencil))
          (tst (ly:stencil-translate-axis
                (ly:stencil-aligned-to (ly:stencil-aligned-to tst Y CENTER) X 
CENTER)
                (interval-center (ly:stencil-extent orig X))
                X))
          (bp (ly:grob-property grob 'gap 0.3))
          (bp2 (ly:grob-property grob 'bound-padding 0.3))
          (len (interval-length (ly:stencil-extent orig X)))
          (pad (if t (* 2 bp2) bp))
          (shorten (/ (+ len pad (interval-length (ly:stencil-extent tst X))) 
2))
          (st1 #f)
          (st2 #f))
     (ly:grob-set-property! grob 'shorten-pair (cons spl (+ spr shorten)))
     (ly:grob-set-property! grob 'grow-direction RIGHT)
     (set! st1 (ly:hairpin::print grob))
     (ly:grob-set-property! grob 'shorten-pair (cons (+ spl shorten) spr))
     (ly:grob-set-property! grob 'grow-direction LEFT)
     (set! st2 (ly:hairpin::print grob))
     (ly:grob-set-property! grob 'shorten-pair sp)
     (ly:grob-set-property! grob 'grow-direction RIGHT)
     (ly:stencil-add st1 st2 tst)))

expr = -\tweak stencil #ly:expr-hairpin::print -\<

{
  
  2\expr 2\!
  2\mp\expr 2\!
  1\mp\tweak text \markup\dynamic f \expr 1 1 \!
}

%%%%%

Cheers,
Valentin

Am Sonntag, 24. September 2023, 16:58:18 CEST schrieb Arjen:
> Hi,
> 
> I'm trying to place symmetrical hairpins under a bar, but it turns out
> that the left (crescendo) hairpin is longer than the right
> (descrescendo) hairpin.
> MWE:
> \version "2.24.1"
> \new Voice \relative <<
>    { c'2 c2 }
>    { s2\< s2\> <>\! }
> 
> 
> Tweaking with the lengths of the spacers turns out very difficult and
> results in hairpins at unequal vertical positions:
> \version "2.24.1"
> \new Voice \relative <<
>    { c'2 c2 }
>    { s4...\< s32\! s2\> <>\! }
> 
> 
> And sometimes I need an absolute dynamic in front of the hairpins, in
> which case the left hairpin becomes very small:
> \version "2.24.1"
> \new Voice \relative <<
>    { c'2 c2 }
>    { s4...\pp\< s32\! s2\> <>\! }
> 
> 
> Is there an (hopefully easy) way to give both hairpins equal size and
> vertical alignment, regardless of the presence of an absolute dynamic in
> front?
> 
> Regards,
> Arjen

Attachment: signature.asc
Description: This is a digitally signed message part.


reply via email to

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