On Sun, 26 Apr 2015 14:35:33 -0700, Dan Eble <d...@faithful.be> wrote:
If there existed a command to redirect the sequential iterator’s output to another Voice context without requiring a wrapper context, it could not function in a parallel sequence; the commands would have to be injected into the part sequence itself.
Well, the current \partcombine works that way, using events like solo-one-event or unisono-event that signal to part-combine iterator to redirect one of the the two sequential iterators that part-combine-iterator.cc tracks. Breaking up the music into subsequences still looks better overall to me. I tried writing the output of a hypothetical \partcombine that no longer depends on part-combine-iterator.cc \partcombine {R1*3 g''2 d''2 } {R1 r2 b2 R1 b2 d'2 } % Breaking into subsequences \new Staff << \context Voice = "one" \with { \voiceOne } \context Voice = "two" \with { \voiceTwo } \context Voice = "solo" \context Voice = "shared" { \context Voice = "shared" {R1 r2} \context Devnull { r2 } \context Voice = "shared" {R1 } \context Voice = "one" { g''2 } \context Voice = "shared" { d'' } } { \context Devnull {R1 r2} \context Voice = "solo" { \mark"solo II" b2 } \context Devnull { R1 } \context Voice = "two" { b2 } \context Voice = "shared" { d'2 } } >> % Using a parallel sequence of \change events \layout { \context { \name "Thread" \type "Engraver_group" } \context { \Voice \accepts "Thread" } } \new Staff << \context NullVoice = "null" \context Voice = "one" \with { \voiceOne } \context Voice = "two" \with { \voiceTwo } \context Voice = "solo" \context Voice = "shared" \new Thread << { \change Voice = "shared" s1 s2 \change Voice = "null" s2 \change Voice = "shared" s1 \change Voice = "one" s2 \change Voice = "shared" s2 } { R1 r2 r2 R1 g''2 d''2 } >> \new Thread << { \change Voice = "null" s1 s2 \change Voice = "solo" \mark"solo II" s2 \change Voice = "null" s1 \change Voice = "two" s2 \change Voice = "shared" s2 } { R1 r2 b2 R1 b2 d'2 } >> >> In any case, if you want to retire the part-combine-iterator, you need new code to properly break rests. I think there are still bugs with \partcombine when rests overlap changes of state, so the rewrite might solve some bugs. _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel