跳至內容

LNNBot/指令/musicjs*

出自希顶维基
於 2025年11月30日 (日) 23:02 由 DGCK81LNN留言 | 貢獻 所做的修訂 轶闻
musicjs*
屬性 別名指令
父級指令 musicjs

musicjs*musicjs 的衍生指令,提供了一個 aj() 函數用於以簡譜編寫旋律。

用法

musicjs* <code...>

musicjs 提供的函數和變量之外,musicjs* 提供了一個 aj() 函數,接受一個字符串作為樂譜,解析後使用 musicjs 提供的函數和變量進行演奏。

musicjs* 還會定義一個 dd 變量,控制音符 6 與基準音(由 baseFrequency 定義,默認為 440 Hz)相差的半音數,初始為 0(即 1=C4),使用 >< 會增減其值。例如使用 5 個 > 可使 1=F4。

aj() 每次被調用時,會將 gain 設為 0.5,並將內部的「時值乘數」變量初始化為 1,它與 bpm 及圓括號的層數共同定義一「拍」的時長。

aj() 樂譜語法
字符 名稱 作用
17 音符 以當前的一拍為時值創建對應的簡譜音符。
0 休止符 休止一拍。
, 低音點 將前一個音符降低一個八度。
' 高音點 將前一個音符升高一個八度。
. 附點 將前一個音符的時值延長半拍。
連用多個時,每個後續附點延長的時值是前一個附點的一半。
- 延音線 將前一個音符的時值延長一拍。可以跨過小節線甚至減時線的起止。
| 小節線 無作用,僅輔助閱讀。
( ) 減時線 括號內一拍的時長減半,可以嵌套。
b 降號 使下一個音符降低一個半音。不會影響後續的音符。
# 升號 使下一個音符升高一個半音。不會影響後續的音符。
[ / ] 分聲部 方括號內由斜槓分隔的各部分將同時開始演奏。
順序最後的一個部分演奏結束時,無論其他各部分是否演奏完畢,都會繼續演奏方括號之後的樂譜。
> 升調 升調一個半音。
< 降調 降調一個半音。
f 力度:強 gain 設為 0.75,若已經是 0.75 則設為 1。
m 力度:中 gain 設為 0.5。
p 力度:弱 gain 設為 0.33,若已經是 0.33 則設為 0.18。
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,,
]`)

軼聞

  • 除了 bpmf 直接取自共識的樂譜記號外,樂譜語法中的幾個字母指令字符 tdrs 分別取自 triplet / tuplet、irregular division、ratio、sustain。函數名 aj 是「ASCII 譜」的縮寫。