lilypond-user
[Top][All Lists]
Advanced

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

Re: The "let vibrate" tie


From: Ben
Subject: Re: The "let vibrate" tie
Date: Tue, 14 May 2019 09:01:08 -0400
User-agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1

On 5/14/2019 6:22 AM, Andrew Bernard wrote:
Hello Vincente,

You can use LSR 715 by Robin Bannister to extend LV's.

Thomas Morley wrote the following to help me do more extensive things with LV ties. If you need help in this or to see some examples, just ask. This may be more powerful than you require.

Andrew

%====

% adjust laissezVibrer ties
% From Thomas Morley


affect-LaissezVibrerTies =
#(define-music-function (x-start amount)
   ((list? (circular-list #f)) number?)
   "
 Extends @code{LaissezVibrerTie}s by @var{amount}.
 Example:

  @verbatim
    {
     \\affect-LaissezVibrerTies #2
     <fis' cis'' a''>2\\laissezVibrer
    }
  @end verbatim
 
 If @var{x-start} is specified, the start of a single @code{LaissezVibrerTie}
 may be tweaked. The numeric value of this element of @var{x-start} determines
 the amount of the offset.
address@hidden which should not be tweaked are to be specified with
address@hidden
 Example:

  @verbatim
    {
     \\affect-LaissezVibrerTies #'(#f 1 #f) #2
     <fis' cis'' a''>2\\laissezVibrer
    }
  @end verbatim
"
   #{
     \once
     \override LaissezVibrerTieColumn #'before-line-breaking =
     #(lambda (grob)
        (let* ((ties (ly:grob-array->list (ly:grob-object grob 'ties)))
               (c-ps
                (map
                 (lambda (tie) (ly:grob-property tie 'control-points))
                 ties))
               (directions
                (map
                 (lambda (tie) (ly:grob-property tie 'direction))
                 ties))
               (first-cps
                (map
                 (lambda (c-p) (first c-p))
                 c-ps))
               (second-cps
                (map
                 (lambda (c-p) (second c-p))
                 c-ps))
               (third-cps
                (map
                 (lambda (c-p) (third c-p))
                 c-ps))
               (fourth-cps
                (map
                 (lambda (c-p) (fourth c-p))
                 c-ps))
               (new-first-cps
                (for-each
                 (lambda (first-cp x)
                   (if (number? x)
                       (set-car! first-cp (+ (car first-cp) x))))
                 first-cps x-start))
               ;; TODO:
               ;; Several hardcoded values following here.
               ;; Find better dependencies!!
               (new-second-cps
                (for-each
                 (lambda (second-cp x dir)
                   (let ((val (if (number? x) x 0.4)))
                     (set-car!
                      second-cp
                      (+ (car second-cp) (* val 1.2)))
                     (set-cdr!
                      second-cp
                      (+ (cdr second-cp) (min (* dir (/ amount 10)) 0.3)))))
                 second-cps x-start directions))
               (new-third-cps
                (for-each
                 (lambda (third-cp x dir)
                   (let ((val (if (number? x) 0.2 0.4)))
                     (set-car!
                      third-cp
                      (+ (car third-cp) (- amount val)))
                     (set-cdr!
                      third-cp
                      (+ (cdr third-cp) (min (* dir (/ amount 10)) 0.3)))))
                 third-cps x-start directions))
               (new-fourth-cps
                (for-each
                 (lambda (fourth-cp)
                   (set-car! fourth-cp (+ (car fourth-cp) amount)))
                 fourth-cps)))

          (for-each
           (lambda (tie first-cp second-cp third-cp fourth-cp)
             (ly:grob-set-property! tie 'control-points
               (list first-cp second-cp third-cp fourth-cp)))
           ties first-cps second-cps third-cps fourth-cps)))
   #})



%====


On Tue, 14 May 2019 at 18:23, Vicente Sanches <address@hidden> wrote:
How can I input that l.v. ("let vibrate") tie used generally with timpani and mallets such as vibraphone em marimba?

Tried to use open and closed parentheses without notes inside, but it didn't work.

Example in the link bellow just in the 1st seconds of the video, in the 4th and 5th measures:




I use Harm's function all the time, it works very well.

Robin's snippet #715 is also handy on-the-fly for sure, but for certain applications it needs a little more tweaking.

For example, the l.v. ties are touching noteheads on a lot of chords, so you'd need to simply adjust the LaissezVibrerTie.details.note-head-gap each time - which may get to be a hassle if this happens a lot across your score in different settings. :)

\version "2.19.83"


extendLV =
#(define-music-function (parser location further) (number?)
#{
  \once \override LaissezVibrerTie.X-extent = #'(0 . 0)
  \once \override LaissezVibrerTie.details.note-head-gap = #(/ further -2)
  \once \override LaissezVibrerTie.extra-offset = #(cons (/ further 2) 0)
#})

\relative c' {
  \extendLV #2.5
  e8 \laissezVibrer r16 r8
  \extendLV #1 < c e g b >4\laissezVibrer
}


%%%%%%%

% Harm's

\affect-LaissezVibrerTies #1 < c e g b >4\laissezVibrer

(see attached)

HTH


Attachment: lvties.png
Description: PNG image

Attachment: harm_lv.png
Description: PNG image


reply via email to

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