Deutsches Lilypond Forum (Archiv)
Allgemein => Fragen zu Funktionen => Thema gestartet von: Arnold 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
-
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/ (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
-
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