新命令:沿着一条音阶做模进
在用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
}