LNNBot/指令/musicjs*
外觀
musicjs*
| ||
| 屬性 | 別名指令 | |
| 父級指令 | musicjs
| |
musicjs* 是 musicjs 的衍生指令,提供了輔助函數用於更便捷地編寫旋律。
用法
musicjs* <code...>
除 musicjs 提供的函數和變量之外,musicjs* 還提供一些由用戶定義的函數用來用更簡潔的語法編寫旋律。
用戶可以使用 eval 指令向 musicjs* 添加輔助函數,只需在對象 storage.musicjsX 上創建屬性,名稱建議與輔助函數名稱相同,值為函數聲明的 JavaScript 源代碼。
aj()
輔助函數作者:DGCK81LNN
aj()(「ASCII 簡譜」)函數接受一個樂譜字符串,可以通過一種受簡譜啟發的語法編寫樂曲。
此輔助函數還定義了一個變量 dd,控制音符 6 與基準音(由 baseFrequency 定義,默認為 440 Hz)相差的半音數,初始為 0(即 1=C4),使用 >、< 會增減其值。例如使用 5 個 > 可使 1=F4。
aj() 每次被調用時,會將 gain 設為 0.5,並將內部的「時值乘數」變量初始化為 1,它與 bpm 及圓括號的層數共同定義一「拍」的時長。
| 字符 | 名稱 | 作用 |
|---|---|---|
1–7
|
音符 | 以當前的一拍為時值創建對應的簡譜音符。 |
0
|
休止符 | 休止一拍。 |
,
|
低音點 | 將前一個音符降低一個八度。 |
'
|
高音點 | 將前一個音符升高一個八度。 |
.
|
附點 | 將前一個音符的時值延長半拍。 連用多個時,每個後續附點延長的時值是前一個附點的一半。 |
-
|
延音線 | 將前一個音符的時值延長一拍。可以跨過小節線甚至減時線的起止。 |
|
|
小節線 | 無作用,僅輔助閱讀。 |
( )
|
減時線 | 括號內一拍的時長減半,可以嵌套。 |
b
|
降號 | 使下一個音符降低一個半音。不會影響後續的音符。 |
#
|
升號 | 使下一個音符升高一個半音。不會影響後續的音符。 |
[ / ]
|
分聲部 | 方括號內由斜槓分隔的各部分將同時開始演奏。 順序最後的一個部分演奏結束時,無論其他各部分是否演奏完畢,都會繼續演奏方括號之後的樂譜。 |
>
|
升調 | 升調一個半音。 |
<
|
降調 | 降調一個半音。 |
p
|
力度:弱 | 將 gain 設為 0.33,若已經是 0.33 則設為 0.18。
|
m
|
力度:中 | 將 gain 設為 0.5。
|
f
|
力度:強 | 將 gain 設為 0.75,若已經是 0.75 則設為 1。
|
t
|
開始三連音或結束連音(triplet/tuplet) | 如果當前時值乘數為 1,則將其設為 2 / 3;否則設為 1。 |
dN[1]
|
開始 N 連音(irregular division) | 若 N 是 2 的正整數次冪,則將時值乘數設為 0.75;否則設為 。N 為 1 時實際效果為結束連音。 |
rM:N[1]
|
開始 M:N 連音(ratio) | 將時值乘數設為 N / M。 |
s
|
延長(sustain) | 將前一個音符實際播放的時間延長一拍,不影響下一個音符開始的時間。 可連用,可套在減時線內使用來延長更短的時長。 |
//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 數字,使用一種相比於 aj() 更加緊湊的語法。樂譜語法見此頁面:ip7 music
tr3()
輔助函數作者:cycwin
tr3() 函數接受一個樂譜字符串和分隔符(可省略,默認為;),使用一種相對鬆散的語法,在音符間可以省略空格。樂譜語法如下:
| 字符 | 作用 | |
|---|---|---|
1–7
|
音符do–ti。 | |
#
|
後綴,將最前面第一個音符升高半度。最多連用兩個。 | |
b
|
後綴,將最前面第一個音符降低半度。最多連用兩個。不得與#重複。
| |
.
|
後綴,將最前面第一個音符延長一拍。可復用。 | |
/
|
後綴,將最前面第一個音符時值除以2。可復用。 | |
n
|
休止符,被視作一個正常音符處理。 | |
b...
|
調整bpm到... | |
m...
|
將後面的音符整體增加...個音(12平均律)。...可以為負數。 | |
r...
|
將時間往回調...拍,可利用此做和弦之類。
|