Dear community,
I have an old piece of code, initially written by Rune Zedeler.
I would like to update it to version 2.18.0, but I don't know what is wrong with it.
Here is the code:
\version "2.17.97"
motiv =
#(define-music-function (parser location name pattern)
(symbol? ly:music?)
(letrec ((trans-rec
(lambda (pitches)
(lambda (music)
(let* ((es (ly:music-property music 'elements))
(e (ly:music-property music 'element))
(p (ly:music-property music 'pitch)))
(if (pair? es)
(ly:music-set-property!
music 'elements
(map (trans-rec pitches) es)))
(if (ly:music? e)
(ly:music-set-property!
music 'element
((trans-rec pitches) e)))
(if (ly:pitch? p)
(let* ((o (ly:pitch-octave p))
(n (ly:pitch-notename p))
(i (+ (* 7 o) n))
(pes (ly:music-property (list-ref pitches i) 'elements))
(pnew (ly:music-property (car pes) 'pitch))
)
(ly:music-set-property! music 'pitch pnew)
))
music)))))
(primitive-eval
`(define ,name
(define-music-function (parserb locationb pitchseq)
(ly:music?)
(let* ((pitches (ly:music-property pitchseq 'elements))
(n (ly:music-property pitchseq 'name)))
(if (not (equal? n 'SequentialMusic))
(ly:warning "2nd arg of transform must be SequentialMusic, got ~a" n)
((,trans-rec (map event-chord-wrap! pitches))
(ly:music-deep-copy ,pattern)))))))
(make-music 'SequentialMusic 'void #t)))