On Fri, 7 Dec 2018 at 03:00, Ben <soundsfromso...@gmail.com> 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"
> one = \relative 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)))
    #})

one = \relative 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
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to