• Willkommen im Forum „Archiviertes Lilypond Forum (2017)“.
 

Dies ist das Archiv des alten Forums (bis März 2017). Das aktuelle Forum ist unter lilypondforum.de zu finden.
This is the archive of the old forum (until March 2017). You can find the current forum at lilypondforum.de.

Hauptmenü

Wiederholung startet mit Volta der vorherigen Wiederholung

Begonnen von Arnold, Montag, 4. April 2016, 09:56

Vorheriges Thema - Nächstes Thema

Arnold

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

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

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