最简单的乐谱
音乐最核心的部分就是旋律,旋律是由音高和节奏构成的。本节中,我们将使用最简单的音高和节奏,编写最简单的单声部旋律。
tl;dr
较长的节开头会有 tl;dr,这是整节的要点汇总。然而,不建议初学者只阅读概览而跳过正文,尤其是在这一节。
- 像你用文本编辑器模仿简谱那样,打出调号、拍号和旋律,然后在调号拍号前添加
P:
,在旋律前添加N:
,就成为了 Sparks NMN 乐谱。 - 要分行书写一个旋律,应当在所分的行(称为碎片)中间添加碎片分割线
---
。碎片的划分不会影响乐谱显示时的分行。 - 终止线写作
|||
。 - 使用一些
D
开头的行可以为文档添加标题作者等信息。 - 代码中,每行第一处
//
以及其后的内容会被当作注释,处理时忽略。
从最简单的开始
学习任何事情,都应该从最简单的东西开始。
你的第一行旋律
我们先选一段最简单的旋律。不妨选择《小星星》的前两句。
等等,我们老师好像说过《小星星》是二拍子的。
首先,我们假设 Sparks NMN 不存在,你只有一个文本编辑器。你会如何表示这一段乐谱?
像这样,对吧?
现在,在两行的前面分别加上 P
(Props
的缩写)和 N
(Notes
的缩写),来告诉 Sparks NMN 这两行表示什么。然后,把它扔进 Sparks NMN 里面看看。
大功告成!没错,就是这么简单。
请注意,上面用的冒号 :
是半角(或者说英文)冒号。如果使用中文的冒号,将会产生一个“无法确定此行的意义”错误。
在后续的文档中,若没有特殊说明,符号都应该是且只能是半角符号。
如果你喜欢比较明确的表达,你也可以直接使用 Props
和 Notes
,而不使用缩写。不过,不要弄错大小写哦!
在不引起歧义的情况下,空格是可以省略的。因此,上面的例子也可以这么写:
这将渲染出完全一样的结果。
书写更长的旋律
你已经学会了,现在来写出完整的《小星星》儿歌旋律吧!
在继续看之前,不妨自己试一试。
你可能会这么做。
这是自然是完全可以的。但是如此长的一行显得非常不美观,而且如果旋律比这还要长,今后的修改也会成为一件苦差事。明智的做法是分行书写。
似乎这玩意表示的是多声部?这并不是我们想要的结果。解决方法是在分行处添加碎片分割线。碎片分割线可以由若干个 -
组成,必须独占一行。这样,我们就把旋律分成了多个碎片。
为了美观,可以在第一个碎片之前也增加分割线。
这样,问题就解决了。
可以看到,这里每个碎片省略了开头的小节线,但保留了最后的小节线。
在碎片开头添加多余的小节线,不会对渲染结果产生任何影响,但是,若省略最后的小节线,会导致这个小节线被隐藏。不过不必担心——如果你不小心把小节线添加错了位置,编辑器会给出警告。
碎片的划分方式并不影响渲染时的分行。关于分行的方法,后文布局章节将会提到。
添加终止线
如果你对你的音乐课本比较熟悉,你就会知道,上面这个还不是一份完整的乐谱。旋律结束的位置上应当添加一个终止线,即一个前细后粗的双小节线。解决方法很简单,将最后的小节线改成 |||
。
你可以在表示小节线的符号之间添加空格,不会影响渲染的结果。
补充标题与作者信息
要形成一份可以直接打印的乐谱,还需要添加头部的标题等信息。将这些行添加在文件开头即可:
头部信息 | 说明 | 全称 | 格式 |
---|---|---|---|
标题 | DocTitle | Dt: <标题> | |
副标题 | DocSubtitle | Ds: <副标题> | |
来源 | 页面左上角 | DocPrescript | Dp: <来源> |
版本号 | 页面右上角 | DocVersion | Dv: <版本号> |
作者 | DocAuthor | Da<[<作为>]?>: <作者> ,例如 Da[作词]: 佚名 | |
尾注 | DocFootnote | Df<[<编号>]?>: <文本> ,例如 Df[1]: 这里的符号表示换气 |
这里格式中的 <xxx?>
表示尖括号内的内容可有可无。所以,你也可以写 Da: 佚名 作曲
和 Df: [1] 这里的符号表示换气
。
不必担心记不住。只需要在编辑器一行的开头输入 D
,编辑器会自动弹出建议框供选择。
最低版本:Sparks NMN 1.14.16
目前,尾注文本 Df
会显示在整个乐谱的末尾(这一行为未来可能改变),因此也可以添加在整个文档最后,而不必在开头。
回到之前《小星星》的例子,我们可以这样添加文档信息:
如果要在这些乐谱信息行中添加一些无法直接表示的字符,可以使用转义序列。转义序列是由 \
字符开始的序列,用来代表一些特殊的字符。如果你对计算机程序语言并不熟悉,因而不了解转义字符,这里有一份简单的介绍。 最低版本:Sparks NMN 1.14.16
例如,在尾注中添加网址。如果不使用转义字符,将会出现连续的 //
,这会导致后面的内容被认为是注释(马上介绍),从而被忽略。
添加注释
有时为了方便修订,你可以向代码中添加注释。注释是帮助读者理解代码的文本,在处理时会被忽略。
要添加注释,只须输入 //
,然后在后面添加内容。
注释可以是一条很长的分割线,帮助你定位曲谱中的分段点,像这样:
不过,显而易见的东西不应该添加注释。这只会显得多余,而起不到改善可读性的作用。一个反面教材:
编辑体验 - 预览视图
部分章节中我们将穿插“编辑体验”部分,用来介绍 Sparks NMN 试用版和桌面版编辑器提供的一些功能。
刷新预览
如果你尝试过“试用模式”,你可能会注意到,预览并不会在输入时立即更新,而是需要大约 1 秒的时间刷新。这是有意为之的。由于解析代码并渲染预览需要一些时间,实时更新预览会导致编辑时出现微小卡顿,这可能会大大影响输入的准确度。
用来保存的快捷键 Ctrl + S 会立即刷新预览。这一设计的用意是鼓励用户养成及时保存的好习惯。毕竟,用电脑工作的基本素养,就是“左手永远在 Ctrl-S 上”。
如果只是想刷新预览,而不希望保存,可以按 Ctrl + R。
在桌面版应用中,预览自动刷新的延迟可以自行设置。你也可以选择禁用自动刷新,只通过 Ctrl + S 来触发。
代码-预览双向定位
在代码中寻找某个音符,或者弄清楚正在编辑的代码对应哪个小节,可能是一件比较痛苦的事情。为此,编辑器提供了定位功能,能够指示你在编辑什么。
在预览中用鼠标点击音符,编辑器会自动将你的光标定位到音符之前的位置。
将光标置于音符行的小节内,预览中会高亮对应的小节。即使不刷新预览,高亮位置也会实时更新。
挑战
接下来...
继续之前,先了解一下关于音乐属性的基本概念。