在用lilypond实现模进 - lilypond手残粉 - 博客园 (cnblogs.com)里,我知道了有调内模进的命令\modalTranspose
但实际写基本练习的时候,调内模进通常是连续进行的,而做一次模进就要调用一次\modalTranspose的命令,实在是麻烦,代码也不漂亮
所以沿着一条音阶一直模进就成了我的心愿。
在新的\modalTransposeScale命令下,只需要提供一个音阶,就能让系统自动完成一系列的模进。效果见图,代码在下面,要使用命令请复制命令区
MyScale={ c' d' e' f' g' a' b' } MyNotes={ c' d' f' e' } %%%%%%%%%%%%%% 命令区 %%%%%%%%%%%%%%%
modalTransposeScale=
#(define-music-function (myscale mymusic) (ly:music? ly:music?)
(let ( (firstnote (car (ly:music-property myscale 'elements))) )
(make-music 'RelativeOctaveMusic 'element
(make-sequential-music
(apply append
(map (lambda (x)
(ly:music-property
#{ \modalTranspose
$(ly:music-property firstnote 'pitch)
$(ly:music-property x 'pitch)
$myscale
$mymusic #}
'elements))
(ly:music-property myscale 'elements))
)))))
%%%%%%%%%%%%%%%% 命令区结束 %%%%%%%%%%%%%%%%%% \markup{ "这是准备做模进的片段" } { \MyNotes } \markup{ "这是准备做模进的音阶,片段会沿着音阶的顺序做模进" } { \MyScale } \markup{ "这是使用了新命令modalTransposeScale的结果" } { \modalTransposeScale \MyScale \MyNotes }