LNNBot/指令/musicjs*:修订间差异
外观
小无编辑摘要 |
无编辑摘要 |
||
| 第14行: | 第14行: | ||
除 <code>musicjs</code> 提供的函数和变量之外,<code>musicjs*</code> 提供了一个 <code>aj()</code> 函数,接受一个字符串作为乐谱,解析后使用 <code>musicjs</code> 提供的函数和变量进行演奏。 | 除 <code>musicjs</code> 提供的函数和变量之外,<code>musicjs*</code> 提供了一个 <code>aj()</code> 函数,接受一个字符串作为乐谱,解析后使用 <code>musicjs</code> 提供的函数和变量进行演奏。 | ||
<code>musicjs*</code> 还会定义一个 <code>dd</code> 变量 | <code>musicjs*</code> 还会定义一个 <code>dd</code> 变量,控制音符 <code>6</code> 与基准音(由 <code>baseFrequency</code> 定义)相差的半音数,初始为 0(即 1=C4),使用 <code>></code>、<code><</code> 会增减其值。例如使用 5 个 <code>></code> 可使 1=F4。 | ||
<code>aj()</code> 每次被调用时,内部的“时值乘数”变量会被初始化为 1,它与 <code>bpm</code> 及圆括号的层数共同定义一“拍”的时长。 | <code>aj()</code> 每次被调用时,内部的“时值乘数”变量会被初始化为 1,它与 <code>bpm</code> 及圆括号的层数共同定义一“拍”的时长。 | ||
| 第83行: | 第83行: | ||
|} | |} | ||
<references/> | <references/> | ||
== 示例 == | |||
《Somebody That I Used To Know》副歌 | |||
<syntaxhighlight lang="javascript"> | |||
musicjs* bpm=129 | |||
aj('>>>>>') // 1=F | |||
aj(`[f | |||
0(5561'1'6)|4'.(3')3'-| | |||
0(2'3'2'2'2'2'|5'5'5'5'4')3'(2')| | |||
1'-(61'1'6)|4'.(3')3'(66)| | |||
(2'3'3'3'3'.(2')2'6)|655-| | |||
/pp | |||
3''--0|00(5''--2''| | |||
-3''----)0|1''-(5'--2''| | |||
-3''----)0|00(5''--2''| | |||
-3''----02''|-1''-----2''|-) | |||
/m | |||
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)| | |||
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)| | |||
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)| | |||
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)| | |||
]`) | |||
aj(`[f | |||
0(5561'1'6)|4'.(3')3'-| | |||
0(2'3'2'2'2'2'|5'5'5'5'4')3'(2')| | |||
1'-(61'1'6)|3'.(2')2'-| | |||
(2'3'3'3'1'2'2'2')|2'1'1'-| | |||
/pp | |||
(03''----)0|00(5''--2''| | |||
-3''----)0|1''-(5'--2''| | |||
-3''----)0|00(5''--2''| | |||
-3''----02''|-1''-----2''|-) | |||
/m | |||
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)| | |||
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)| | |||
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)| | |||
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)| | |||
]`) | |||
aj(`[f | |||
0000|0000| | |||
(2'3'3'3'1'2'2'2')|2'1'1'-| | |||
0000|0000| | |||
(2'3'3'3'1'2'2'(2'3'))|2'1'1'-| | |||
/p | |||
(50502'02'0|3'4'5'3')2'0| | |||
(1'01'07070|6060)50| | |||
(50502'02'0|3'4'5'3')2'0| | |||
(60)00(70)|(60)00((2'3')0)| | |||
/pp | |||
(03''----)0|00(5''--2''| | |||
-3''----)0|1''-(5'--2''| | |||
-3''----)0|00(5''--2''| | |||
-3''----02''|-1''----)0| | |||
/m | |||
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)| | |||
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)| | |||
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)| | |||
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)|6,, | |||
]`) | |||
</syntaxhighlight> | |||
== 轶闻 == | == 轶闻 == | ||
* 除了 <code>b</code>、<code>p</code>、<code>m</code>、<code>f</code> 直接取自共识的乐谱记号外,乐谱语法中的几个字母指令字符 <code>t</code>、<code>d</code>、<code>r</code>、<code>s</code> 分别取自 '''t'''riplet / '''t'''uplet、irregular '''d'''ivision、'''r'''atio、'''s'''ustain。 | * 除了 <code>b</code>、<code>p</code>、<code>m</code>、<code>f</code> 直接取自共识的乐谱记号外,乐谱语法中的几个字母指令字符 <code>t</code>、<code>d</code>、<code>r</code>、<code>s</code> 分别取自 '''t'''riplet / '''t'''uplet、irregular '''d'''ivision、'''r'''atio、'''s'''ustain。 | ||
2025年9月21日 (日) 16:22的版本
musicjs*
| ||
| 属性 | 别名指令 | |
| 父级指令 | musicjs
| |
musicjs* 是 musicjs 的衍生指令,提供了一个 aj() 函数用于以简谱编写旋律。
用法
musicjs* <code...>
除 musicjs 提供的函数和变量之外,musicjs* 提供了一个 aj() 函数,接受一个字符串作为乐谱,解析后使用 musicjs 提供的函数和变量进行演奏。
musicjs* 还会定义一个 dd 变量,控制音符 6 与基准音(由 baseFrequency 定义)相差的半音数,初始为 0(即 1=C4),使用 >、< 会增减其值。例如使用 5 个 > 可使 1=F4。
aj() 每次被调用时,内部的“时值乘数”变量会被初始化为 1,它与 bpm 及圆括号的层数共同定义一“拍”的时长。
| 字符 | 名称 | 作用 |
|---|---|---|
1–7
|
音符 | 以当前的一拍为时值创建对应的简谱音符。 |
0
|
休止符 | 休止一拍。 |
,
|
低音点 | 将前一个音符降低一个八度。 |
'
|
高音点 | 将前一个音符升高一个八度。 |
.
|
附点 | 将前一个音符的时值延长半拍。 连用多个时,每个后续附点延长的时值是前一个附点的一半。 |
-
|
延音线 | 将前一个音符的时值延长一拍。可以跨过小节线甚至减时线的起止。 |
|
|
小节线 | 无作用,仅辅助阅读。 |
( )
|
减时线 | 括号内一拍的时长减半,可以嵌套。 |
b
|
降号 | 使下一个音符降低一个半音。不会影响后续的音符。 |
#
|
升号 | 使下一个音符升高一个半音。不会影响后续的音符。 |
[ / ]
|
分声部 | 方括号内由斜杠分隔的各部分将同时开始演奏。 顺序最后的一个部分演奏结束时,无论其他各部分是否演奏完毕,都会继续演奏方括号之后的乐谱。 |
>
|
升调 | 升调一个半音。 |
<
|
降调 | 降调一个半音。 |
f
|
力度:强 | 将 gain 设为 0.75,若已经是 0.75 则设为 1。
|
m
|
力度:中 | 将 gain 设为 0.5。
|
p
|
力度:弱 | 将 gain 设为 0.33,若已经是 0.33 则设为 0.18。
|
t
|
开始三连音或结束连音 | 如果当前时值乘数为 1,则将其设为 ;否则设为 1。 |
d[1]
|
开始 连音 | 若 是 2 的整数次幂,则将时值乘数设为 0.75;否则设为 。 |
r:[1]
|
开始 连音 | 将时值乘数设为 。 |
s
|
延长 | 将前一个音符实际播放的时间延长一拍,不影响下一个音符开始的时间。 可连用,可套在减时线内使用来延长更短的时长。 |
示例
《Somebody That I Used To Know》副歌
musicjs* bpm=129
aj('>>>>>') // 1=F
aj(`[f
0(5561'1'6)|4'.(3')3'-|
0(2'3'2'2'2'2'|5'5'5'5'4')3'(2')|
1'-(61'1'6)|4'.(3')3'(66)|
(2'3'3'3'3'.(2')2'6)|655-|
/pp
3''--0|00(5''--2''|
-3''----)0|1''-(5'--2''|
-3''----)0|00(5''--2''|
-3''----02''|-1''-----2''|-)
/m
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)|
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)|
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)|
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)|
]`)
aj(`[f
0(5561'1'6)|4'.(3')3'-|
0(2'3'2'2'2'2'|5'5'5'5'4')3'(2')|
1'-(61'1'6)|3'.(2')2'-|
(2'3'3'3'1'2'2'2')|2'1'1'-|
/pp
(03''----)0|00(5''--2''|
-3''----)0|1''-(5'--2''|
-3''----)0|00(5''--2''|
-3''----02''|-1''-----2''|-)
/m
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)|
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)|
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)|
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)|
]`)
aj(`[f
0000|0000|
(2'3'3'3'1'2'2'2')|2'1'1'-|
0000|0000|
(2'3'3'3'1'2'2'(2'3'))|2'1'1'-|
/p
(50502'02'0|3'4'5'3')2'0|
(1'01'07070|6060)50|
(50502'02'0|3'4'5'3')2'0|
(60)00(70)|(60)00((2'3')0)|
/pp
(03''----)0|00(5''--2''|
-3''----)0|1''-(5'--2''|
-3''----)0|00(5''--2''|
-3''----02''|-1''----)0|
/m
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)|
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)|
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)|
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)|6,,
]`)
轶闻
- 除了
b、p、m、f直接取自共识的乐谱记号外,乐谱语法中的几个字母指令字符t、d、r、s分别取自 triplet / tuplet、irregular division、ratio、sustain。