这篇文章提出了一个支持 muse 乐谱语法的数据结构,是基于abc 乐谱数据结构的基础上进行部分优化,并支持了 tab 谱[六线谱、四线谱]、简谱。
描述信息
主标题:
1 | 语法:T: 单身情歌 (第一个) |
副标题:1
2语法:T: 演唱 林志炫(第n个,n 大于等于2)
字段:metaText.subtitle
作者:1
2语法:C: 陈耀川
字段:metaText.composer
当有多个 C 出现的时候,在composer
用换行符分隔。
调号、拍号和速度
调号:1
2
3
4
5
6
7
8语法:K: C
字段:key
{
acc:'', //升降调 (#/b)
accidentals:[],// 忽略
mode:'', // 忽略
root:'C' //调名
}
拍号:1
2
3
4
5
6
7
8语法:M: 3/8
字段:meter
{
type: 'specified', //可忽略
value: [
{num:'3',den:'8'}
]
}
速度:1
2
3
4
5
6
7语法:Q: 1/4=120 "Slowly"
字段:metaText.tempo
{
bpm: 120,
duration:[0.25],
postString: 'Slowly'
}
上面表示 一分钟 120 个 1/4 拍。
音符、和弦
1 | 字段:staffs[i].voices[i]: |
- tie 表示的是同相同的延音
- slur 则是两个不同音高的连音
- triplet 表示3连音,n连音等,在音长上面比较特殊
音高
四/六线谱
1 | { |
- a: 是谱线最上面的一根,以此类推。
- 如果是扫弦或者琶音的话,那只要关注最上面和最下面的弦就可以了。
简谱
在 muse 中,中央 C
代表 1
, 小 c
代表高八度的 1
,C'
则表示小八度的 1
,C''
则必C'
更小,c'
则是比 c
高八度。
如下按音从低到高,其顺序和五线谱的表示法是一致的:
1 | C'', C', C, c, c', c'' |
对应在pitch
字段中的值是:
1 | {A: 5, B: 6, C: 0, D: 1, E: 2, F: 3, G: 4, a: 12, b: 13, c: 7, d: 8, e: 9, f: 10, g: 11} |
变音记号
例子:
1 | ^b1 |
语法记号 | 字段名 | 含义 |
---|---|---|
^ |
sharp | 表示升半音 |
= |
natural | 表示还原音 |
_ |
flat | 降半音 |
^^ |
double sharp | 升全音(暂不考虑) |
音长
默认音长:L: 1/4
语法:
/
、/2
默认音长一半0.5//
默认音长 1/4(0.25)2
默认音长 2 倍>
前付点 3/2 倍,后减音长 1/2<
后付点,前减音长
1 | 弹唱谱例子:c1/, c1/2, cx//, a2*2 |
弹唱谱需要表示把位,所以需要用/
表示倍减,*
表示倍增。
1 | 音长计算的值 = 默认音长 * 音长的倍数, |
和弦图
所有和弦包括默认的和弦在和弦表字段gchords
当中,如果不存在在和弦表中,则绘制和弦名称即可。
语法:
1 | 语法:<和弦名称>=<起始品数>;<第n弦品位>(手指),<第n-1弦品位>(手指),...<第1弦品位>(手指) |
其中手指是可选的。X
代表和弦外音。
数据结构:
1 | { |
其中 bars
是扩展字段,没有声明不需要绘制;position 没有声明也不需要绘制,
装饰音
用法:在音符前添加。
1 | 例子:u[b1*2-e3/] |
下面是可能出现的装饰音:
语法符号 | 对应字段 | 意思 |
---|---|---|
. | staccato | 断音、切音 |
V | upstrum | 上扫弦 |
U | downstrum | 下扫弦 |
A | uparpeggio | 上琶音 |
B | downarpeggio | 下琶音 |
‘ | accent | 加重 |
T | trill | 颤音 |
H | fermata | 延长音 |
P | pralltriller | 延长 |
倚音:
用法:在音符前添加。1
例子:{a1b1}[c2//d2//]
数据结构:和音符是一样的
1 | { |
二连音、三连音和n连音
语法:1
2
3
4(n
简单连音例子:(2aC1
(p:q:r
复杂连音例子:(3:2:4G2A2B1
对应数据:1
2
3startTriplet: 开始标识位
endTriplet: 结束标识位
tripletMultiplier: 每个音音长 绘制不需要关心这个?
休止符
表示符号:z
和 Z
,音长方面表示和音符是一样的。
- z : rest 休止符
- Z : multimeasure 多小节休止符,暂时不用考虑
连音线(滑弦、敲弦、勾弦)
语法:
tie :
1 | ex-ex 、[^b1*2-e3/]-S-[b2*5/2e4*5/2] |
slur: 可以嵌套
1 | ((a3b2d2)b1) |
小节线和重复线
数据结构:
1 | { |
歌词
英文歌词以空格断字,中文单字断字。
语法 | 数据表示 | 含义 |
---|---|---|
- | 英文单词断开 | |
* | 跳过一个音符 | |
~ | 链接连个字,对齐同个音符 |
参考资料
abcjs: javascript for rendering abc music notation.
muse 2.7 制谱软件帮助文档。