[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Arrows indicating split/combined voices (aka snippet #650) overlapping T
From: |
Michael Gerdau |
Subject: |
Arrows indicating split/combined voices (aka snippet #650) overlapping TimSignature changes |
Date: |
Wed, 3 Apr 2019 10:01:03 +0200 (CEST) |
Hi List,
in the Snippet Repository there is under number 650
(http://lsr.di.unimi.it/LSR/Snippet?id=650) a rather neat snippet showing
splitting and converging arrows for voices. However with increasing frequency
I'm encountering timesignature changes where these splits occur. In those cases
the arrows aren't correctly positioned.
To see what I mean take the snippet code and apply two changes:
In the paper block remove
ragged-right = ##t
by changing it into
%ragged-right = ##t
i.e. disable ragged-right (the default anyway).
Change the definition of sI into:
sI = {
\voiceOne
\repeat unfold 4 f''2
\separateSopranos
\time 4/2 % add a timesignature change
\repeat unfold 4 g''2
\convSopranos
\time 4/4 % add another timesignature change
\repeat unfold 4 c''2
}
Now the arrows are no longer nicely visible.
Is there a way to adjust the position when there is a TimeSignature at the end
of a line?
I've attached a PDF showing the result, find below the complete snippet with my
above changes included:
%%----snip----snip----snip----
\version "2.18.2"
#(define-markup-command (arrow-at-angle layout props angle-deg length fill)
(number? number? boolean?)
(let* (
(PI-OVER-180 (/ (atan 1 1) 34))
(degrees->radians (lambda (degrees) (* degrees PI-OVER-180)))
(angle-rad (degrees->radians angle-deg))
(target-x (* length (cos angle-rad)))
(target-y (* length (sin angle-rad))))
(interpret-markup layout props
(markup
#:translate (cons (/ target-x 2) (/ target-y 2))
#:rotate angle-deg
#:translate (cons (/ length -2) 0)
#:concat (#:draw-line (cons length 0)
#:arrow-head X RIGHT fill)))))
splitStaffBarLineMarkup = \markup \with-dimensions #'(0 . 0) #'(0 . 0) {
\combine
\arrow-at-angle #45 #(sqrt 8) ##t
\arrow-at-angle #-45 #(sqrt 8) ##t
}
splitStaffBarLine = {
\once \override Staff.BarLine.stencil =
#(lambda (grob)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
X RIGHT
(grob-interpret-markup grob splitStaffBarLineMarkup)
0))
\break
}
convDownStaffBarLine = {
\once \override Staff.BarLine.stencil =
#(lambda (grob)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
X RIGHT
(grob-interpret-markup grob #{
\markup\with-dimensions #'(0 . 0) #'(0 . 0) {
\translate #'(0 . -.13)\arrow-at-angle #-45 #(sqrt 8) ##t
}#})
0))
\break
}
convUpStaffBarLine = {
\once \override Staff.BarLine.stencil =
#(lambda (grob)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
X RIGHT
(grob-interpret-markup grob #{
\markup\with-dimensions #'(0 . 0) #'(0 . 0) {
\translate #'(0 . .14)\arrow-at-angle #45 #(sqrt 8) ##t
}#})
0))
\break
}
\paper {
%ragged-right = ##t
short-indent = 10\mm
}
separateSopranos = {
\set Staff.instrumentName = "AI AII"
\set Staff.shortInstrumentName = "AI AII"
\splitStaffBarLine
\change Staff = "up"
}
convSopranos = {
\convDownStaffBarLine
\change Staff = "shared"
\set Staff.instrumentName = "S A"
\set Staff.shortInstrumentName = "S A"
}
sI = {
\voiceOne
\repeat unfold 4 f''2
\separateSopranos
\time 4/2 % add a timesignature change
\repeat unfold 4 g''2
\convSopranos
\time 4/4 % add another timesignature change
\repeat unfold 4 c''2
}
sII = {
s1*2
\voiceTwo
\change Staff = "up"
\repeat unfold 4 d''2
}
aI = {
\voiceTwo
\repeat unfold 4 a'2
\voiceOne
\repeat unfold 4 b'2
\convUpStaffBarLine
\voiceTwo
\repeat unfold 4 g'2
}
aII = {
s1*2
\voiceTwo
\repeat unfold 4 g'2
}
ten = {
\voiceOne
\repeat unfold 4 c'2
\repeat unfold 4 d'2
\repeat unfold 4 c'2
}
bas = {
\voiceTwo
\repeat unfold 4 f2
\repeat unfold 4 g2
\repeat unfold 4 c2
}
\score {
<<
\new ChoirStaff <<
\new Staff = up \with {
instrumentName = "SI SII"
shortInstrumentName = "SI SII"
} {
s1*4
}
\new Staff = shared \with {
instrumentName = "S A"
shortInstrumentName = "S A"
} <<
\new Voice = sopI \sI
\new Voice = sopII \sII
\new Voice = altI \aI
\new Voice = altII \aII
>>
\new Lyrics \with {
alignBelowContext = up
}
\lyricsto sopII { e f g h }
\new Lyrics \lyricsto altI { a b c d e f g h i j k l }
\new Staff = men \with {
instrumentName = "T B"
shortInstrumentName = "T B"
} <<
\clef F
\new Voice = ten \ten
\new Voice = bas \bas
>>
\new Lyrics \lyricsto bas { a b c d e f g h i j k l }
>>
>>
\layout {
\context {
\Staff \RemoveEmptyStaves
\override VerticalAxisGroup.remove-first = ##t
}
}
}
%%----snip----snip----snip----
Kind regards,
Michael
--
Michael Gerdau email: address@hidden
GPG-keys available on request or at public keyserver
split-combine-voices.pdf
Description: Adobe PDF document
- Arrows indicating split/combined voices (aka snippet #650) overlapping TimSignature changes,
Michael Gerdau <=