lilypond-user
[Top][All Lists]
Advanced

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

Re: Splitting chaotic glissando to parts


From: Thomas Morley
Subject: Re: Splitting chaotic glissando to parts
Date: Wed, 13 Jun 2018 01:11:22 +0200

2018-06-12 8:35 GMT+02:00 Helge Kruse <address@hidden>:
> I have struggling for a while with few measures and I am currently a bit
> frustrated. I use the great fancy glissando from LSR 1066
> (http://lsr.di.unimi.it/LSR/Item?id=1066) to write some chaotic
> glissandi. The players should start one after the other. For that
> purpose the composer used a triplet as then notation.
>
> I think I got a acceptable result in the score. The starting points of
> the glissando lines are a bit too far from the note heads though.

You use hidden notes as glissandi-start, but they don't match
rhythmically with the chords from which the glissando should start, so
the glissando starts later, thus the gap(s)

>
> But it's hard to generate the parts. I tried \keepWithTag for the first
> time to get just one item of the triplet. But now I get even more
> unexpected results. The first part has a double glissando surprisingly.

Not really.
Glissando between chords prints per default multiple lines. Each of
those glissandi is affected by \fancy-gliss.
Though, you can customize behaviour using the
glissandoMap-context-property, see NR.

> The line ends not before but inside the terminating chord. The second
> part has an additional gap between the starting chord and the begin of
> the glissando line.
>
> How can this be fixed (double line terminating x position in 1st part)
> and improved (distance in 2nd and 3rd part)?

While on it, I simplified fancy-gliss, renaming it fancy-gliss-II.
Be aware I deleted the \once. You now need to revert it explicitely,
if you can't use \once \fancy-gliss-II
Overrides for bound-details.left/right.padding are possible.


\version "2.19.81"

%% disregard the 2.18.2-warnings
#(if (string=? (lilypond-version) "2.18.2")
  (for-each
    (lambda (i)
      (ly:expect-warning "ignoring too many clashing note columns"))
    (iota 2)))


lengthen-gliss =
#(define-music-function (parser loation nmbr)(number?)
#{
  \once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
  \once \override Glissando.minimum-length = #nmbr
#})

fancy-gliss-II =
#(define-music-function (parser location pts-list)(list?)
#{
 \override Glissando.after-line-breaking =
  #(lambda (grob)
    (let ((stil (ly:line-spanner::print grob)))
     (if (ly:stencil? stil)
         (let*
           ((left-bound-info (ly:grob-property grob 'left-bound-info))
            (left-Y (assoc-get 'Y left-bound-info))
            (stil-x-ext (ly:stencil-extent stil X))
            (factor
              (/ (interval-length (ly:stencil-extent stil X))
                 (car (take-right (last pts-list) 2))))
            (new-stil
              (make-connected-path-stencil
                (map
                  (lambda (e)
                    (cond ((= (length e) 2)
                           (cons (* (car e) factor) (cdr e)))
                          ((= (length e) 6)
                           (list
                             (* (car e) factor)
                             (cadr e)
                             (* (third e) factor)
                             (fourth e)
                             (* (fifth e) factor)
                             (sixth e)))
                          (else
                            (ly:error
                              "Some element(s) of the given list do not fit"))))
                  pts-list)
                (layout-line-thickness grob) ;line-width
                1   ;scaling
                1   ;scaling
                #f
                #f)))

           (ly:grob-set-property! grob 'stencil
             (ly:stencil-translate
               new-stil
               (cons (car stil-x-ext) left-Y))))
         (begin
           (ly:warning
             "Cannot find stencil. Please set 'minimum-length accordingly")
           #f))))
#})

%% comment me
%#(display "\n\tLimitations:
%\t-Does not work with line-break
%\t-dotted notes with glissando may return a warning for unknown reasons,
%\t strange things may happen, if contexts die prematurely")

\version "2.19.81"
\language "deutsch"

%\include "FancyGliss.ily"


scoreDUpperHarpI = \relative c'' {
  \override Glissando.cross-staff = ##t
  \set glissandoMap = #'((3 . 0))
  \once \fancy-gliss-II
        #'(
         (.5 -2)
         (1 -0.5)
         (1.5 -3)
         (2 0)
         (2.5 -14)
         (3 0)
         )
  \tag #'partiture
    { <cis d a' es'>4*1/2\glissando s8 }
  \tag #'partI {
    \tuplet 3/2 {
      <cis d a' es'>8\glissando
      \temporary \override NoteColumn.glissando-skip = ##t
      r r
    }
  }
  s8*14
  \revert NoteColumn.glissando-skip
  < h' h'>4 r
  \unset glissandoMap
}

scoreDLowerHarpI = \relative c' {
  \time 2/4
  s2 s s s
  r4 r
}

scoreDUpperHarpII = \relative c'' {
  \override Glissando.cross-staff = ##t
  \set glissandoMap = #'((3 . 0))
  \fancy-gliss-II
    #'(
     (0.8 -14)
     (2.4 2)
     )
  \tag #'partiture {
    s8*2/3
    <cis d a' es'>4*2/3\glissando
  }
  \tag #'partII {
    \tuplet 3/2 {
      r8
      <cis d a' es'>8\glissando
      \temporary \override NoteColumn.glissando-skip = ##t
      r
    }
  }
  s8*14
  \revert NoteColumn.glissando-skip
  < h' h'>4 r
  \revert Glissando.after-line-breaking
  \unset glissandoMap
}

scoreDLowerHarpII = \relative c' {
  \time 2/4
  s2 s s s
  r4 r
}

scoreDUpperHarpIII = \relative c'' {
  \override Glissando.cross-staff = ##t
  \set glissandoMap = #'((3 . 0))
  \temporary \fancy-gliss-II
      #'(
         (.1 -4)
         (.6 -2.5)
         (1.4 -5)
         (1.6 -2.5)
         (2.1 -14)
         (2.6 0)
        )

  \tuplet 3/2 {
    \tag #'partiture {
      \voiceTwo
      \change Staff=upperI <cis d a' es'>8
      \change Staff=upperII <cis d a' es'>
      \change Staff=upperIII <cis d a' es'>8\glissando
    }
    \tag #'partIII {
      r8 r <cis d a' es'>\glissando

    }
  }
  s8*14
  < h' h'>4 r
}

scoreDLowerHarpIII = \relative c' {
  \time 2/4
  s2 s s s
  r4 r
}


%% =========================================================
scoreDHarpIPart = \new PianoStaff <<
  \new Staff = "upperI"  <<  \scoreDUpperHarpI >>
  \new Staff = "lowerI"  { \clef bass \scoreDLowerHarpI }
>>

scoreDHarpIIPart = \new PianoStaff <<
  \new Staff = "upperII"  << \scoreDUpperHarpII >>
  \new Staff = "lowerII"  { \clef bass \scoreDLowerHarpII }
>>

scoreDHarpIIIPart = \new PianoStaff <<
  \new Staff = "upperIII"  << \scoreDUpperHarpIII >>
  \new Staff = "lowerIII"  { \clef bass \scoreDLowerHarpIII }
>>

\book {
    \bookpart {
    \score {
      \keepWithTag #'partiture
      <<
        \scoreDHarpIPart
        \scoreDHarpIIPart
        \scoreDHarpIIIPart
      >>
    }

    \score { \keepWithTag #'partI  \scoreDHarpIPart }
    \score { \keepWithTag #'partII \scoreDHarpIIPart }
    \score { \keepWithTag #'partIII \scoreDHarpIIIPart }
  }
}



Please test, if it works reliably, I'll update the LSR-snippet.


Cheers,
  Harm



reply via email to

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