On Thu, May 22, 2008 at 5:09 AM, Jay Anderson <[EMAIL PROTECTED]> wrote: > "Easy Rhythm Template Creation" added to the lsr. Thanks. > > -----Jay
Hi Jay, I had some trouble getting tuplets to work with your snippet. Here's a modified version that checks whether a tuplet (TimeScaledMusic) is used in the template, and handles that case separately; see function make-chord-or-tuplet. I'm not very good with Scheme, perhaps there is an easier way to do this? Thanks again, Alard. --- \version "2.11.46" %Rhythm template stuff #(define (create-note pitch duration) (make-music 'NoteEvent 'duration duration 'pitch pitch)) #(define (make-chord chord-pitches chordevent) (let* ((skip (car (ly:music-property chordevent 'elements))) (rest (cdr (ly:music-property chordevent 'elements))) (duration (ly:music-property skip 'duration))) (if (eq? (ly:music-property skip 'name) 'SkipEvent) (make-music 'EventChord 'elements (append (map (lambda (x) (create-note x duration)) chord-pitches) rest)) chordevent))) #(define (make-chord-or-tuplet pitches event) (if (eq? (ly:music-property event 'name) 'TimeScaledMusic) (make-music 'TimeScaledMusic 'denominator (ly:music-property event 'denominator) 'numerator (ly:music-property event 'numerator) 'element (make-music 'SequentialMusic 'elements (make-rhythm pitches (ly:music-property (ly:music-property event 'element) 'elements)))) (make-chord pitches event))) #(define (make-rhythm pitches template) (cond ((null? template) '()) ((ly:pitch? (car pitches)) (cons (make-chord-or-tuplet pitches (car template)) (make-rhythm pitches (cdr template)))) (else (cons (make-chord-or-tuplet (car pitches) (car template)) (make-rhythm (cadr pitches) (cdr template)))))) % Returns two pitches from the input: % ( <The original pitch(es)> % <The pitch(es) in octave '-1'> ) % This makes the function work in \relative sections % To make it work outside of \relative only return p. #(define (get-pitches mus) (let* ((p (map (lambda (x) (ly:music-property x 'pitch)) (ly:music-property mus 'elements))) (first-p (car p)) (pitch (ly:pitch-notename first-p)) (alteration (ly:pitch-alteration first-p)) (octave -1) (px (ly:make-pitch octave pitch alteration))) (list p (cons px (cdr p))))) #(define (rhythm-template template) (define-music-function (parser location mus) (ly:music?) (make-music 'SequentialMusic 'elements (make-rhythm (get-pitches mus) (ly:music-property template 'elements))))) %Example usage: %These methods should only be used within a \relative section. rhya = #(rhythm-template #{s8.-> s16 s8#} ) rhyb = #(rhythm-template #{s8[ r16 s16 s8]#} ) rhyc = #(rhythm-template #{s16 s~ s4#} ) rhyd = #(rhythm-template #{ \times 2/3 { s8 s8 s8 } s4 s4 s8 s8 s4 #} ) rhye = #(rhythm-template #{ \times 2/3 { s8---\pp s8-- s8-- } s4-- s4-- s8-- s8-- s4-- #} ) \score { \new Staff \relative c' { \time 6/8 \rhya c \rhyb c | \rhya <c e> \rhyb <c f> | \rhyc <c e> \rhyc <c d> | \time 5/4 \rhyd c \rhyd e \rhye <c e g> } } -- Groeten, Alard. Ceterum censeo MS Word esse delendam. _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org http://lists.gnu.org/mailman/listinfo/lilypond-user