←

简谱歌词对齐标准(NN-MD 通俗版 v1.4)

📄 文章 🌐 公开 👁 8 次
📋 列表 ✏️ 编辑 🎨 画布版 📋 复制MD 🌐 复制HTML ☆ 收藏 🔗 复制链接

简谱动画播放器:

https://www.funnyai.com/animate/music/

简谱歌词对齐标准(NN-MD 通俗版 v1.4)

本规范是 NN-MD v1.3 的升级版(v1.4),用大白话讲清如何用纯文本书写简谱和歌词,并让它们严格对齐。

v1.4 在完整保留 v1.3 规则的基础上,重点规范了:

  • 增时线 -
  • 延音线 ~
  • 圆滑线 ( )
  • 三连音 [3: ... ]
  • 连音与歌词的对应关系
  • 跨小节连音
  • 跨行连音
  • 连音在最终乐谱中的显示方式

其中最重要的一点是:

简谱文本里的 ~、(、) 是音乐关系标记,不是普通歌词格子。最终显示时,应根据音符的位置画出真正的弧线,而不是把这些字符直接显示出来。


一、音乐名词小词典(先弄懂再说)

为了看懂规则,您只需要理解下面几个词:

音符

数字 1 到 7,代表 do re mi fa so la ti。

数字 0 叫休止符,代表不唱、不出声,但拍子照样数够。


增时线(也叫“延时线”)

短横 -,每个 - 单独占一个位置,作用是把前面的音再延长一拍。

比如:

5 -

就是“5”唱两拍。

再比如:

5 - -

就是“5”持续三拍。

注意:

- 是时值的一部分,它本身占一个拍位。


附点

小圆点 .,附在音符后面,让它延长一半的拍子。

如:

5.

唱一拍半。


减时线

斜杠 /,附在音符后面让它变短。

加一个 / 变八分音符(半拍),加两个 // 变十六分音符(四分之一拍)。

例如:

5/
5//

装饰音(也叫倚音)

写在大音符前面的小音符,用花括号 { } 包起来。

例如:

{6 5} 3

它一闪而过,不占歌词的字位。唱的时候带一下就行。


延音线

波浪号 ~,放在两个一样的音之间,表示:

两个相同的音连接起来唱,中间不能断。

例如:

5 ~ 5

这两个 5 仍然分别占自己的拍位,但演唱时不重新发声。

歌词只对应第一个音,后面的音用下划线 _ 占位。

例如:

M: | 5 ~ 5 |
L: | 啦 _ |

这里:

5

和:

5

都是拍位。

但是“啦”只唱一次。


圆滑线

小括号 ( ),表示包起来的几个音要唱得连贯、圆滑。

例如:

( 1 2 3 5 )

表示:

1 → 2 → 3 → 5

这一组音需要连贯演唱或演奏。

它不影响歌词对齐,里面的音该怎么对字就怎么对。

例如:

M: | ( 1 2 3 5 ) |
L: | 春 天 在 哪 |

四个音仍然对应四个歌词格子。

注意:

圆滑线最终显示时,不是把 ( ) 两个括号显示出来,而是应该在音符上方画出类似“眉毛”的弧线:

       ╭────────────╮
1      2      3      5
春     天     在     哪

三连音

标记:

[3: ... ]

表示括号里的三个音平均分拍子。

例如:

[3: 2/ 1/ 2/]

表示三个音作为三连音演奏。

里面的音符照样一个字一个位置。


小节、拍号

音乐用竖线 | 分成一节一节的,叫小节。

拍号如:

4/4

表示每小节有 4 拍。

这些只是辅助,不影响歌词对齐。


M 行 / L 行

M 行是简谱行(Music)。

L 行是歌词行(Lyrics)。

v1.3 开始推荐使用:

M:
L:

前缀标记,更清晰。


占位符 _

下划线在 v1.4 中有两个用途:

  1. 音后修饰符(紧跟音符,如 5_):表示低音 5
  2. 歌词占位(独立成“词”):表示“这里不唱新字、拍子照数”

例如:

M: | 5 - |
L: | 啦 _ |

好了,就这些,足够用了。


二、核心思想:像填格子一样对齐

把简谱(M 行)和歌词(L 行)想象成两条带格子的纸条。

