跳至內容

LNNBot/指令/musicjs

出自希顶维基
於 2026年2月5日 (四) 21:53 由 DGCK81LNN留言 | 貢獻 所做的修訂
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)
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() 等輔助函數,方便編寫旋律