diff --git a/functions.ly b/functions.ly new file mode 100644 index 0000000..575681f --- /dev/null +++ b/functions.ly @@ -0,0 +1,104 @@ + + +rmtext = #(define-scheme-function + (o) + (ly:music?) + (define (f o) + (ly:music-set-property! o 'text "") + (let ((t (ly:music-property o 'name))) + (let ((els (ly:music-property o 'elements))) + (if (null? els) + (let ((arts (ly:music-property o 'articulations))) + (map (lambda (a) + (f a)) + arts)) + (map (lambda (e) + (f e) + ) + els)))) + ) + (let ((oo (ly:music-deep-copy o))) + (f oo) + oo) + ) + +withDuration = #(define-scheme-function + (music duration adjusts) + (ly:music? number? number?) + (define (with-duration-internal m duration) + (cond + ((or (music-is-of-type? m 'note-event) (music-is-of-type? m 'rest-event) (music-is-of-type? m 'skip-event)) + (ly:music-set-property! m 'duration (apply ly:make-duration duration))) + ((music-is-of-type? m 'event-chord) + (map (lambda (n) (with-duration-internal n duration)) + (ly:music-property m 'elements))) + (else (ly:warning "Neither note event nor chord")) + ) + m + ) + (with-duration-internal (ly:music-deep-copy music) (list duration adjusts)) + ) + +flattenPitch = #(define-scheme-function + (music) + (ly:music?) + + (define (adjust-first l) + (if (null? l) + 'done + (let ((e (car l))) + (if (music-is-of-type? e 'note-event) + (adjust-pitch-i e) + (adjust-first (cdr l)))) + ) + ) + + (define (adjust-pitch-i m) + (cond + ((music-is-of-type? m 'note-event) + (let* ((p (ly:music-property m 'pitch)) + (pa (ly:pitch-alteration p)) + (pn (ly:pitch-notename p)) + (pp (ly:make-pitch -1 pn pa)) + ) + (ly:music-set-property! m 'pitch pp)) + ) + ((or (music-is-of-type? m 'event-chord) + (music-is-of-type? m 'any)) + (adjust-first (ly:music-property m 'elements)) + ) + ) + m + ) + + (adjust-pitch-i (ly:music-deep-copy music)) + ) + +rep = #(define-scheme-function + (n m) + (index? ly:music?) + (let ((nn (- n 1)) + (mm (flattenPitch (rmtext m))) + ) + (if (> nn 0) + #{ + $m \repeat unfold $nn $mm + #} + #{ + $m + #} + ) + ) + ) + +fr = #(define-scheme-function + (n) + (ly:music?) + (rep 4 n)) + +frr = #(define-scheme-function + (n) + (ly:music?) + (rep 8 n) + ) +