每个格子之间用空格隔开,格子的数量必须一样多,然后一格对一格,就自然对齐了。

哪些算“格子”?

简谱行里:

  • 每个音符(包括 0)算一格。
  • 每个增时线 - 也算一格。
  • 小节线 |
  • 延音线 ~
  • 圆滑线 ( )
  • 三连音 [3: ]

等结构标记不算格子,它们被跳过。

装饰音:

{6 5}

包住的整个花括号内部,全部不算格子,完全无视。


歌词行里:

  • 一个汉字算一格。
  • 一个英文单词也算一格。
  • 遇到不唱但占拍子的地方,就用下划线 _ 占一格。
  • 空格用来分格,绝不省略。

规则就这么简单:

简谱的有效格子数 = 歌词的格子数。

不等就说明写错了。


三、文件整体结构

v1.4 推荐用以下结构写一首歌(从上到下):

# 标题                  (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.4 推荐使用:

M:
L:

前缀标记简谱行和歌词行。

例如:

M: | 1 2 3 1 |
L: | 你 问 我 爱 |

也兼容无前缀写法。

程序会按:

含数字多 = 简谱行
含汉字多 = 歌词行

自动分类。


3.3 分隔线 ---

--- 行是元信息和正文之间的分界。

如果不想写元信息,可以不写 ---,直接进入 M/L 行。


四、简谱行(M行)书写规矩

M 行只放简谱内容。

每个要素之间用空格分开。


1. 基本音符

1 2 3 4 5 6 7

表示中音区。

休止符用:

0

2. 高低音

在数字后加 ^ 表示高音,_ 表示低音。

例如:

1^
5_

分别表示高音 do 和低音 so。

1^^
5__

分别表示倍高音和倍低音。

v1.4 严格规定:

^ 和 _ 互斥。

一个音只能高八度或低八度,不能同时使用。


兼容旧写法

1^_

是 v1.2 旧风格。

v1.4 不推荐,但程序可以宽容处理:

只取第一个修饰符。

推荐写法:

1^

或者:

1_

二选一。


3. 长短

不加东西的纯数字是四分音符,算 1 拍。

后面加 /:

1/

变八分音符,半拍。

加 //:

1//

变十六分音符,四分之一拍。

后面加 -:

1 -

每多一个 - 就多延 1 拍。

后面加点:

1.

延长一半。


4. 升降号

数字前面加 # 升,加 b 降。

例如:

#4
b7

5. 特殊记号

小节线

|

前后加空格。


延音线

~

放在两个相同音之间。

例如:

5 ~ 5

圆滑线

(
)

开始和结束位置。

例如:

( 1 2 3 5 )

三连音

[3:
]

例如:

[3: 1/ 2/ 3/ ]

装饰音

{
}

里面只能放音符,不能放 - 等杂物。

例如:

{6 5} 3

重要:增时线 - 必须单独写成“词”

前后空格。

正确:

5 -

错误:

5-

虽然程序可以识别 5-,但不利于人眼对齐阅读。


五、歌词行(L行)书写规矩

L 行只放歌词和占位符,空格分隔。

  • 每个格子放一个汉字。
  • 拖腔、延音、连音等不需要唱新字的地方,用下划线 _ 占一个格子。
  • 英文歌词一个单词占一格,如 love。
  • 休止符 0 处必须用 _ 占位,因为这里虽然不唱,但拍子位置要保留。
  • 歌词中不要出现下划线字符,如果需要表示停顿或拖音,已经统一用 _ 处理。

标点符号

歌词中可以包含中文标点:

。
,
?
!

等。

每个标点算一格。

这和汉字一样处理。


六、对齐规则精讲(消除所有歧义)

1. 拍位数严格相等

简谱行去掉所有结构记号:

|
~
( )
[3:
]

以及整个装饰音块:

{...}

之后,剩下的每一个音符和每一个 - 都是一个“拍位”。

L 行用空格切出来的词数量必须和拍位数相同。

多一个少一个都不行。


2. 装饰音彻底无关

例如:

{6 5}

里面的 6 和 5 绝对不占拍位。

不参与歌词计数。

L 行不用为它们准备任何格子。

就像没看到它们一样。


