基本练习生成器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. 指法 }