David, On Wed, Mar 21, 2012 at 7:54 PM, David Kastrup <d...@gnu.org> wrote: > > Possibly this mail got lost, so I rewrite it (code is somewhat different). > > Siska Ádám <sa...@sadam.hu> writes: > >> Dear List, >> >> >> is there an effective way to separate the pitches and the rhythms in a >> voice? I'm thinking about something like defining a variable >> consisting only of rhythms: >> >> Rhythm = { >> \time 4/4 >> 4 4 4. 8 >> 8 8 4 4 8 8 >> 2 4 8 8 ... >> } >> >> and then apply this to different sequences of pitches: >> >> Seq1 = { >> \clef treble >> c d e f >> g a g f e d >> c e g c ... >> } >> >> Seq2 = { >> \clef bass >> c b a g >> f e f g a b >> c g e c ... >> } > > #(define-public (for-some-music stop? music) > "Walk through @var{music}, process all elements calling @var{stop?} > and only recurse if this returns @code{#f}." > (let loop ((music music)) > (if (not (stop? music)) > (let ((elt (ly:music-property music 'element))) > (if (ly:music? elt) > (loop elt)) > (for-each loop (ly:music-property music 'elements)) > (for-each loop (ly:music-property music 'articulations)))))) > > #(define (extract-all-durations music) > (map! (lambda (m) (ly:music-property m 'duration)) > (extract-music music > (lambda (m) (ly:duration? > (ly:music-property m 'duration)))))) > > applyRhythm = > #(define-music-function (parser location p r) > (ly:music? ly:music?) > (let ((l (extract-all-durations r))) > (for-some-music > (lambda (m) > (or (null? l) > (and (ly:duration? (ly:music-property m 'duration)) > (begin > (set! (ly:music-property m 'duration) (car l)) > (set! l (cdr l)) > #t)))) > p)) > p) > > Rhythm = { > s4 s4 s4. s8 > s8 s8 s4 s4 s8 s8 > s2 s4 s8 s8 > } > > SeqI = { > \clef treble > c d e f > g a g f e d > c e g c > } > > SeqII = { > \clef bass > c b a g > f e f g a b > c g e c > } > > \new PianoStaff > << \new Staff \applyRhythm \SeqI \Rhythm > \new Staff \applyRhythm \SeqII \Rhythm >>>
Thanks for this! I'll keep it bookmarked. Janek _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user