3. 延音线后的音符占拍位但不换字

例如:

5 ~ 5

中,两个 5 都是拍位。

但唱成一个连贯的“啊”。

所以歌词对应第一个 5 写实际歌词,第二个 5 的位置用 _ 顶替:

M: | 5 ~ 5 |
L: | 啦 _ |

同理,它的增时线 - 也一样占位用 _。


4. 一字多音用 _ 撑开

一个“风”字拖了四个拍位,例如:

6 - 6 -

歌词就写成:

风 _ _ _

四个格子,一个“风”,三个下划线。


5. 休止符必须用 _ 占位

休止符:

0

虽然不唱,但在拍位计数里,它和普通音符没有区别。

如果歌词行少给它一个格子,对齐就全乱了。

所以:

0

处永远用:

_

占位。


6. 按小节对齐宽容模式(v1.3 新增)

核心改进:

L 行可以“偷懒”少写几个字,程序会按 M 行的小节结构自动补 _ 占位。

两种情况:


情况 A:L 行有 | 切分,且段数等于 M 行小节数

按段对齐。

适用于:

用户精确写出了每小节的歌词。

算法:

L 段少词时补 _ 到 M 段格数,多词时截断。


情况 B:L 行没有 |(一段长串),或段数不对

按词池切分。

适用于:

用户懒得写 |,把所有歌词用空格连成一行。

算法:

把 L 行所有词展平成词池,按 M 行小节顺序切分。

每小节长度 = M 小节格数。


示例

M: | 1 1 5 5 | 6 6 5 - | 4 4 3 3 | 2 2 1 - |
L: | 一 闪 一 闪 | 亮 晶 晶 _ | 满 天 都 是 | 小 星 星 _ |

如果用户偷懒不写 |,下面这种写法也合法:

M: | 1 1 5 5 | 6 6 5 - | 4 4 3 3 | 2 2 1 - |
L: 一 闪 一 闪 亮 晶 晶 _ 满 天 都 是 小 星 星 _

程序会把 L 词池按:

4 - 4 - 4 - 4

切分,分配到 4 个小节。


更厉害的是:用户忘写 - 也没事

比如:

M: | 6 6 5 - | 4 4 3 3 |
L: | 亮 晶 晶 | 闪 闪 闪 |

每小节都是 4 cells。

虽然 L 比 M 少 2 个词,但程序会自动补 _:

亮 晶 晶 _ | 闪 闪 闪 _

对应:

“亮晶晶”2 拍 + 延音 1 拍。


七、连音、延音、圆滑线的详细规则(v1.4 新增)

这一节是 v1.4 最重要的新增内容。

简谱里容易把“延长一个音”和“几个音连贯演唱”混在一起。

v1.4 明确区分三种东西:

符号 名称 作用
- 增时线 延长前面的音,每个 - 占一个拍位
~ 延音线 两个相同音连接起来,中间不重新发音
( ) 圆滑线 一组音连贯、圆滑地演唱或演奏

1. - 是时值,不是连音关系

例如:

5 -

表示:

5 延长到两拍。

它的拍位是:

5   -

歌词:

啦   _

2. ~ 是两个音之间的延音关系

例如:

5 ~ 5

表示两个相同的 5 连续保持。

两个 5 仍然分别占拍位:

5   5

但第二个 5 不重新唱一个字。

歌词:

啦   _

3. ( ) 是一组音之间的圆滑关系

例如:

( 1 2 3 5 )

四个音仍然是四个拍位:

1   2   3   5

歌词:

春  天  在  哪

圆滑线不会减少音符数量,也不会减少歌词格子。


4. 圆滑线不是普通括号

文本:

( 1 2 3 5 )

只是输入方式。

最终显示时,不应该直接显示:

( 1 2 3 5 )

而应该显示成:

       ╭────────────╮
1      2      3      5

也就是简谱上方常见的“眉毛”一样的弧线。

因此:

( 表示圆滑线开始,) 表示圆滑线结束;它们本身不是最终乐谱中的可见字符。


5. 圆滑线不影响歌词格子

例如:

M: | ( 1 2 3 5 ) |
L: | 春 天 在 哪 |

有效拍位仍然是:

1 2 3 5

歌词仍然是:

春 天 在 哪

