lilypond-user
[Top][All Lists]
Advanced

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

Re: Glissando tweaks in chords


From: Peter Crighton
Subject: Re: Glissando tweaks in chords
Date: Fri, 7 Dec 2018 06:06:35 +0100

On Fri, 7 Dec 2018 at 03:00, Ben <address@hidden> wrote:
On 12/6/2018 7:49 PM, Peter Crighton wrote:
Hello all,

I have the following (reduced) scenario where one voice has a chord with a glissando in it and I want to tweak both glissandos differently. Is it possible? The second (currently commented out) tweak is never applied even if I comment out the first tweak.

\version "2.19.82"
c'' {
  g2
  -\tweak Y-offset #0.25
  \glissando a
}
two = \relative c'' {
  \context Voice = "one" {
    c2
    % this tweak is never applied
    % -\tweak Y-offset #-0.25
    \glissando d
  }
}
\new Staff <<
  \new Voice = "one" \one
  \two
>>

Thanks,
Peter

A while ago, there was a function created that allowed tweaks like you're asking - I think this is what you are looking for :) It should get you started.

http://lilypond.1069038.n5.nabble.com/How-to-tweak-override-the-individual-Glissando-objects-in-a-chord-td149575.html


Thanks, that helped a lot! I boiled it down to:

\version "2.19.82"
glissTweak =
  #(define-music-function (parser location lst)(pair?)
    #{
      \once \override Glissando #'after-line-breaking =
        #(lambda (grob)
          (let ((gliss-count (ly:grob-property grob 'glissando-index)))
            (map (lambda (x)
              (let ((gliss-nmbr (car x))
                    (property-value-alist (cdr x)))
                (if (eq? gliss-nmbr gliss-count)
                  (map
                    (lambda (y) (ly:grob-set-property! grob (car y) (cdr y)))
                    property-value-alist)
                  #f)))
              lst)))
      $(make-music 'EventChord 'elements (list (make-music 'GlissandoEvent)))
    #})

c'' {
  \glissTweak #`((0 . ((Y-offset . 0.25)))
                 (1 . ((Y-offset . -0.25))))
  g2 a
}
two = \relative c'' {
  \context Voice = "one" {
    c2 d
  }
}
\new Staff <<
  \new Voice = "one" \one
  \two
>>

This is lovely and very flexible and does what I need it to do (and more).
But I would also be interested in a more minimal version because I usually only care about Y-offsets. Preferably something that wouldn’t remove the \glissandos from the syntax, so I could have something like

\once \override Glissando.Y-offset =
    #(lambda (grob) (and
      (if (= 0 (ly:grob-property grob 'glissando-index)) '0.25)
      (if (= 1 (ly:grob-property grob 'glissando-index)) '-0.25)))
<g c>2\glissando <a d>

if only that would work. It probably won’t be as easy as that. But my Scheme is very modest, and I don’t even know where to begin with something like that. Any ideas?

--
Peter Crighton | Musician & Music Engraver based in Mainz, Germany
http://www.petercrighton.de

reply via email to

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