打谱么 · 线性乐谱

用纯文本书写简单乐谱,一键渲染为 MIDI。下面带你认识它的规则与语法。

什么是线性乐谱

线性乐谱(dapume)是一种用 ASCII 字符书写简单乐谱的方式,再由程序渲染为 MIDI。

它的每一行要么是「参数行」(修改调号、速度等演奏参数),要么是「音符行」(描述音符)。

C 大调、120bpm 的一段上行音阶
1=C 120bpm
1234567

参数行

参数行修改演奏参数,自下一行起生效。不同参数用空格连接、无顺序、大小写敏感。

调号以 1= 开头,后接 CDEFGAB 之一,可再接 #b., 表示半音与八度;BPM 以数字开头、bpm 结尾。

若未指定某项参数,则继承之前的值;首行未指定时默认 1=C 120bpm。

参数格式示例
调号1=CDEFGAB[#b.,]*1=C / 1=Bb.
速度<number>bpm120bpm
G 大调,90bpm
1=G 90bpm
12345
中途切换调号与速度
1=C
123
1=A 80bpm
123

音符行

与简谱相同,用 1~7 表示七个音符,0 表示休止符。音符后可叠加后缀表示音高与时值,后缀可叠加、无顺序。

无时值后缀时默认 0.5 拍;时值后缀可组合,例如 3 拍可写作 ~~ 或 =-。

音高含义时值含义
#升半音-1 拍
b降半音~1.5 拍
.升八度=2 拍
,降八度+4 拍
*0.5 拍
^0.25 拍
'0.125 拍
1 拍 sol、1 拍高八度 do、2.5 拍 do
1=C
5-1.-1=*
升半音、降半音、升八度、降八度
1=C 100bpm
1#1b1.1,

注释

双斜杠 // 后直到当前行末尾的内容都是注释,解析和播放时会被完全忽略。

注释既可以单独占一行,也可以写在参数行或音符行后,用来记录乐句、指法或排练提示。

注释不会改变演奏结果
1=C 100bpm  // C 大调
1234  // 第一乐句
// 换气
5432

同时音

在同一行里,用圆括号 () 把若干音符括起来,表示它们与括号前的旋律「同时」发声,叠加在同一条音轨上。

括号内的总时值会右对齐到前面那段旋律的末尾,因此很适合写「柱式和声」「双音」等同时落下的音。括号可嵌套。

do、mi、sol 三音同时(一个柱式和声)
1=C 100bpm
1(3)(5)
do re 之后,sol 与旋律同时落下
1=C 100bpm
13(5)

多轨谱(双手谱)

当「一整行」被一对圆括号完整包围时,这一行会成为一条新的音轨,与它上面那条普通行同时开始——就像钢琴的左右手分谱。

普通行依次构成主旋律(右手),其下方的整行括号行作为伴奏(左手)与之并行。注意区分:行内的 (...) 是同时音,整行的 (...) 才是新音轨。

两条音轨:1/3 行为主旋律,2/4 行与之并行
1=C 120bpm
1111111
(2222222)
3333333
(4444444)
右手旋律 + 左手低音伴奏
1=C 90bpm
13531353
(1,5,1,5,1,5,1,5,)

和弦演奏

在方括号 [] 内写入和弦记号,将自动演奏和弦并持续到下一个和弦。

和弦记号由「级数 + 类型 + 后缀 + 转位 + 八度」组成:级数为 1~7(可带 #b);类型如 m、dim、aug、M7、m7、7、9 等;

后缀如 add9、omit3、sus;转位与斜杠根音用 /;末尾的 ,/. 调整八度(和弦默认低八度)。

和弦伴奏的旋律
1=C 90bpm
[1]1234[5]567
加九、大七、挂四和弦进行
1=C 80bpm
[1add9]1+[4M7]1+[5sus]1+[1]1+