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