基本练习生成器v0.1
设计基本练习生成器的初衷,是希望能按我们所习惯的语言顺序,将我们的需要自然地迁移到代码上,即:
将“动机”按指定“节奏型”,设定好“优先上/下行”的顺序,用指定的“模进方式”,沿着指定的“序列”,延伸“几个八度”,还可以在上下行的结尾设置“调整”,最后是配备相应的“指法”。
只是几句话的事情,却花费了大量的功夫,特别是从这个例子的up主得到的代码,在处理了节奏型问题的基础上,解决了许多细节上的问题。
现在,将下面这个文件下载后,在lilypond文件里用\include命令引用,就可以按着自己的要求生成基本练习了。
https://files.cnblogs.com/files/lilypondgaspard/commands-from-lilypondgaspard.zip
因为个人能力原因,这个生成器肯定还有许多问题,看看能不能综合一下各位读者的意见,以做出更多改进
---------------------
基本练习生成器,实质上是一个有多个参数设置的函数。我目前规定的语法是这样的:
\BasicExercise %以下是参数 \relative c'{ c df c d } % 1. 动机 {} % 2. 下行时动机(可以缺省) {c8. c16} % 3. 节奏型、连断等 #UP % 4. 先上行/下行 "Transpose" % 5. 模进方式 {c cs d ds e f g gs a bf b} % 6. 模进序列 #2 % 7. 延伸几个八度 {} % 8. 上行结尾补充 {c'1} % 9. 下行结尾补充 {s8._3 s16_4} % 10. 指法
换言之,设定了这些参数之后,就能自动生成一个完整的基本练习啦!
以下是一个例子
\version "2.22.1" \language "english" \include "D:\commands-from-lilypondgaspard.ly"
% 双引号里面的文件就是解压后的文件,地址要全英文(像这个例子就放在D盘上),不然怕识别错误
\markup {"分解二度"} { \BasicExercise % 以下是参数 \relative c'{ c d } % 1. 动机 {} % 2. 下行动机(可缺省) {c2 } % 3. 节奏型、连断等 #UP % 4. 先下行/上行 "ModalTranspose" % 5. 模进方式 {c d e f g a b} % 6. 模进序列 #2 % 7. 延伸几个八度 {} % 8. 上行结尾补充 {c'1} % 9. 下行结尾补充 {s2-2 s-3} % 10. 指法 }
它的生成结果如下:
可以尝试调整参数。例如在第3项那里改变节奏型(在节奏型那里,音高只是形式音高,本身不输出),像这样(红色部分是改动的地方):
\BasicExercise % 以下是参数 \relative c'{ c d } % 1. 动机 {} % 2. 下行动机(可缺省) {c2. c4 } % 3. 节奏型、连断等 #UP % 4. 先下行/上行 "ModalTranspose" % 5. 模进方式 {c d e f g a b} % 6. 模进序列 #2 % 7. 延伸几个八度 {} % 8. 上行结尾补充 {c'1} % 9. 下行结尾补充 {s2.-2 s4-3} % 10. 指法
注意指法那里要相应地改变时值,不然会对不齐。结果如下:
可以增加一点连断(红色为变动部分)
\BasicExercise % 以下是参数 \relative c'{ c d } % 1. 动机 {} % 2. 下行动机(可缺省) {c2.( c4-.) } % 3. 节奏型、连断等 #UP % 4. 先下行/上行 "ModalTranspose" % 5. 模进方式 {c d e f g a b} % 6. 模进序列 #2 % 7. 延伸几个八度 {} % 8. 上行结尾补充 {c'1} % 9. 下行结尾补充 {s2.-2 s4-3} % 10. 指法
结果如下:
还是比较方便的。
下面提供几种例子
\markup "例子一:短琶音" { \BasicExercise \relative c'{c e g c} % 1. 动机 {} % 2. 下行动机(缺省) {c4} % 3. 节奏型 #UP % 4. 先上行 "ModalTranspose" % 5. 调内模进 {c e g} % 6. 模进序列(这里相当于转位序列) #2 % 7. 延伸2个八度 \relative c'''{c4 e g e} % 8. 上行结尾补充 \relative c''{c4 g e g c,1} % 9. 下行结尾补充 {s4_1 s_2 s-3 s-5 s_1 s_2 s-4 s-5 s_1 s_2 s-3 s-5} % 10. 指法 }
\markup "例子二:哈农第一首" { \BasicExercise %以下是参数 \relative c'{ c e f g a g f e } % 1. 动机 \relative c''{ g e d c b c d e } % 2. 下行动机 {c8} % 3. 节奏型 #UP % 4. 先上行 "ModalTranspose" % 5. 调内模进 {c d e f g a b} % 6. 模进序列 #1 % 7. 延伸1个八度 {} % 8. 上行结尾补充 \relative c'{ g'8 e d c b c d e c1} % 9. 下行结尾补充 {s8_1 s_2 s_3 s_4 s_5 s_4 s_3 s_2 s1*13 s8-5 s-4 s-3 s-2 s-1 s-2 s-3 s-4} % 10. 指法 }
\markup "例子三:分解小三度练习"
{
\BasicExercise
\relative c'{ c ef } % 动机
{} % 下行时动机
{c8} % 节奏型、连断等
#UP % 先上行/下行
"Transpose" % 严格模进
{c cs d ds e f g gs a bf b} % 模进序列
#2 % 延伸几个八度
{} % 上行结尾补充
{c'1} % 下行结尾补充
{
s8_1 s_3 s_2 s_4 s_1 s_5 s_2 s_3
s_1 s_4 s_1 s_3 s_2 s_4 s_1 s_3
s_2 s_4 s_1 s_5 s-2 s-3 s-1 s-4
s1*3
s8^3 s^1 s^4 s^1 s^3 s^2 s^4 s^1
s^4 s^2 s^3 s^1 s^4 s^2 s^3 s^1
s^4 s^1 s^3 s^2 s^5 s^1 s^4 s^2
s^3 s^1 s^4 s^1
} % 指法
}
半音阶在上行转下行时有点问题,这个bug需要后面去修复
关于模进序列有一个要补充的是,\include的文件里有自动生成调性音阶的函数\scaleOnNote ,它的功能是指定了音符和调式之后,能直接从音符开始生成调式音阶。
\markup{"f小调音阶"} \scaleOnNote f' \minor \markup {"B大调音阶"} \scaleOnNote b \major
输出结果如下
按照这个路线也可以设计出相应的模式来,例如
\markup {"f小调旋律三度"}
{
\key f \minor
\BasicExercise
% 以下是参数
\relative c'{ f af } % 1. 动机
{} % 2. 下行动机(可缺省)
{c2 } % 3. 节奏型、连断等
#UP % 4. 先下行/上行
"ModalTranspose" % 5. 模进方式
\scaleOnNote f \minor % 6. 模进序列
#2 % 7. 延伸几个八度
{} % 8. 上行结尾补充
{f'1} % 9. 下行结尾补充
{s2-2 s-4} % 10. 指法
}