Based on smart-transpose, here's music-shift. It will just shift notes
by one delta degrees in the current key. It's very usefull for
typesetting scale execises.
#(define (shift-pitch p delta)
(make-pitch
(pitch-octave p)
(+ (pitch-notename p) delta)
(pitch-alteration p)))
#(define (shift-music music delta)
(let* ((es (ly-get-mus-property music 'elements))
(e (ly-get-mus-property music 'element))
(p (ly-get-mus-property music 'pitch))
(body (ly-get-mus-property music 'body))
(alts (ly-get-mus-property music 'alternatives)))
(if (pair? es)
(ly-set-mus-property
music 'elements
(map (lambda (x) (shift-music x delta)) es)))
(if (music? alts)
(ly-set-mus-property
music 'alternatives
(shift-music alts delta)))
(if (music? body)
(ly-set-mus-property
music 'body
(shift-music body delta)))
(if (music? e)
(ly-set-mus-property
music 'element
(shift-music e delta)))
(if (pitch? p)
(begin
(set! p (shift-pitch p delta))
(ly-set-mus-property music 'pitch p)))
music))
pattern = \notes \relative c' { c8 d16 e f g a b | c4 r | }
\score {
\context Staff {
\notes \relative c' {
\time 2/4;
\pattern
\apply #(lambda (x) (shift-music x 1))
\pattern
\apply #(lambda (x) (shift-music x 2))
\pattern
}
}
}
--
Laurent Martelli
[EMAIL PROTECTED] http://www.linuxfan.com/~laurent
_______________________________________________
Gnu-music-discuss mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/gnu-music-discuss