不能因为有 ( ) 就减少格子。


6. 连音可以跨小节

例如:

M: | ( 1 2 3 | 4 5 6 ) |
L: | 春 天 在 | 哪 里 啊 |

圆滑线从第一小节的 1 一直连接到第二小节的 6。

最终视觉效果应该类似:

       ╭────────────────────────╮
1   2   3 | 4   5   6
春  天  在 | 哪  里  啊

小节线 | 不会截断圆滑线。


7. 连音可以跨行

如果歌曲太长,需要换行:

M: | ( 1 2 3 4 |
M: | 5 6 7 1 ) |

仍然表示:

从第一行的 1 一直圆滑连接到第二行的 1。

换行不能让这条音乐关系消失。

实际显示时,可以根据排版空间分成两段:

第一行:

      ╭────────────
1   2   3   4


第二行:

────────────╮
5   6   7   1

具体画法由显示程序决定。


8. 延音线与圆滑线可以同时存在

例如:

M: | ( 1 2 ~ 2 3 ) |

这里有两个不同关系:

圆滑线:
1 → 3

延音线:
2 → 2

歌词:

L: | 春 天 _ 风 |

两种关系互不冲突。


八、完整实例(看着例子秒懂)

例1:《小星星》(标准格式 v1.4)

# 小星星
## 1=C 4/4
## 速度 120
## 莫扎特 曲
---
M: | 1 1 5 5 | 6 6 5 - | 4 4 3 3 | 2 2 1 - |
L: | 一 闪 一 闪 | 亮 晶 晶 _ | 满 天 都 是 | 小 星 星 _ |
M: | 5 5 4 4 | 3 3 2 - | 5 5 4 4 | 3 3 2 - |
L: | 挂 在 天 空 | 放 光 明 _ | 好 像 许 多 | 小 眼 睛 _ |
M: | 1 1 5 5 | 6 6 5 - | 4 4 3 3 | 2 2 1 - |
L: | 一 闪 一 闪 | 亮 晶 晶 _ | 满 天 都 是 | 小 星 星 _ |

第三小节简谱有四个拍位:

5 6 5 -

歌词正好:

满 天 都 是

末位使用“是”字占住对应位置。

如果这里是拖音,也可以根据具体唱法写成 _。


例2:延音线和跨小节圆滑线

M: | ( 3/ 5/ ) 6 - | ( 6 5 3 ) | 2 - - - |
L: | 春 风 吹 _ | 绿 吹 岸 _ | _ _ _ _ |

第一小节:

3/ 5/ 6 -

共 4 个有效拍位。

圆滑线:

( 3/ 5/ )

不占格子。

第二小节:

6 5 3

以及最后的占位结构,根据实际歌词填写。

如果一个“风”字需要跨越多个拍位,例如:

M: | 6 - | 6 - |
L: | 风 _ | _ _ |

则表示“风”持续跨越四个拍位。


例3:装饰音和三连音

M: | {6 5} 3 - 3 - | [3: 2/ 1/ 2/] 3 - - |
L: | 练 _ 习 _ | 三 连 音 _ _ _ |

装饰音:

{6 5}

完全忽略。

第一小节拍位:

3 - 3 -

共 4 个,对应:

练 _ 习 _

第二小节三连音内部:

2/ 1/ 2/

都是有效拍位。

加上后面的:

3 - -

一共 6 个拍位。

歌词:

三 连 音 _ _ _

也是 6 个格子,完美。


例4:宽容模式——L 行偷懒

M: | 1 2 3 1 | 1 2 3 - |
L: 两 只 老 虎 跑 得 快

L 行没写 |,也没用 _ 占延音位。

程序会按 M 行小节自动切分:

  • 小节 1(4 cells):两 只 老 虎
  • 小节 2(4 cells):跑 得 快 _

自动补 1 个 _ 占延音。


例5:纯器乐段(无歌词)

M: | 1 1 5 5 | 3^ 3^ 2^ 2^ | 1 - - - | 0 - - - |
L: | 卡 农 之 门 | _ _ _ _ | _ _ _ _ | _ _ _ _ |

中间两小节没有歌词,全部用 _ 占位。

4 cells × 2 段 = 8 个 _。


