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()等輔助函數,方便編寫旋律