lilypond-user
[Top][All Lists]
Advanced

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

Re: Triplets


From: Richard Shann
Subject: Re: Triplets
Date: Sat, 14 Jan 2017 19:57:26 +0000

On Sat, 2017-01-14 at 18:14 +0000, J Martin Rushton wrote:
> Hi,
> I'm trying to set a melody from a 19thC source as closely as possible to
> the original.  Triplets are indicated with a curved bracket rather than
> the square one Lily uses by default.  I've come up with a mechanism:
> 
> \relative c'' {
>   \tupletUp
>   \override TupletBracket.bracket-visibility = ##f
>   \tuplet 3/2 { c8( c c ) }
> }
> 
> but using a slur in this way seems wrong.  Is there a better way? 

yes!

>  I'm
> using Lily 2.14 in this instance.
That might be a problem. The solution lies in some code posted a month
or two back on this list:

tupletBracketToSlur = {
  % Use slur-stencil
  \\override TupletBracket.stencil = #ly:slur::print
  %% Use 'thickness from Slur
  \\override TupletBracket.thickness = #1.2
  %% 'control-points need to be set
  \\override TupletBracket.control-points =
    #(lambda (grob)
      (let* ((x-pos (ly:grob-property grob 'X-positions))
             (pos (ly:grob-property grob 'positions))
             (x-ln (interval-length x-pos))
             (dir (ly:grob-property grob 'direction))
             ;; read out the height of the TupletBracket, maybe
negative!
             (height (- (cdr pos) (car pos)))
             ;; height-corr is introduced because sometimes the shape of
the
             ;; slur needs to be adjusted.
             ;; It is used in the 2nd/3rd control-point.
             ;; The value of 0.3 is found by trial and error
             (height-corr (* 0.3 dir height))
             (edge-height (ly:grob-property grob 'edge-height '(0.7 .
0.7)))
             (pad 1.0))
        (list
          ;; first cp
          (cons
            (+ (car x-pos) 0.5)
            (- (+ (* dir pad) (+ (car pos) (* -1 dir (car
edge-height))))
              (if (= dir -1)
                  (if (> height 3)
                    (/ dir 2.0)
                    0.0)
                  (if (< height -3)
                    (/ dir 2.0)
                    0.0))))
          ;; second cp
          (cons
            (+ (car x-pos) (* x-ln 1/4))
            (+ (* dir pad) (+ (car pos) (* dir (+ 0.5 height-corr)))))
          ;; third cp
          (cons
            (+ (car x-pos) (* x-ln 3/4))
            (+ (* dir pad) (+ (cdr pos) (* dir (- 0.5 height-corr)))))
          ;; fourth cp
          (cons
            (- (cdr x-pos) 0.5)
            (+ (* dir pad) (+ (cdr pos) (* -1 dir (cdr edge-height)))))
        )))
  \\override TupletBracket.staff-padding = #'()
  #(define (invert-direction x) (if (eq? UP
(ly:tuplet-bracket::calc-direction x)) DOWN UP))
\\override TupletBracket.direction = #invert-direction
}


then you put \tupletBracketToSlur in a \layout{ } block.

I've just cut-and-pasted this codefrom the command in Denemo that
inserts this stuff for you.

Richard





reply via email to

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