跳转到内容

LNNBot/指令/musicjs*:修订间差异

此后如竟没有炬火,我便是唯一的光。
DGCK81LNN留言 | 贡献
DGCK81LNN留言 | 贡献
无编辑摘要
第6行: 第6行:
|所需权限=
|所需权限=
}}
}}
'''<code>musicjs*</code>''' 是 <code>[[LNNBot/指令/musicjs|musicjs]]</code> 的衍生指令,提供了一个 <code>aj()</code> 函数用于以简谱编写旋律。
'''<code>musicjs*</code>''' 是 {{LNNBot指令链接|musicjs}} 的衍生指令,提供了辅助函数用于更便捷地编写旋律。


== 用法 ==
== 用法 ==
第12行: 第12行:
<pre>musicjs* <code...></pre>
<pre>musicjs* <code...></pre>


除 <code>musicjs</code> 提供的函数和变量之外,<code>musicjs*</code> 提供个 <code>aj()</code> 函数,接受一个字符串作为乐谱,解析后使<code>musicjs</code> 提供函数和变量进行演奏
除 <code>musicjs</code> 提供的函数和变量之外,<code>musicjs*</code> 提供一些由用户定义的函数用来用更简洁语法编写旋律


<code>musicjs*</code> 还会定义一个 <code>dd</code> 变量,控制音符 <code>6</code> 与基准音(由 <code>baseFrequency</code> 定义,默认为 440 Hz)相差的半音数,初始为 0(即 1=C4),使用 <code>></code>、<code><</code> 会增减其值。例如使用 5 个 <code>></code> 可使 1=F4。
用户可以使用 <code>[[LNNBot/指令/evaluate|eval]]</code> 指令向 <code>musicjs*</code> 添加辅助函数,只需在对象 <syntaxhighlight inline lang="javascript">storage.musicjsX</syntaxhighlight> 上创建属性,名称建议与辅助函数名称相同,值为函数定义的 JavaScript 源代码。
 
=== <code>aj()</code> ===
 
辅助函数作者:{{LNN}}
 
<code>aj()</code> 函数接受一个字符串作为乐谱,解析后使用 <code>musicjs</code> 提供的函数和变量进行演奏。
 
此辅助函数还定义了一个变量 <code>dd</code>,控制音符 <code>6</code> 与基准音(由 <code>baseFrequency</code> 定义,默认为 440 Hz)相差的半音数,初始为 0(即 1=C4),使用 <code>></code>、<code><</code> 会增减其值。例如使用 5 个 <code>></code> 可使 1=F4。


<code>aj()</code> 每次被调用时,会将 <code>gain</code> 设为 0.5,并将内部的“时值乘数”变量初始化为 1,它与 <code>bpm</code> 及圆括号的层数共同定义一“拍”的时长。
<code>aj()</code> 每次被调用时,会将 <code>gain</code> 设为 0.5,并将内部的“时值乘数”变量初始化为 1,它与 <code>bpm</code> 及圆括号的层数共同定义一“拍”的时长。
第84行: 第92行:
<references/>
<references/>


== 示例 ==
{{collapse|示例《Somebody That I Used To Know》副歌|
 
《Somebody That I Used To Know》副歌
 
<syntaxhighlight lang="javascript">//musicjs*
<syntaxhighlight lang="javascript">//musicjs*
bpm=129
bpm=129
第144行: 第149行:
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)|6,,
6,,.(6,,)5,,.(5,,)|4,,.(4,,)5,,.(5,,)|6,,
]`)
]`)
</syntaxhighlight>
</syntaxhighlight>}}
 
=== <code>ip7()</code> ===
 
辅助函数作者:{{U|6xL-Bro islptng}}
 
