Allgemein > Fragen zu Funktionen
Vorzähler / metronome tick /snippet 876
martinusbaum:
hallo,
da gibt es ein snippet [url][http://lsr.di.unimi.it/LSR/Item?id=876]
martinusbaum:
eigentlicht wollte ich oben weiterschreiben....
Da gibt es ein snippet [http://lsr.di.unimi.it/LSR/Item?id=876][http://lsr.di.unimi.it/LSR/Item?id=876], das metronome ticks mit schlaginstrumenten (/drummode) einfügt anhand der Länge einer Mustermelodie.
Wenn man das Beispiel ändert von 4/4-Takt auf 3/4-Takt: \time = 3/4, bei harmonics nur s2., bei ticktock ein woodblock weniger
dann werden drei Takte dargestellt statt einem...
Eigentlich suche ich eine Lösung für einen Vorzähler mit zwei Takten ticktock mit woodblock 2/2, 3/4, 4/4, 6/8
wenn man einfach die benötigte woodblock-Anzahl hintereinander schreibt geht es natürlich. Mich irritiert das Verhalten bei Nutzung der Wiederholungsfunktion
Für eine Erklärung danbar...
Manuela:
Du kannst deinen Beitrag updaten, wenn beim Editieren etwas schief gegangen ist ;)
Eine klickbare URL erzeugst du, indem du die Adresse markierst und auf den Button drückst.
Willst du die URL mit einem anderen Text versehen, schreibst du in die erste eckige Klammer die http-Adresse
und setzt den gewünschten Text in die URL-Klammer
[ url=https://archiv.lilypondforum.de/index.php?action=post;topic=2389.0 ]hier der Text[ / url ]
Die Leerzeichen habe ich jetzt eingefügt, damit die Forensoftware keine automatische Umwandlung durchführt (geht sicher irgendwie anders, aber ich finde das Escape-Zeichen nicht).
fugenkomponist:
Das Problem liegt in makeUnfold:
--- Code: ---makeUnfold =
#(define-music-function (parser location name mus) (ly:music? ly:music?)
(let ((r (make-repeated-music "unfold")))
(set! (ly:music-property r 'element) mus)
(set! (ly:music-property r 'repeat-count)
(ly:moment-main-numerator (ly:music-length name)))
r))
--- Ende Code ---
In der vierten und fünften Zeile wird die Länge der Musik namens name herausgefunden. music-length gibt einen Bruch zurück, z. B. wird für 5 Takte 3/4-Takt 15/4 zurückgegeben. Und repeat-count wird jetzt ungeachtet der Taktart auf den Zähler dieses Bruchs gesetzt, also in diesem Fall 15 statt 5. Deshalb funktioniert das Ganze nur für 2/2, 4/4 und ähnliche Taktarten. Man müßte also irgendwie an den Kontext kommen, der die Musik beinhaltet, und von dem die Taktart rauskriegen. Ich probier das nachher mal.
harm6:
Hier mein erster Ansatz. Es ist aber wirklich nur ein "Vorzähler", ich habe ihn nicht "durchzählend" gemacht.
--- Code: ---\version "2.19.48"
countTwoBarsBefore =
#(define-music-function (mus)(ly:music?)
(let* ((time-sig '()))
(music-map
(lambda (m)
(if (eq? (ly:music-property m 'name) 'TimeSignatureMusic)
(begin
(set! time-sig (cons m time-sig))
m)
m))
mus)
(let* ((num
(if (null? time-sig) 4 (ly:music-property (last time-sig) 'numerator)))
(denom
(if (null? time-sig) 4 (ly:music-property (last time-sig) 'denominator)))
(time-sig-frac (cons num denom)))
(make-sequential-music
(list
#{
\new DrumVoice
\drummode {
\time #time-sig-frac
\repeat unfold 2 {
\withMusicProperty
#'duration
#(ly:make-duration (ly:intlog2 denom))
hiwoodblock
\repeat unfold #(1- num) {
\withMusicProperty
#'duration
#(ly:make-duration (ly:intlog2 denom))
lowoodblock
}
}
}
#}
#{ \new Voice \notemode { $mus } #})))))
m = {
\time 3/4
e''4 e' e'
\time 5/8
8 8 8 8 8
}
\score {
\m
}
\score {
\countTwoBarsBefore \m
\midi { \tempo 4=160 }
}
--- Ende Code ---
HTH,
Harm
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln