[关闭]
@Darcy 2018-06-05T14:26:41.000000Z 字数 3063 阅读 1328

Muse 数据结构详细说明


描述信息

主标题:

  1. 语法:T: 单身情歌 (第一个)
  2. 字段:metaText.title

副标题:

  1. 语法:T: 演唱 林志炫(第n个,n 大于等于2
  2. 字段:metaText.subtitle

作者:

  1. 语法:C: 陈耀川
  2. 字段:metaText.composer

当有多个 C 出现的时候,在composer用换行符分隔。

谱类型

字段:

  1. staff[n].voices[0] = {head: "jianpu", el_type: "style"}

调号、拍号和速度

调号:

  1. 语法:K: C
  2. 字段:key
  3. {
  4. acc:'', //升降调 (#/b)
  5. accidentals:[],// 忽略
  6. mode:'', // 忽略
  7. root:'C' //调名
  8. }

拍号:

  1. 语法:M: 3/8
  2. 字段:meter
  3. {
  4. type: 'specified', //可忽略
  5. value: [
  6. {num:'3',den:'8'}
  7. ]
  8. }

速度:

  1. 语法:Q: 1/4=120 "Slowly"
  2. 字段:metaText.tempo
  3. {
  4. bpm: 120,
  5. duration:[0.25],
  6. postString: 'Slowly'
  7. }

上面表示 一分钟 120 个 1/4 拍。

音符、和弦

  1. 字段:staffs[i].voices[i]:
  2. {
  3. chord: [{
  4. name: "C/E", //和弦名称,查询和弦表
  5. position: ''// 忽略
  6. }],
  7. duration: 0.0625, //音长
  8. el_type: 'note',
  9. pitches: [{
  10. fret:1, //品数,或者'x'
  11. string: 5, //第几弦:{a:1, b:2, c:3, d:4, e:5, f:6}
  12. pitch: 2 //简谱用到
  13. accidental: 'sharp' //升半音:sharp, 降半音:flat
  14. }], //多个的时候表示和声,需要在同一线上绘制,可能是扫弦。
  15. decoration: ['staccato','downstrum']//装饰音
  16. gracenotes: {},//倚音
  17. rest: {//休止符
  18. type: rest/multimeasure
  19. },
  20. startTie: {//延长音开始
  21. //{'S':'shift slide', 'H':'hammer on', 'P':'pull off'}
  22. effect: "shift slide" //滑音等一下效果音会有这个字段,
  23. }
  24. endTie: //延长音结束
  25. startSlur: //连音开始
  26. endSlur: //连音结束
  27. startTriplet: 3 // n连音开始标识位,表示 3 连音
  28. endTriplet: // n连音结束标识位
  29. tripletMultiplier: //连音音长
  30. lyric:[{ //歌词, 可能有多行歌词
  31. divider:'',
  32. syllable:'',
  33. }],
  34. end_beam:true //符干分组
  35. }

音高

四/六线谱

  1. {
  2. fret:1, //品数,或者'x'
  3. string: 5, //第几弦:{a:1, b:2, c:3, d:4, e:5, f:6}
  4. }

简谱

在 muse 中,中央 C 代表 1, 小 c 代表高八度的 1C' 则表示小八度的 1C'' 则必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}
  2. C' = C(0) - 7 = -7
  3. c' = c(7) + 7 = 14
  4. 依此类推...

变音记号

例子:

  1. ^b1
语法记号 字段名 含义
^ sharp 表示升半音
= natural 表示还原音
_ flat 降半音
^^ double sharp 升全音(暂不考虑)

音长

默认音长:L: 1/4

语法:

  1. 弹唱谱例子:c1/, c1/2, cx//, a2*2
  2. 简谱例子:A/, C// ,c1

弹唱谱需要表示把位,所以需要用/表示倍减,*表示倍增。

  1. 音长计算的值 = 默认音长 * 音长的倍数,

和弦图

所有和弦包括默认的和弦在和弦表字段gchords当中,如果不存在在和弦表中,则绘制和弦名称即可。

语法:

  1. 语法:<和弦名称>=<起始品数>;<第n弦品位>(手指),<第n-1弦品位>(手指),...<第1弦品位>(手指)
  2. 例子: %%gchord C=1;X,3,2,0,1,0

其中手指是可选的。X代表和弦外音。

数据结构:

  1. {
  2. name: "C", //和弦名
  3. chord: [[1, 0],[2, 1], [3, 0], [4, 2], [5,3], [6, "X"]], //[<第几品>:<手指>],数组的长度是弦的数量,数组下标按弦从上往下(从粗到细), x 代表和弦外音
  4. position: 3 //开始品数
  5. }

position 没有声明不需要绘制。

装饰音

用法:在音符前添加。

  1. 例子:u[b1*2-e3/]

下面是可能出现的装饰音:

语法符号 对应字段 意思
. staccato 断音、切音
V upstrum 上扫弦
U downstrum 下扫弦
A uparpeggio 上琶音
B downarpeggio 下琶音
' accent 加重
T trill 颤音
H fermata 延长音
S segno 反复记号
P pralltriller 延长

倚音:

吉他谱比较少见,可不考虑,简谱有经常看到,需要考虑。

用法:在音符前添加。

  1. 例子:{a1b1}[c2//d2//]

数据结构:和音符是一样的

  1. {
  2. accidental:'sharp',
  3. duration: 0.5,
  4. el_type:'note',
  5. pitch: 12,
  6. fret:1,
  7. string:1
  8. }

二连音、三连音和n连音

语法:

  1. (n
  2. 简单连音例子:(2aC1
  3. (p:q:r
  4. 复杂连音例子:(3:2:4G2A2B1

对应数据:

  1. startTriplet: 开始标识位
  2. endTriplet: 结束标识位
  3. tripletMultiplier: 每个音音长 绘制不需要关心这个?

休止符

表示符号:zZ,音长方面表示和音符是一样的。

连音线(滑弦、敲弦、勾弦)

语法:

tie :

  1. ex-ex 、[^b1*2-e3/]-S-[b2*5/2e4*5/2]

slur: 可以嵌套

  1. ((a3b2d2)b1)

小节线和重复线

数据结构:

  1. {
  2. el_type:'bar',
  3. type: 'bar_thin' //bar类型
  4. startEnding: '' //重复段落数字和开始标志
  5. endEnding: '' //重复结束标志
  6. barNumber: '' //忽略
  7. }
类型 语法 含义
bar_thin | 小节线
bar_left_repeat :| 重复左侧
bar_right_repeat |: 重复右侧
bar_dbl_repeat :: 两边重复
bar_thick_thin [| 左粗右细
bar_thin_thick |[ 左细右粗
bar_thin_thin || 两条细线
bar_invisible [:] 虚小节线

歌词

英文歌词以空格断字,中文单字断字。

语法 数据表示 含义
- 英文单词断开
* 跳过一个音符
~ 链接连个字,对齐同个音符

一些问题

  1. 如何知道是付点音符?

  2. 如何判断一组音符?比如相加为一拍的音符为一组~
    (1)N连音的音符为一组;
    (2)如果音符音长 >= 0.25 的,则自己为一组;
    (3)如果小于 0.25 的,则继续和后面的音符为一组,直到音符音长和大于0.25。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注