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

 

posted on 2022-05-11 02:14  lilypond手残粉  阅读(134)  评论(0编辑  收藏  举报