]> git.donarmstrong.com Git - lilypond.git/blob - input/test/reverse-music.ly
985b471aefc688de13ba8b485a2476ef4f8d1fff
[lilypond.git] / input / test / reverse-music.ly
1 \version "2.9.7"
2 \sourcefilename "reverse-music.ly"
3
4 % possible rename to scheme-something.
5 \header { texidoc="@cindex Scheme Reverse Music
6 Symmetric, or palindromical music can be produced, first, by printing
7 some music, and second, by printing the same music applying a Scheme
8 function to reverse the syntax.
9 "
10 }
11
12 #(define (reverse-music music)
13   (let* ((elements (ly:music-property music 'elements))
14          (reversed (reverse elements))
15          (e (ly:music-property music 'element))
16          (span-dir (ly:music-property music 'span-direction)))
17
18     (ly:music-set-property! music 'elements reversed)
19
20     (if (ly:music? e)
21         (ly:music-set-property!
22          music 'element
23          (reverse-music e)))
24
25     (if (ly:dir? span-dir)
26         (ly:music-set-property! music 'span-direction (- span-dir)))
27
28     (map reverse-music reversed)
29
30     music))
31
32 reverseMusic =
33 #(define-music-function (parser location m) (ly:music?)
34                 (reverse-music m)
35         )       
36
37 music =  \relative c'' { c4 d4( e4 f4 }
38
39 \score {
40 \context Voice {
41     \music
42     \reverseMusic \music
43   }
44   \layout { ragged-right = ##t}
45 }
46