LNNBot/指令/musicjs
外观
musicjs
| ||
| 属性 | 严格选项解析 | |
| 所属插件 | @dgck81lnn/music | |
| 父级指令 | util.script
| |
musicjs 允许用户通过一套 JavaScript API 来合成旋律。
用法
musicjs <code:rawtext>
code 为 JavaScript 代码,提供以下函数和变量:
note(tone: number, beats: number, temperament = 12)创建平均律音符- 相当于
noteHz(baseFrequency * (2 ** (tone / temperament)), beats)。
tone音符相对于基准音的偏移(默认情况下,单位为半音)beats音符时长(拍)temperament平均律的音阶数;决定了多少tone为一个八度
- 相当于
noteJust(ratio: number, beats: number)创建纯律音符- 相当于
noteHz(baseFrequency * ratio, beats)。
ratio音符音高与基准音频率的比值beats音符时长(拍)
- 相当于
noteHz(frequency: number, beats: number)创建指定频率音高的音符frequency频率(赫兹);为负数时播放噪波,绝对值为采样率beats音符时长(拍)
rest(beats: number)休止beats休止时长(拍)
bpm: Number = 120每分钟拍数- 为了兼容一些旧的代码,该变量的初始值是一个可以被隐式转换成数字的函数,可以通过调用修改速度;对其进行有效的赋值后,会变成普通数字。
baseFrequency = 440基准音频率gain = 0.5音量time = 0当前时间(秒)
每次创建音符时其开始时间由 time 变量决定,创建音符或休止都会使其值增加。可通过手动减少此值(或用 rest() 休止负的时间)后再创建音符来使其与已创建的音符同时播放。例如,演奏《D大调卡农》靠近开头的两小节:
bpm = 60
note(9, 1); note(7, 1); note(5, 1); note(4, 1) // #F5 E5 D5 #C5
note(2, 1); note(0, 1); note(2, 1); note(4, 1) // B4 A4 B4 #C5
// 由于速度为每分钟 60 拍,演奏了 8 个一拍长的音符,此时 time 为 8.0
// 我们回到最开头,再创建大提琴的音符
time = 0 // 也可以用 rest(-8),后退 8 拍
note(-19, 1); note(-24, 1); note(-22, 1); note(-27, 1) // D3 A2 B2 #F2
note(-26, 1); note(-31, 1); note(-26, 1); note(-24, 1) // G2 D2 G2 A2
参见
musicjs*:在本指令的基础上提供了aj()等辅助函数,方便编写旋律