九、v1.2 → v1.3 → v1.4 兼容性说明

特性 v1.2 旧写法 v1.3 写法 v1.4 写法 兼容性
同时高低音 1^_ 1^ 或 1_ 1^ 或 1_ 程序宽容处理
元信息 标题: ... 调: ... # 标题 ## 1=C 同 v1.3 两种都支持
M/L 前缀 无 M: L: M: L: 两种都支持
L 行分小节 必有 | 可有可无 可有可无 按小节宽容对齐
_ 在音后 低音/旧八分音符 低音 低音 v1.3 规则延续
_ 在 L 行 歌词占位 歌词占位 歌词占位 行为一致
八分音符 旧写法可能使用 _ 1/ 1/ v1.3 起统一
增时线 - - - 行为一致
延音线 旧规则存在歧义 ~ ~ v1.4 明确规范
圆滑线 ( ) ( ) ( ) v1.4 明确显示规则
三连音 [3: ... ] [3: ... ] [3: ... ] 行为一致

关于 v1.2 中 1^_ 的特殊说明

v1.2 用户如果写:

1^_

期望:

“1 升八度 + 八分音符”

在 v1.3 及 v1.4 中,这个写法已经被重新定义。

现在:

_

在音后只表示:

低音。

八分音符使用:

/

所以:

1^_

如果原本想表示:

高音 + 八分音符

应该改成:

1^/

升级替换规则

1^_ → 1^/

表示:

升八度 + 八分音符。

1_

如果原来就是低音:

1_ → 1_

无需修改。

如果旧文件中的:

1_

原本表示八分音符,则升级为:

1/

十、连音显示规范(v1.4 新增)

这一节专门说明:

文本怎么写是一回事,最终乐谱怎么显示是另一回事。

这是 v1.4 与 v1.3 最大的改进之一。


1. 文本中的 ~ 不应该直接显示

例如:

M: | 5 ~ 5 |

最终乐谱不应该显示:

5 ~ 5

而应该显示成类似:

    ╭────╮
5   5

也就是说:

~ 是“两个音之间存在延音关系”的说明。


2. 文本中的 ( ) 不应该直接显示

例如:

M: | ( 1 2 3 5 ) |

最终显示应该类似:

      ╭────────────╮
1     2      3      5

而不是:

( 1 2 3 5 )

3. 连音线不能参与普通文字排版

程序不能简单地认为:

(

和:

)

是两个普通字符,然后按照字符宽度画线。

因为实际显示时:

  • 字体可能改变
  • 字号可能改变
  • 页面宽度可能改变
  • 小节宽度可能改变
  • 音符可能自动换行
  • PDF 和 HTML 的字体尺寸可能不同

所以连音必须跟随音符实际位置。


4. 圆滑线应该根据首尾音符画

例如:

( 1 2 3 5 )

解析后可以理解为:

开始音符 = 1
结束音符 = 5

显示程序找到:

1 的中心位置
5 的中心位置

然后在两个位置之间画弧线。


5. 连音线默认位于音符上方

例如:

       ╭────────────╮
1      2      3      5

如果音符上方已经有高音符号、其他记号,程序可以自动提高弧线位置,避免重叠。


6. 连音线不能压住歌词

歌词位于音符下方:

       ╭────────────╮
1      2      3      5
春     天      在     哪

连音线应该始终保持在音符区域上方。


7. 跨小节时不能被小节线截断

例如:

M: | ( 1 2 3 | 4 5 6 ) |

应该理解为一条完整的音乐关系:

       ╭────────────────────────╮
1   2   3 | 4   5   6

而不是:

       ╭──────╮
1   2   3 | 4   5   6

然后丢失后半部分。


8. 跨行时必须保留关系

如果:

M: | ( 1 2 3 4 |
M: | 5 6 7 1 ) |

表示一条从第一行延续到第二行的圆滑线。

程序至少要保证:

连音关系不会因为换行而丢失。


十一、程序解析时的基本原则(v1.4 新增)

对于普通读者来说,这一节可以简单理解为:

程序应该先理解音乐,再负责画出来。

不要把所有东西都当成普通文字。


音符

1
2
3
4
5
6
7
0

这些是真正的音符或休止符。

它们占格子。


时值

