lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

how to update an olp piece of code


From: Stefan Thomas
Subject: how to update an olp piece of code
Date: Fri, 3 Jan 2014 10:57:17 +0100


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)))

reply via email to

[Prev in Thread] Current Thread [Next in Thread]