<code>ip7()</code> 函数接受一个乐谱字符串和一个 BPM 数字。乐谱语法见此页面:[https://test.vudrux.site/islp/music.html ip7 music]
 
=== <code>tr3()</code> ===
 
辅助函数作者:{{U|cycwin}}
 
待补充


== 轶闻 ==
== 轶闻 ==


* 除了 <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>aj</code> 是“'''A'''SCII '''简'''谱”的缩写。
* 除了 <code>b</code>、<code>p</code>、<code>m</code>、<code>f</code> 直接取自共识的乐谱记号外,<code>aj()</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>aj</code> 是“'''A'''SCII '''简'''谱”的缩写。

2025年12月28日 (日) 18:15的版本

musicjs*
属性 别名指令
父级指令 musicjs

musicjs*musicjs 的衍生指令,提供了辅助函数用于更便捷地编写旋律。

用法

musicjs* <code...>

musicjs 提供的函数和变量之外,musicjs* 还提供一些由用户定义的函数用来用更简洁的语法编写旋律。

用户可以使用 eval 指令向 musicjs* 添加辅助函数,只需在对象 storage.musicjsX 上创建属性,名称建议与辅助函数名称相同,值为函数定义的 JavaScript 源代码。

aj()

辅助函数作者:DGCK81LNN

aj() 函数接受一个字符串作为乐谱,解析后使用 musicjs 提供的函数和变量进行演奏。

此辅助函数还定义了一个变量 dd,控制音符 6 与基准音(由 baseFrequency 定义,默认为 440 Hz)相差的半音数,初始为 0(即 1=C4),使用 >< 会增减其值。例如使用 5 个 > 可使 1=F4。

aj() 每次被调用时,会将 gain 设为 0.5,并将内部的“时值乘数”变量初始化为 1,它与 bpm 及圆括号的层数共同定义一“拍”的时长。

aj() 乐谱语法
字符 名称 作用
17 音符 以当前的一拍为时值创建对应的简谱音符。
0 休止符 休止一拍。
, 低音点 将前一个音符降低一个八度。
' 高音点 将前一个音符升高一个八度。
. 附点 将前一个音符的时值延长半拍。
连用多个时,每个后续附点延长的时值是前一个附点的一半。
- 延音线 将前一个音符的时值延长一拍。可以跨过小节线甚至减时线的起止。
| 小节线 无作用,仅辅助阅读。
( ) 减时线 括号内一拍的时长减半,可以嵌套。
b 降号 使下一个音符降低一个半音。不会影响后续的音符。
# 升号 使下一个音符升高一个半音。不会影响后续的音符。
[ / ] 分声部 方括号内由斜杠分隔的各部分将同时开始演奏。
顺序最后的一个部分演奏结束时,无论其他各部分是否演奏完毕,都会继续演奏方括号之后的乐谱。
> 升调 升调一个半音。
< 降调 降调一个半音。
p 力度:弱 gain 设为 0.33,若已经是 0.33 则设为 0.18。
m 力度:中 gain 设为 0.5。
f 力度:强 gain 设为 0.75,若已经是 0.75 则设为 1。
t 开始三连音或结束连音 如果当前时值乘数为 1,则将其设为 2 / 3;否则设为 1。
dN[1] 开始 N 连音 N 是 2 的正整数次幂,则将时值乘数设为 0.75;否则设为 N 为 1 时实际效果为结束连音。
rM:N[1] 开始 M:N 连音 将时值乘数设为 N / M
s 延长 将前一个音符实际播放的时间延长一拍,不影响下一个音符开始的时间。
可连用,可套在减时线内使用来延长更短的时长。
  1. 1.0 1.1 MN 可以是正整数或小数;在这些指令之后不可直接跟音符或休止符,需要加空格分隔开。
示例:《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,,
]`)

ip7()

辅助函数作者:6xL-Bro islptng

ip7() 函数接受一个乐谱字符串和一个 BPM 数字。乐谱语法见此页面:ip7 music

tr3()

辅助函数作者:cycwin

待补充

轶闻

  • 除了 bpmf 直接取自共识的乐谱记号外,aj() 乐谱语法中的几个字母指令字符 tdrs 分别取自 triplet / tuplet、irregular division、ratio、sustain。函数名 aj 是“ASCII 谱”的缩写。