I made two tremolo utility functions today which may be of interest to
some here. Before adding them to LSR I just want a few people to take
a look at them.

\tremolos #16 {c4 d8 e f g a4 b c2}

expands to

\repeat tremolo 4 c16
  \repeat tremolo 2 d16
  \repeat tremolo 2 e16
  \repeat tremolo 2 f16
  \repeat tremolo 2 g16
  \repeat tremolo 4 a16
  \repeat tremolo 4 b16
  \repeat tremolo 8 c16

See the attached excerpt from Beethoven Symphony No.3 for an example use case.

The other is simply \unfoldTremolos. I usually use the midi to check
for errors I don't want to unfold the volta repeats, but not unfolding
tremolos sounds strange. \unfoldTremolos does just what it says.

Enjoy!

-----Jay

In use here: 
<http://github.com/horndude77/open-scores/blob/master/BeethovenSymphony3/defs.lyi>

#(define (tremolo-repeat-count dur music)
  (let* ((elements (ly:music-property music 'elements))
         (music-dur (ly:music-property (car elements) 'duration))
         (length (ly:duration-log music-dur))
         (dots (ly:duration-dot-count music-dur))
         (beats (* (- 2 (/ 1 (expt 2 dots))) (/ 4 (expt 2 length)))))
      (* beats (/ dur 4))))

#(define (make-tremolo dur music)
  (make-music
    'TremoloRepeatedMusic
    'elements
    '()
    'repeat-count
    (tremolo-repeat-count dur music)
    'element
    music))

#(define (tremoloize dur music)
  (if (eq? (ly:music-property music 'name) 'EventChord)
    (make-tremolo dur music)
    music))

%dur is 8, 16, 32, etc.
tremolos = #(define-music-function (parser location dur mus) (integer?
ly:music?)
  (music-map (lambda (x) (tremoloize dur x)) mus))

#(define (unfold-tremolos mus)
  (if (eq? (ly:music-property mus 'name) 'TremoloRepeatedMusic)
    (unfold-repeats mus)
    mus))

unfoldTremolos = #(define-music-function (parser location mus) (ly:music?)
  (music-map unfold-tremolos mus))

<<attachment: beeth_tremolos.png>>

_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to