\include "extractMusic.ly" #(define (extract-during music from during) (parameterize ((*current-moment* (ly:make-moment 0 1 0 1))) (extract-music (ly:music-deep-copy music) from (ly:moment-add from during)))) %%%%%%%%%%%%%%%%%%%%%%%%%%% #(define (get-volta-info-list music current-list) (let ((elts (ly:music-property music 'elements)) (elt (ly:music-property music 'element)) (duration? (ly:duration? (get-duration music))) (volta-music? (eq? 'VoltaRepeatedMusic (ly:music-property music 'name)))) (if volta-music? (set! current-list (append current-list (list (append (list (*current-moment*) (ly:music-length elt) (ly:music-property music 'repeat-count)) (map ly:music-length elts)))))) (if (or volta-music? duration?) (*current-moment* (ly:moment-add (*current-moment*) (ly:music-length music))) (begin (if (pair? elts) (map (lambda (x) (set! current-list (get-volta-info-list x current-list))) elts) (if (ly:music? elt) (set! current-list (get-volta-info-list elt current-list)))))) current-list)) %%%%%%%%%%%%%%%%%%%%%%%%%%% #(define (global->list music ) (parameterize ((*current-moment* (ly:make-moment 0 1 0 1))) (get-volta-info-list music '()))) %%%%%%%%%%%%%%%%%%%%%%%%%%% #(define (copy-volta-repeats global music) (let ((repeat-list (global->list global)) (begin-sequence moment-null) (end-sequence moment-null)) ;%(display repeat-list)(newline) (make-simultaneous-music (list global (make-sequential-music (append (map (lambda (info) (let*((begin-elt (car info)) (end-elt (cadr info)) (elt (extract-during music begin-elt end-elt)) (count (car (cddr info))) (elts (if (< (length info) 4) '() (begin (set! end-sequence (ly:moment-add begin-elt end-elt)) (map (lambda (during) (let ((save-moment end-sequence)) (set! end-sequence (ly:moment-add end-sequence during)) (extract-during music save-moment during))) (list-tail info 3))))) (before-volta (extract-during music begin-sequence (ly:moment-sub begin-elt begin-sequence))) (volta-music (make-music 'VoltaRepeatedMusic 'elements elts 'repeat-count count 'element elt ))) (set! begin-sequence end-sequence) (make-sequential-music (list before-volta volta-music)))) repeat-list) (list (extract-during music begin-sequence (ly:make-moment 10000000 1 0 1))))) )))) %%%%%%%%%%%%%%%%%%%%%%%%% #(define (globalize-music global music) (let ((elts (ly:music-property music 'elements)) (elt (ly:music-property music 'element)) (staff? (and (eq? (ly:music-property music 'name) 'ContextSpeccedMusic) (eq? (ly:music-property music 'context-type) 'Staff)))) (if staff? (ly:music-set-property! music 'element (copy-volta-repeats global elt)) (begin (if (ly:music? elt)(ly:music-set-property! music 'element (globalize-music global elt))) (if (pair? elts)(ly:music-set-property! music 'elements (map (lambda (evt)(globalize-music global evt)) elts))))) music )) %%%%%%%%%%%%%%%%%%%%%%%%%%% the main function %%%%%%%%%%%%%%%%%% globalizeMusic = #(define-music-function (parser location global music)(ly:music? ly:music?) (globalize-music global music))