lilypond-devel
[Top][All Lists]
Advanced

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

Re: \change Voice


From: Keith OHara
Subject: Re: \change Voice
Date: Sun, 26 Apr 2015 17:27:09 -0700
User-agent: Opera Mail/12.16 (Win32)

On Sun, 26 Apr 2015 14:35:33 -0700, Dan Eble <address@hidden> 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.




reply via email to

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