[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