-
.
/

这些影响音符的时值。

其中:

-

本身占一个拍位。


音乐关系

~
( )

这些不是新的音符。

它们描述:

音符之间是什么关系。

所以不占歌词格子。


装饰结构

{ }

内部的音符作为装饰音处理。

整个装饰音块不占歌词格子。


三连音

[3:
]

只是告诉程序:

里面这一组音符应该按照三连音方式演奏。

真正的音符仍然正常占格子。


十二、几个容易搞错的地方

1. - 和 ~ 不一样

5 -

表示:

一个音延长。

而:

5 ~ 5

表示:

两个相同音之间存在延音关系。


2. ~ 和 ( ) 不一样

5 ~ 5

重点是:

相同音连接,中间不重新发声。

而:

( 1 2 3 5 )

重点是:

多个音连续、圆滑地演唱或演奏。


3. 连音不会减少歌词格子

例如:

M: | ( 1 2 3 5 ) |

仍然是:

1 2 3 5

四个格子。


4. 延音也不会减少歌词格子

例如:

M: | 5 ~ 5 |

仍然有两个音符格子:

5 5

只是歌词:

啦 _

5. 装饰音才是完全不占格子的音符

例如:

{6 5} 3

只有:

3

占正常歌词格子。


十三、v1.4 相比 v1.3 的改进

1. 明确休止符占位规则

明文规定:

0

必须在歌词行用:

_

顶格。

不再靠猜。


2. 装饰音内部成分限制

规定:

{ }

内只能出现音符,不能放增时线或其他记号,避免误解。


3. _ 双重含义明确化

v1.2 中 _ 既是低音修饰符又是八分音符修饰符,含义混乱。

v1.3 / v1.4 中:

  • _ 在音后 = 低音
  • / = 减时线(八分音符)
  • _ 在 L 行 = 歌词占位

4. 延音线占位原理图解

明确:

5 ~ 5

两端音符都是独立拍位。

但连起来唱时不换字:

啦 _

5. 圆滑线的视觉含义明确化

v1.4 明确规定:

( 1 2 3 5 )

表示:

从 1 到 5 的一组音符需要连贯、圆滑地演奏。

最终显示时应该画成音符上方类似“眉毛”的弧线,而不是直接显示括号。


6. 支持跨小节连音

圆滑线和延音关系可以跨越:

|

小节线。

小节线不会自动终止音乐关系。


7. 支持跨行连音

乐谱换行后:

原来的连音关系不能丢失。


8. 连音不影响歌词格子

明确规定:

~
(
)

都不占歌词格子。


9. 按小节对齐宽容模式

L 行可以偷懒少写 | 或忘写 -,程序按 M 行小节结构自动补 _,降低用户书写负担。


10. M/L 前缀 + Markdown 头部

文件结构更清晰:

标题
元信息
分隔线
M 行
L 行

程序宽容接受多种写法。


11. 语言全部大白话

不用:

Token、词法映射

等程序术语。

全部换成:

格子、拍位、音符、歌词、连音

零基础也能懂。


十四、v1.4 最终记忆口诀

如果只记住下面几句话,就已经足够使用这套标准:

音符占格子。

- 延长时值,也占格子。

~ 连接两个相同音,不占格子。

( ) 表示一组音圆滑演唱,不占格子。

{ } 装饰音整个不占格子。

[3: ] 是三连音标记,里面的真正音符仍然占格子。

歌词一个字对应一个格子,不唱新字就用 _。

文本里的连音符号是“关系”,最终显示时应该画成真正的弧线。


有了这份标准,任何两个人按照同样的空格规则敲出简谱和歌词,都能做到一字一音,准确无误;同时,程序也可以根据统一规则直接解析。

更重要的是:

人阅读时看的是简单、直观的简谱文本;程序处理时理解的是音符、时值和音符之间的关系。

这样既保持了 NN-MD 的“大白话、好输入、好阅读”特点,又为后面的 HTML、PDF、图片等真正乐谱渲染留下了足够清晰的规则。

💬 留言 ⋮⋮

加载中…
💡 不登录也可留言(IP 限制:每文/每天各 1/10 条)

加载中…

分 0.00
纸张白
护眼绿
羊皮卷
夜间黑
100%