节奏进阶
本节中,我们将介绍更复杂的节奏写法,主要包括减时线、附点、和三连音记号。
tl;dr
- 减时线用小括号表示,一对小括号表示一条减时线。这个语法可以很自然地做到嵌套和分组。
例如1 (12) 3 (34) | (32) (12) 1
。 - 连音线写成音符后缀的形式,其中延长连音线需要在左侧音符后添加字符
~
,联合连音线需要在两侧音符后添加字符^
。
例如3 (3^2^) (35~) 5~ | 5 (57d) 1 -
。 - 若要省略弱起小节开头的若干时值,用延时线
-
代替即可。 - 三连音的写法形如
T(767)
和T2 3 4
,前者是八分或更短的三连音,后者是四分三连音。 - 在乐理属性中使用形如
hpm=60
qpm=120
spm=240
的方式添加拍速。三者分别表示二分音符、四分音符和八分音符。- 在拍速记号后紧跟
/<文本>
,可用模糊的文本(例如「较快」)代替拍速记号;紧跟/=<数值范围>
,可用数值范围(例如「65~75」)代替精确的数值。
- 在拍速记号后紧跟
- 将拍号的分子设为
0
,将变为散板。 - 不完整小节右侧的小节线用
/||
表示。
基本节奏符号
减时线与附点
为了引入更加复杂节奏记号,我们来看一个更加复杂的例子。这是经典儿歌《鲁冰花》副歌的第一段。
不应该写成 6 66 3 6 | #43 24 3 -
这样吗?
现在,剧透一下,比 2
高一个八度的音在代码中应该写成 2e
。对于节奏,附点音符的语法也是毫无疑问的,肯定是在音符后加一个 .
。但是,减时线(下划线)怎么办?如果你来设计,你会怎么做(如果有空不妨自己想一想)?
Sparks NMN 对下划线定义的语法是小括号,小括号内的音符会被添加下划线,像 2e (2e2e) 6 2e | (76) (57) 6 -
这样。
为什么用括号而不是什么长得像下划线的符号?
知道了这些以后,就不难编写出上面的片段对应的代码了。
Sparks NMN 也支持双附点或更多附点,只须在音符后加多个点即可实现。附点音符的时长是原音符的 1.5 倍,双附点就是 1.75 倍,以此类推。
延时线-
也可以有附点,这在 等三分拍号中可能比较有用。 新增于 1.15.8 嵌套的减时线
减时线的括号语法是天然可以嵌套的。利用这点,也能轻松地写出一些更复杂的节奏。比如《森林狂想曲》的 A 段:
再次剧透,比 6
低一个八度的音应该写成 6d
。
这是参考答案:
一般情况下,你不可以在减时线内部用延时线。通常这也没有任何意义。
并且,任何情况下,你不能给一个环境中的音符在另一个环境内添加延时线,例如 2 (12) - -
,尽管显示出来似乎是对的,但其实这样会使解析器误解,在音效试听(稍后介绍)中也会出现问题。
第一和第三小节的空间有些紧张,音符被迫挤在一起,影响了乐谱的空间感。有救吗?
连音线
再看一看上面《鲁冰花》的例子。是不是少了点什么?
没错,少了五条连音线。这里连音线的含义是两个音共同对应歌词中的一个字。
连音线的类型
如何加上连音线呢?在回答这个问题之前,需要先明确连音线的两种类型。
- 延长连音线:连音线连接相邻两个音高相同的音符,表示它们实际上是一个音符(时长相加),只是用两个音符来表示。如果需要有超过两个音时长相加,则它们需要两两之间相连,而不是用一条线连接首尾。
- 联合连音线:连接相邻的两个或更多音符中的第一个和最后一个,表示它们在演唱/弹奏时中间不应该断开,并且(可能)共同对应歌词中的一个字。被连接的多个音符仍然是多个音符。
Sparks NMN 对两种连音线的处理是有区别的,主要是这些:
- 按照语法规则,延长连音线只能连接到下一个音符,而不能选择其他音符。
- 处于延长连音线右端的音符会被「弱化」,也就是被标记为「无效」,不再能与歌词中的字进行配对。它的时值会被加到左端的音符上。而联合连音线不会产生这样的效果。
添加连音线
添加延长连音线的方式是在其左端音符后面添加 ~
。例如《鲁冰花》主歌中的一句,
而前面《鲁冰花》副歌例子中的连音线显然属于联合连音线。联合连音线的写法是在其两端的音符上都加上 ^
后缀。联合连音线是不可能首尾相连(如果这样应该合并成一个)或者嵌套的,后缀的语法设计也限制了这一点。
联合连音线跨越小节线或者内部有延长连音线时,排版算法会调整联合连音线的高度,避免两者的线条出现重合。
上面《鲁冰花》副歌的例子可以这么写:
你可能会发现 Sparks NMN 允许你用延长连音线连接音高不同的音符,比如 (3~2) (1~3) 2 -
。请不要这么做,这样毫无疑问是不规范且错误的,而且未来版本中可能会禁止。
两种连音线语法都支持跨碎片书写,因此不必将连音线作为划分碎片的依据。
可视化音符弱化
为了使得编辑时能够检查出连音线类型的错误,也为了让乐谱对音乐初学者更加友好,可以在文档头中添加一行 Rp: grayout=true
,开启弱化可视化功能。使用后,弱化的音符将具有一定的透明度。