Menu

#1677 Partcombine solo detected too late (missing/extra rests)

Accepted
Dan Eble
Defect
2015-09-27
2011-06-01
Anonymous
No

Originally created by: *anonymous

Originally created by: PhilEHol...@googlemail.com

Reported by Nels Daily and analysed by Reinhold:

A short analysis of the bug:

The disappearing notes start after a multi-measure rest, which did start
earlier than a multi-measure rest in the first voice. The part-combiner walks through the score as following:
1) In the first measure, only mI is playing, so it starts a solo (mII has a multi-measure rest) and uses only the music events from mI
2) In the second measure both voices have a multi-measure rest, the solo of mI has ended. As mII has a multi-measure rest already going on, the part-combiner needs to take the multi-measure rest from mI (the part-combiner is not able to split up a multi-measure rest!)
3) In the third measure, mII has a rest, so the first quarter is still detected as unisilence (thus the rest from mI is still used). Now, as there is already a whole measure rest going on, lilypond ignores the following notes.

Note that there are some other bugs in the part-combiner that can be seen with this example:

-) If one replaces the r4 with a b4 in measure 3, then the notes are displayed (marked as "Solo II", but the whole-measure rest from mI is displayed, too.
-) If one adds a measure "c1" to both voices, the "r4" in mI is wrongly
printed as a full-measure rest (rests in unisilence are taken from the second voice, unless voice one had a solo ending before the rest, like in the original example)
-) If one adds any note after the "R1*2" in mI, then the notes are correctly printed.

As Xavier already mentioned, there is a workaround to force the partcombiner to use a particular combining strategy. (Also note that the first quarter eight rest in the third measure of your original example is printed as if there were two voices present... Also in this case you need to tell the part-combiner that the rest should be a solo, too. Don't worry, the "Solo" text will still be printed on the first note, not on the rest).

:::TeX
\version "2.15.0"

mI = \relative c' {
  r4 e e e | 
  R1*2
}

mII = \relative c' {
  R1*2
%% These notes don't appear!!! %%
  r4 b b b
}

\score{ <<
  \partcombine \mI \mII
>>
}
1 Attachments

Related

Issues: #4599

Discussion

  • Google Importer

    Google Importer - 2011-07-02

    Originally posted by: reinhold...@gmail.com

    (No comment was entered for this change.)

    Labels: partcombine

     
  • Google Importer

    Google Importer - 2015-04-28

    Originally posted by: nine.fie...@gmail.com

    Still an issue in 2.19.19.

     
  • Google Importer

    Google Importer - 2015-07-19

    Originally posted by: simon.al...@mail.de

    (No comment was entered for this change.)

    Labels: -Priority-Medium

     
  • Dan Eble

    Dan Eble - 2015-09-07
    • summary: Partcombine misses notes --> Partcombine misses notes (r after R)
    • Description has changed:

    Diff:

    
    
    • status: Accepted --> Started
    • assigned_to: Dan Eble
    • Needs: -->
    • Patch: -->
     
  • Simon Albrecht

    Simon Albrecht - 2015-09-09
     
  • Dan Eble

    Dan Eble - 2015-09-17

    Well, I thought I was on my way to fixing this with [#4600] plus another small change, but it is only sufficient to handle the case with multi-measure rests identified above. It does not help cases in which the solo begins while the two parts have out-of-sync sub-measure rests. See my expanded example below.

    Rather than solve half the problem, I'm going to give up on this for now. Possibly the solo detection needs some look-ahead (or -behind) so that if a solo passage is preceded by out-of-sync silence, the part routing for the solo passage takes effect at the start of the out-of-sync silence rather than on the first note of the solo.

    \version "2.19.27"
    
    mI = { r4 e' e' e' | R1*4 | r4 b b2 }
    mII = { R1*2 | r4 b b b | c' d' e' f' | R1 | r2 b' }
    
    <<
      \new Staff { \partcombine \mI \mII }
      \new Staff { \partcombine \mII \mI }
    >>
    
     

    Related

    Issues: #4600


    Last edit: Dan Eble 2015-09-17
  • Dan Eble

    Dan Eble - 2015-09-17
    • status: Started --> Accepted
     
  • Dan Eble

    Dan Eble - 2015-09-17
    • summary: Partcombine misses notes (r after R) --> Partcombine solo detected too late (missing/extra rests)
     
  • Trevor Daniels

    Trevor Daniels - 2015-09-27
    • Description has changed:

    Diff:

    --- old
    +++ new
    @@ -15,27 +15,30 @@
    
     Note that there are some other bugs in the part-combiner that can be seen with this example:
    
    --\) If one replaces the [r4] with a b4 in measure 3, then the notes are displayed \(marked as "Solo II", but the whole-measure rest from mI is displayed, too.
    --\) If one adds a measure "c1" to both voices, the "[r4]" in mI is wrongly 
    +-\) If one replaces the r4 with a b4 in measure 3, then the notes are displayed \(marked as "Solo II", but the whole-measure rest from mI is displayed, too.
    +-\) If one adds a measure "c1" to both voices, the "r4" in mI is wrongly 
     printed as a full-measure rest \(rests in unisilence are taken from the second voice, unless voice one had a solo ending before the rest, like in the original example\)
    --\) If one adds any note after the "[r1]\*2" in mI, then the notes are correctly printed.
    +-\) If one adds any note after the "R1\*2" in mI, then the notes are correctly printed.
    
     As Xavier already mentioned, there is a workaround to force the partcombiner to use a particular combining strategy. \(Also note that the first quarter eight rest in the third measure of your original example is printed as if there were two voices present... Also in this case you need to tell the part-combiner that the rest should be a solo, too. Don't worry, the "Solo" text will still be printed on the first note, not on the rest\).
    
    +~~~~
    +:::TeX
     \version "2.15.0"
    
    -mI = \relative c' \{
    -&nbsp; [r4] e e e | 
    -&nbsp; [r1]\*2
    -\}
    +mI = \relative c' {
    +  r4 e e e | 
    +  R1*2
    +}
    
    -mII = \relative c' \{
    -&nbsp; [r1]\*2
    -%% These notes don't appear\!\!\! %%
    -&nbsp; [r4] b b b
    -\}
    +mII = \relative c' {
    +  R1*2
    +%% These notes don't appear!!! %%
    +  r4 b b b
    +}
    
    -\score\{ &lt;&lt;
    -&nbsp; \partcombine \mI \mII
    -&gt;&gt;
    -\}
    +\score{ <<
    +  \partcombine \mI \mII
    +>>
    +}
    +~~~~
    
     
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.