# 简谱歌词对齐标准(NN-MD 通俗版 v1.3)
+ 本规范是 NN-MD v1.2 的升级版(v1.3),用大白话讲清如何用纯文本书写简谱和歌词,并让它们严格对齐。
+ v1.3 相比 v1.2 新增:M/L 前缀、Markdown 风格头部、按小节对齐宽容模式、`_` 双重含义(低音修饰符 / 歌词占位)。
- 本规范是 NN-MD v1.2 的升级版,用大白话讲清如何用纯文本书写简谱和歌词,并让它们严格对齐。
---
## 一、音乐名词小词典(先弄懂再说)
为了看懂规则,您只需要理解下面几个词:
- **音符**
数字 `1` 到 `7`,代表 do re mi fa so la ti。数字 `0` 叫 **休止符**,代表不唱不出声,但拍子照样数够。
+ - **增时线**(也叫"延时线")
+ 短横 `-`,每个 `-` 单独占一个位置,作用是把前面的音再延长一拍。比如 `5 -` 就是"5"唱两拍。
- - **增时线**(也叫“延时线”)
- 短横 `-`,每个 `-` 单独占一个位置,作用是把前面的音再延长一拍。比如 `5 -` 就是“5”唱两拍。
- **附点**
小圆点 `.`,附在音符后面,让它延长一半的拍子。如 `5.` 唱一拍半。
+
+ - **减时线**
+ 斜杠 `/`,附在音符后面让它变短。加一个 `/` 变八分音符(半拍),加两个 `//` 变十六分音符(四分之一拍)。
- **装饰音**(也叫倚音)
写在大音符前面的小音符,用花括号 `{ }` 包起来。它一闪而过,**不占歌词的字位**。唱的时候带一下就行。
- **延音线**
波浪号 `~`,放在两个一样的音之间,表示这两个音要连起来唱成一个,中间不能断。歌词只对应第一个音,后面的音用下划线 `_` 占位。
- **圆滑线**
小括号 `( )`,表示包起来的几个音要唱得连贯圆滑。它**不影响歌词对齐**,里面的音该怎么对字就怎么对。
- **三连音**
标记 `[3: ... ]`,表示括号里的三个音平均分拍子(比如三个音挤在两拍里)。里面的音符照样一个字一个位置。
- **小节**、**拍号**
音乐用竖线 `|` 分成一节一节的,叫小节。拍号如 4/4 表示每小节有 4 拍。这些只是辅助,不影响歌词对齐。
+
+ - **M 行 / L 行**
+ M 行是简谱行(Music),L 行是歌词行(Lyrics)。v1.3 推荐用 `M:` `L:` 前缀标记,更清晰。
+
+ - **占位符 `_`**
+ 下划线在 v1.3 中有两个用途:
+ 1. **音后修饰符**(紧跟音符,如 `5_`):表示低音 5
+ 2. **歌词占位**(独立成"词"):表示"这里不唱新字、拍子照数"
好了,就这些,足够用了。
---
## 二、核心思想:像填格子一样对齐
把简谱(M行)和歌词(L行)想象成两条带格子的纸条。**每个格子之间用空格隔开**,格子的数量必须一样多,然后一格对一格,就自然对齐了。
+
+ 哪些算"格子"?
+ - 简谱行里每个音符(包括 `0`)算一格。
+ - 每个增时线 `-` 也算一格。
+ - 小节线 `|`、连线 `~` `( )` `[3:` `]` 等标记**不算格子**,它们被跳过。
- 哪些算“格子”?
- - 简谱行里每个音符(包括 `0`)算一格。
- - 每个增时线 `-` 也算一格。
- - 小节线 `|`、连线 `~` `( )` `[3:` `]` 等标记**不算格子**,它们被跳过。
- 装饰音 `{ }` 包住的整个花括号内部,**全部不算格子**,完全无视。
+
+ 歌词行里:
+ - 一个汉字算一格。
+ - 一个英文单词也算一格。
+ - 遇到不唱但占拍子的地方,就用下划线 `_` 占一格。
- 歌词行里:
- - 一个汉字算一格。
- - 一个英文单词也算一格。
- - 遇到不唱但占拍子的地方,就用下划线 `_` 占一格。
- 空格用来分格,绝不省略。
规则就这么简单:**简谱的有效格子数 = 歌词的格子数**。不等就说明写错了。
+
+ ---
+
+ ## 三、文件整体结构
+
+ v1.3 推荐用以下结构写一首歌(从上到下):
+
+ ```
+ # 标题 (Markdown 一级标题:歌名)
+ ## 1=C 4/4 (Markdown 二级标题:调号 + 拍号)
+ ## 速度 120 (可选:速度 / BPM)
+ ## 词作者 / 曲作者 (可选:作者信息,会被识别但忽略)
+ --- (分隔线:标记元信息结束)
+ M: | 1 2 3 1 | 1 2 3 - |
+ L: | 你 问 我 爱 | 有 多 深 |
+ M: | ...
+ L: | ...
+ ```
+
+ ### 3.1 标题 / 元信息(Markdown 风格)
+
+ - `# 标题` → 解析为 `标题: ...`
+ - `## 1=C 4/4` → 解析为 `调: C` + `拍号: 4/4`
+ - `## 速度 120` → 解析为 `速度: 120`
+ - `## 作者 信息` → 会被识别为元信息行,但不会报错,会安全忽略
+
+ 也兼容旧式 `标题: 小星星` 写法(和 Markdown 风格混用也行)。
+
+ ### 3.2 M/L 前缀
+
+ v1.3 推荐用 `M:` `L:` 前缀标记简谱行和歌词行,更清晰:
+ - `M: | 1 2 3 1 |` → 简谱行
+ - `L: | 你 问 我 爱 |` → 歌词行
+
+ 也兼容**无前缀**写法(程序会按"含数字多 = 简谱行 / 含汉字多 = 歌词行"自动分类)。
+
+ ### 3.3 分隔线 `---`
+
+ `---` 行是元信息和正文之间的分界。如果你不想写元信息,可以不写 `---`,直接进入 M/L 行。
---
+ ## 四、简谱行(M行)书写规矩
- ## 三、简谱行(M行)书写规矩
M行只放简谱内容。每个要素之间用空格分开。
+
+ ### 1. 基本音符
+
+ `1` `2` `3` `4` `5` `6` `7` 表示中音区。
+ 休止符用 `0`。
+
+ ### 2. 高低音
+
+ 在数字后加 `^` 表示高音,`_` 表示低音。
+ 例如 `1^` 高音do,`5_` 低音so。
+ `1^^` 是倍高音,`5__` 是倍低音。
+
+ **v1.3 严格规定**:`^` 和 `_` 互斥(一个音只能高八度或低八度,不能同时)。
+ - `1^_` 是 v1.2 旧风格,v1.3 不推荐,但程序会宽容处理(只取第一个修饰符)。
+ - 推荐写法:`1^` 或 `1_`,二选一。
+
+ ### 3. 长短
+ - 不加东西的纯数字是四分音符,算 1 拍。
+ - 后面加 `/` 变八分音符(半拍),加 `//` 变十六分音符。
+ - 后面加 `-` 增时线,每多一个 `-` 就多延 1 拍。
+ - 后面加点 `.` 延长一半。
- 1. **基本音符**
- `1` `2` `3` `4` `5` `6` `7` 表示中音区。
- 休止符用 `0`。
+ ### 4. 升降号
- 2. **高低音**
- 在数字后加 `^` 表示高音,`_` 表示低音。
- 例如 `1^` 高音do,`5_` 低音so。
- `1^^` 是倍高音,`5__` 是倍低音。
+ 数字前面加 `#` 升,加 `b` 降。如 `#4` `b7`。
- 3. **长短**
- - 不加东西的纯数字是四分音符,算 1 拍。
- - 后面加 `/` 变八分音符(半拍),加 `//` 变十六分音符。
- - 后面加 `-` 增时线,每多一个 `-` 就多延 1 拍。
- - 后面加点 `.` 延长一半。
+ ### 5. 特殊记号
- 4. **升降号**
- 数字前面加 `#` 升,加 `b` 降。如 `#4` `b7`。
+ - 小节线 `|`,前后加空格。
+ - 延音线 `~`,放在两个相同音之间。
+ - 圆滑线 `(` 开始,`)` 结束。
+ - 三连音 `[3:` 开始,`]` 结束。
+ - 装饰音 `{` 开始,`}` 结束,**里面只能放音符,不能放 `-` 等杂物**。
- 5. **特殊记号**
- - 小节线 `|`,前后加空格。
- - 延音线 `~`,放在两个相同音之间。
- - 圆滑线 `(` 开始,`)` 结束。
- - 三连音 `[3:` 开始,`]` 结束。
- - 装饰音 `{` 开始,`}` 结束,**里面只能放音符,不能放 `-` 等杂物**。
+ **重要**:增时线 `-` 必须单独写成"词",前后空格。写 `5 -` 是对的,写 `5-` 是错的(虽然程序能识别,但不利于人眼对齐阅读)。
- **重要**:增时线 `-` 必须单独写成“词”,前后空格。写 `5 -` 是对的,写 `5-` 是错的。
---
+ ## 五、歌词行(L行)书写规矩
- ## 四、歌词行(L行)书写规矩
L行只放歌词和占位符,空格分隔。
+ - 每个格子放一个汉字。
+ - 拖腔、连音等不需要唱新字的地方,用下划线 `_` 占一个格子。
+ - 英文歌词一个单词占一格,如 `love`。
- - 每个格子放一个汉字。
- - 拖腔、连音等不需要唱新字的地方,用下划线 `_` 占一个格子。
- - 英文歌词一个单词占一格,如 `love`。
- **休止符 `0` 处必须用 `_` 占位**,因为这里虽然不唱,但拍子位置要保留。
- 歌词中不要出现下划线字符,如果需要表示停顿或拖音,已经统一用 `_` 处理。
+
+ ### 标点符号
+
+ 歌词中可以包含中文标点(`。` `,` `?` `!` 等),每个标点算一格。这和汉字一样处理。
---
+ ## 六、对齐规则精讲(消除所有歧义)
- ## 五、对齐规则精讲(消除所有歧义)
### 1. 拍位数严格相等
+
+ 简谱行去掉所有结构记号(`|` `~` `( )` `[3:` `]`)以及整个装饰音块 `{...}` 之后,剩下的每一个音符和每一个 `-` 都是一个"拍位"。L行用空格切出来的词数量必须和拍位数相同,多一个少一个都不行。
- 简谱行去掉所有结构记号(`|` `~` `(` `)` `[3:` `]`)以及整个装饰音块 `{...}` 之后,剩下的每一个音符和每一个 `-` 都是一个“拍位”。L行用空格切出来的词数量必须和拍位数相同,多一个少一个都不行。
### 2. 装饰音彻底无关
+
`{6 5}` 这样的东西,里面的 `6` 和 `5` 绝对不占拍位,不参与歌词计数,L行不用为它们准备任何格子。就像没看到它们一样。
### 3. 延音线后的音符占拍位但不换字
+
+ `5 ~ 5` 中,两个 `5` 都是拍位,但唱成一个连贯的"啊",所以歌词对应第一个 `5` 写实字,第二个 `5` 的位置用 `_` 顶替。同理,它的增时线 `-` 也一样占位用 `_`。
- `5 ~ 5` 中,两个 `5` 都是拍位,但唱成一个连贯的“啊”,所以歌词对应第一个 `5` 写实字,第二个 `5` 的位置用 `_` 顶替。同理,它的增时线 `-` 也一样占位用 `_`。
### 4. 一字多音用 `_` 撑开
+
+ 一个"风"字拖了四个拍位(比如 `6 - 6 -`),歌词就写成 `风 _ _ _`,四个格子,一个风三个下划线。
- 一个“风”字拖了四个拍位(比如 `6 - 6 -`),歌词就写成 `风 _ _ _`,四个格子,一个风三个下划线。
### 5. 休止符必须用 `_` 占位
+
休止符 `0` 虽然不唱,但在拍位计数里,它和普通音符没区别。如果歌词行少给它一个格子,对齐就全乱了。所以 `0` 后永远跟 `_`。
+ ### 6. 按小节对齐宽容模式(v1.3 新增)
- ---
+ **核心改进**:L 行可以"偷懒"少写几个字,程序会按 M 行的小节结构自动补 `_` 占位。
- ## 六、完整实例(看着例子秒懂)
+ 两种情况:
- ### 例1:《茉莉花》片段
- ```
- M: | 3 3 5 6 | 1^ 1^ 6 5 | 5 6 5 - |
- L: | 好 一 朵 茉 | 莉 _ 花 _ | 好 一 朵 _ |
- ```
- 解释:第三小节简谱有四个拍位 `5` `6` `5` `-`,歌词正好 `好 一 朵 _`,末位用 `_` 占住延音位置。
+ **情况 A**:L 行有 `|` 切分,且段数等于 M 行小节数 → **按段对齐**
+ - 适用于:用户精确写出了每小节的歌词
+ - 算法:L 段少词时补 `_` 到 M 段格数,多词时截断
- ### 例2:延音线和跨小节连音
- ```
- M: | ( 3/ 5/ ) 6 - ~ | 6 - 5 3 | 2 - - - |
- L: | 春 _ 风 _ | _ _ 吹 绿 | 岸 _ _ _ |
- ```
- 解释:圆滑线 `( )` 被跳过。第一小节有效拍位:`3/ 5/ 6 -` 共4个。`~` 跳过。第二小节有效拍位:`6 - 5 3` 共4个。但“风”字需要连起来,所以它的拍位实际是 `6`(一小节第三拍)、`-`(一小节第四拍)、`6`(二小节第一拍)、`-`(二小节第二拍) 共4个,歌词对应写成 `风 _ _ _`。第一小节后两拍是“风 _”,第二小节前两拍是“_ _”,恰好填满。休止符没有出现在这段。
-
- ### 例3:装饰音和三连音
- ```
- M: | {6 5} 3 - 3 - | [3: 2/ 1/ 2/] 3 - - |
- L: | 练 _ 习 _ | 三 连 音 _ _ _ |
- ```
- 解释:装饰音 `{6 5}` 完全忽略。第一小节拍位:`3 - 3 -` 4个,对 `练 _ 习 _`。第二小节三连音内部 `2/ 1/ 2/` 都是有效拍位,加上后面的 `3 - -`,一共 6 个拍位。歌词 `三 连 音 _ _ _` 也是 6 个格子,完美。
-
- ---
-
- ## 七、相比于之前版本的改进(歧义消除)
-
- 1. **明确休止符占位规则**
- 明文规定休止符 `0` 必须在歌词行用 `_` 顶格,不再靠猜。
-
- 2. **装饰音内部成分限制**
- 规定 `{ }` 内只能出现音符,不能放增时线或其他记号,避免误解。
-
- 3. **歌词中禁止下划线**
- 把 `_` 彻底保留为占位专用,歌词本字如需表示破折号或停顿,建议改其他方式。
-
- 4. **延音线占位原理图解**
- 强调 `~` 两端音符都是独立拍位,但连音不换字,歌词靠 `_` 后移,消除跨小节连字的困惑。
-
- 5. **语言全部大白话**
- 不再用“Token”“词法映射”等程序术语,全部换成格子、拍位,零基础也能懂。
-
- ---
-
- 有了这份标准,任何两个人按照同样的空格规则敲出简谱和歌词,都能做到一字一音,准确无误,而且人眼看着舒服,程序也能直接解析。您可以直接复制此版本文档进行推广,有任何细节想再调,我随时帮您微调。
… 内容过长,仅显示前 200 行 …