Hi all, I'm working on putting together a set of functions for handling parts that split into multiple voices and/or staves (using functionality David Kastrup implemented in https://code.google.com/p/lilypond/issues/detail?id=3518). I attach a first version and i'd be interested in your comments.
best, Janek
\version "2.19.13"
together = { \tag #'together <>^\markup \bold "a2" }
soloI =
#(define-music-function (parser location mus) (ly:music?)
#{
<<
\tag #'together <>^\markup \bold SoloI
\tag #'divI { #mus }
\tag #'together { #mus }
\tag #'divII #(mmrest-of-length mus)
>>
#})
sharedStems =
#(define-music-function (parser location m1 m2) (ly:music? ly:music?)
#{
<<
\tag divI { #m1 }
\tag divII { #m2 }
\tag together <>^\markup \bold "div"
\tag together << #m1 #m2 >>
>>
#})
voiceDivisi =
#(define-music-function (parser location m1 m2) (ly:music? ly:music?)
#{
<<
\tag divI { #m1 }
\tag divII { #m2 }
\tag together << { \dynamicUp #m1 } \\ { \dynamicDown #m2 } >>
>>
#})
staffDivisi =
#(define-music-function (parser location m1 m2) (ly:music? ly:music?)
#{
\unset Staff.keepAliveInterfaces
<<
\tag divI { #m1 }
\tag divII { #m2 }
\tag together #(skip-of-length m1)
\tag together #(skip-of-length m2)
>>
\set Staff.keepAliveInterfaces = #'()
#})
divisibleStaff =
#(define-music-function (parser location name music) (string? ly:music?)
(let ((nameI (string-append name " I"))
(nameII (string-append name " II")))
#{
\new GrandStaff \with {
\consists "Keep_alive_together_engraver"
} <<
\new Staff \with {
\override VerticalAxisGroup.remove-first = ##t
\override VerticalAxisGroup.remove-empty = ##t
\override VerticalAxisGroup.remove-layer = 1
keepAliveInterfaces = #'()
instrumentName = #nameI
shortInstrumentName = #nameI
}
\keepWithTag divI \music
\new Staff \with {
\override VerticalAxisGroup.remove-first = ##t
\override VerticalAxisGroup.remove-empty = ##t
\override VerticalAxisGroup.remove-layer = 1
keepAliveInterfaces = #'()
instrumentName = #nameII
shortInstrumentName = #nameII
}
\keepWithTag divII \music
\new Staff \with {
instrumentName = #name
shortInstrumentName = #name
\override VerticalAxisGroup.remove-layer = 2
}
\keepWithTag together \music
>>
#}))
\version "2.19.13"
\include "definitions.ily"
\layout {
short-indent = 2\cm
indent = 2\cm
line-width = 10\cm
}
music = {
\together
c'4 d' e' f'
\sharedStems
{ a' f' a' g' }
{ f' d' f' e' }
\voiceDivisi {
g' b' d' b'
d'' b' g' b'
}
{
g'4 e' g' e'
b' g' b' g'
}
\staffDivisi
{ <a' f''> g' q b' }
{ a' <e' b' e''> a' q }
\together
c' d' e' f'
\soloI { g' b' d' b' }
\together
<f' a'> <d' f'> <f' a'> <e' g'>
f' e' d' c'
}
\markup \bold { Violin I part: }
\new Staff \with {
instrumentName = "Violin I"
shortInstrumentName = "V I"
} \keepWithTag divI \music
\markup \bold { Violin II part: }
\new Staff \with {
instrumentName = "Violin II"
shortInstrumentName = "V II"
} \keepWithTag divII \music
\markup \bold { Combined: }
\divisibleStaff "Violin" \music
example.pdf
Description: Adobe PDF document
_______________________________________________ lilypond-user mailing list [email protected] https://lists.gnu.org/mailman/listinfo/lilypond-user
