Autor Thema: Wiederholung startet mit Volta der vorherigen Wiederholung  (Gelesen 1075 mal)

Arnold

  • Gast
Wiederholung startet mit Volta der vorherigen Wiederholung
« am: Montag, 4. April 2016, 09:56 »
Hallo,

gelegentlich beginnt in der letzten Volte bereits die nächste Wiederholung.
Damit \unfoldRepeats (für die MIDI-Ausgabe) funktioniert, schreibe ich das folgende \repeat volta in den letzten \alternative-Block hinein (und begrenze die Länge der Alternativenklammer).
Aber dann kommt noch die alternative Taktzählung (alternativeNumberingStyle = #'numbers-with-letters) durcheinander.

Die alternativ-Buchstaben-Zählung kann ich mit einem make-music-Scheme-Aufruf (um ein extra Music-Event einzufügen) manuell zurücksetzen.

Gibt es eine elegantere Methode?
\version "2.18.2"
{
  \set Score.alternativeNumberingStyle = #'numbers-with-letters
  \override Score.BarNumber.break-visibility = #end-of-line-invisible
  \repeat volta 2 {
    c'1
  }
  \alternative {
    {
      d'1
    } {
      \set Score.voltaSpannerDuration = #(ly:make-moment 4/4)
      \repeat volta 2 {
        e'1
        % Workaround! enable this: #(make-music 'AlternativeEvent 'alternative-dir 1 'alternative-increment 0)
        f'1
        \unset Score.voltaSpannerDuration
      }
      \alternative {
        {
          g'1 a'
        }
        {
          b'1 c''
        }
      }
    }
  }
  \bar "|."
}
Arnold

harm6

  • Gast
Re: Wiederholung startet mit Volta der vorherigen Wiederholung
« Antwort #1 am: Mittwoch, 6. April 2016, 01:29 »
Hallo Arnold,

ich hab' ziemlich lang dran rumgetüftelt, aber letztendlich ist das was rauskam eher schlechter als Dein code:
Es erscheint noch Takt "3b", krieg ich nicht weg.
Und obwohl es mit 2.18.2 auch mit \unfoldRepeats klappt, scheitert es mindestens ab 2.19.29, ich verdächtige da issue 4252
https://sourceforge.net/p/testlilyissues/issues/4252/
Muß ich morgen mal erforschen.

Nichtsdestotrotz hier der code, vielleicht weiß jemand ja was dazu (oder kann aufzeigen warum es so nicht klappen kann...)


\version "2.18.2"

#(define ((my-make-volta-set l1 l2) mus)
  (let* ((music (ly:music-deep-copy mus))
         (alts (ly:music-property music 'elements))
         (lalts (length alts))
         (times (ly:music-property music 'repeat-count)))
    (map (lambda (x y xx yy)

           (make-music
            'SequentialMusic
            'elements
            ;; set properties for proper bar numbering
            (append
             (list (make-music 'AlternativeEvent
                               'alternative-dir xx
                               'alternative-increment yy))
             (list x)
             (if (= y (1- lalts))
                 (list (make-music 'AlternativeEvent
                                   'alternative-dir 1
                                   'alternative-increment 0))
                 '()))))
         alts
         (iota lalts)
         l1
         l2)))

mus-tst = {
  \set Score.alternativeNumberingStyle = #'numbers-with-letters
  \override Score.BarNumber.break-visibility = #end-of-line-invisible
  \withMusicProperty #'elements-callback #(my-make-volta-set '(-1 0) '(1 0))
  \repeat volta 2 { cis'1 }
  \alternative {
    { d'1 }
    {
      \set Score.voltaSpannerDuration = #(ly:make-moment 4/4)
      \repeat volta 2 {
        e'1
        %#(make-music 'AlternativeEvent 'alternative-dir 1 'alternative-increment 0)
        f'1
        \unset Score.voltaSpannerDuration
      }
      \alternative {
        { g'1 a' }
        { b'1 c'' }
      }
    }
  }
  d''1
  \bar "|."
}

\score {
  { \new Staff \mus-tst }
  \layout {}
  %\midi {}
}

\score {
  \unfoldRepeats
  { \new Staff \mus-tst }
  \layout {}
  %\midi {}
}

Gruß,
  Harm

harm6

  • Gast
Re: Wiederholung startet mit Volta der vorherigen Wiederholung
« Antwort #2 am: Donnerstag, 7. April 2016, 01:29 »
Ok, diese Zeile:
\withMusicProperty #'elements-callback <whatever>
macht das Problem.
Es scheint das 'elements-callback darf nicht verändert werden. Möglicherweise muß man da noch mehr tun...

Gruß,
  Harm