lilypond-user
[Top][All Lists]
Advanced

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

Re: placement sostenuto


From: Thomas Morley
Subject: Re: placement sostenuto
Date: Sun, 25 Sep 2011 20:01:08 +0200

Hi David

2011/9/24 David Nalesnik <address@hidden>
Hi Harm,

Thanks for the insight!

So then you could do something like this:
 
I tried, but without success. :)

\version "2.14.2"

#(define (padding-for-tenuto x)
   (lambda (grob) 
     (if (equal? "tenuto" (ly:prob-property (assoc-ref (ly:grob-properties grob) 'cause) 'articulation-type))
         (ly:grob-set-property! grob 'padding x)
         '())))
         
#(define (custom-articulation-padding type x)
   (lambda (grob) 
     (if (equal? type (ly:prob-property (assoc-ref (ly:grob-properties grob) 'cause) 'articulation-type))
         (ly:grob-set-property! grob 'padding x)
         '())))
         
\relative c'' {
  \once \override  Script #'after-line-breaking = #(padding-for-tenuto 0.75)
  f1--
  f1--
  \override Script #'after-line-breaking = #(custom-articulation-padding "accent" 1)
  f->
  f->
  \revert Script #'after-line-breaking
  f->
}

I don't know if I've gotten at the name of the articulation in the best way, but this works.  One drawback is that there can only be one override of 'after-line-breaking at a time.  
 
'before-line-breaking works too (see code below).
 
So, if you want multiple changes to default values -- a change to tenuto, a change to accent, etc. -- these should be added as conditions to the function.  The second function lets you plug in the name of the articulation you want to override.

I did it this way:

\version "2.14.2"

#(define my-script-alist '(
    ("staccato" . (font-size . 15))
    ("accent" . (font-size . 4))
    ("tenuto" . (rotation . (45 0 0)))
    ("staccatissimo" . (padding . 2))
    ))
     
#(define ((custom-script-tweaks type) grob)
   (map (lambda (arg)
     (let ((lst (assoc-ref my-script-alist arg)))
        (if (equal? arg (ly:prob-property (assoc-ref (ly:grob-properties grob) 'cause) 'articulation-type))
            (ly:grob-set-property! grob (car lst) (cdr lst))
            '())))
   type))
     
#(define (custom-articulation-tweaks type property x)
   (lambda (grob)
     (if (equal? type (ly:prob-property (assoc-ref (ly:grob-properties grob) 'cause) 'articulation-type))
         (ly:grob-set-property! grob property x)
         '())))
       
\relative c'' {
  f1--
  f1--
  \override  Script #'after-line-breaking =
      #(custom-articulation-tweaks "accent" 'color red)
  \override  Script #'before-line-breaking =
      #(custom-script-tweaks '("staccato" "tenuto" "accent" "staccatissimo"))
   
  f-. f-| f-> f-> f-- f-|
  \revert Script #'after-line-breaking
  \revert Script #'before-line-breaking
  f-> f-.
}

To override "accent" I used the second function with 'before-line-breaking. I'd prefer to store several properties in an alist, but I couldn't figure out how to read-out and call.

p.e.:
#(define ls '(
    ("staccato" . ((color . (1 0 0))))
    ("accent" . ((font-size . 4)(color . (1 0 0))))
    ("tenuto" . ((rotation . (45 0 0))))
    ("staccatissimo" . ((padding . -10) (color . (1 0 0))))
    ))

Any idea?

Best,
  Harm


reply via email to

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