LNNBot/指令/musicjs*
外觀
musicjs*
| ||
| 別名 | musicjsx
| |
| 屬性 | 別名指令 | |
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[1]
|
開始三連音或結束連音 | 如果當前時值乘數為 1,則將其設為 2 / 3;否則設為 1。 |
dN[2][3]
|
開始 N 連音 | 若 N 是 2 的正整數次冪,則將時值乘數設為 0.75;否則設為 。[4]N 為 1 時實際效果為結束連音。 |
rM:N[5][3]
|
開始 M:N 連音 | 將時值乘數設為 N / M。[4] |
s[6]
|
延長 | 將前一個音符實際播放的時間延長一拍,不影響下一個音符開始的時間。 可連用,可套在減時線內使用來延長更短的時長。 |
S[7]
|
斷奏 | 將前一個音符實際播放的時間減半,不影響下一個音符開始的時間。 |
X
|
打擊樂音符(高) | 以當前的一拍為時值創建採樣率為 8000Hz 的噪波音符,, ' 可以減半或倍增其採樣率。
|
x
|
打擊樂音符(低) | 以當前的一拍為時值創建採樣率為 (4000 √2) Hz 的噪波音符,, ' 可以減半或倍增其採樣率。
|
//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() 更加緊湊的語法。樂譜語法如下:
| 字符 | 作用 |
|---|---|
1 2 3 4 5 6 7
|
代表低音區七個音符,從 C3 到 B3。 |
d r m f s l t
|
代表中音區七個音符,從 C4 到 B4。 |
D R M F S L T
|
代表高音區七個音符,從 C5 到 B5。 |
8 9 x y X Y
|
打擊樂:採樣率分別為 2048√2、4096、4096√2、……、16384 Hz 的噪波音符。 |
#
|
將接下來的音符升高半音。 |
b
|
將接下來的音符降低半音。 |
'
|
將接下來的音符升高三個八度。 |
,
|
將接下來的音符降低三個八度。 |
-
|
延長前一個音符的時值。 |
~
|
時值計數器增加 1。 |
!
|
時值計數器除以 2。 |
(
|
整體速度乘以 2。 |
)
|
整體速度乘以 0.5。 |
... + /
|
開始連音組(三連音無需加點,x 連音加點數為 x-3)。 |
... + ;
|
結束連音組(三連音無需加點,x 連音加點數為 x-3)。 |
<
|
將後續音符移低 12 個半音(一個八度)。 |
>
|
將後續音符移高 12 個半音(一個八度)。 |
+
|
將後續音符移高 1 個半音。 |
=
|
將後續音符移低 1 個半音。 |
p
|
音量降低至原來的 1/1.5。 |
P
|
音量增強至原來的 1.5 倍。 |
[ ... | ... ]
|
並行播放多個音符或和弦。 |
{ ... : ... : ... }
|
重複段落。用冒號分隔不同段落,每輪重複依次播放對應段落。 |
_
|
休止符,暫停一個音符的時值。 |
| *時值計數器決定下一個音符的長度,默認為 1。音符播放後重置。 | |
ip7("=>[3d7d--3-3d7d--4-2767--2-2544--3-3d7d--3-36dm--rr---7--(dr)m-#5-76---3d7d--3--355--(64--22)767--2-(22)544-(45-3--33)d7d--3-36dm--!rr--!_dd---7-rd!~d!~7__(33)d7d--33-355--642767--22-544-4533d7d--d3-/36d;m--rr--dd--d7-7d76---67dd---r-765-3(56----)67d---7-d-f------(mr)m---_7drmdm!d!~mdrms--ff---rd7!6!~557rf-m!r!~m367d7d7-67dm--r(r----rmr)(d----drd)7-7d76------__<6-[#5|3]>(33)d7d--3--355--64(22)767--222544-4533d7d--d336dm--rr--dd--d7-7!d!~76---67d[d---|6---][r-|7-]765-3(56)6-67d---7-d-f------(mr)m----<<|p___6mltD---26rmf---5rslt---15d-37m-,L36dmlm-26rflRlf37m#st---6mltD---6mlmD---26rflR--5rslt---15d-37m-6mltD---26rmf---dfDf7rf-37rm#s---,L36dmlm-26rfl---,S25rs---15dm37m-,L36dm-l-26rmf-r-4dld37#s-,L367d---4dfl5rt-37s-6mD-4dfl,T7df37rmlmR_7(#sm7#5m,T),M---,L-{[m-|d-|6-]:::}2-{[f-|r-|d-|6-]:::},S-{[t-|s-|f-]:::}1-[m-|d-|5-]3-[t-|#s-|m-],L-{[m-|d-|6-]:::}2-{[f-|r-|6-]:::}4df-37m-,L37dm7dm37m7t---,L367dmd-26rflfr-,S5rsr7r-15dm37#s-,L36dmlm-26rflfr-4dfd37#s-,L367d---4dld5rsr37s-,L3d-4dfd,T7df37rmlmr-7(#sm7#5m,T),M---]", 184)
|
Tr3()
輔助函數作者:cycwin
Tr3() 函數接受一個樂譜字符串和分隔符(可省略,默認為;),使用一種相對鬆散的語法,音符可以連寫。樂譜語法如下:
| 字符 | 作用 |
|---|---|
1–7
|
音符do–ti。 |
#
|
後綴,將前面的音符升高半音。最多連用兩個。 |
b
|
後綴,將前面的音符降低半音。最多連用兩個,不得與#同時使用。
|
.
|
後綴,將前面的音符升高八度。可連用。 |
_
|
後綴,將前面的音符降低八度。可連用,不得與.同時使用。
|
*
|
後綴,將前面的音符時值增加一拍。可連用。 |
/
|
後綴,將前面的音符時值減半。可連用。 |
$
|
後綴,當某音符存在n個$後綴時,最終計算出的時值乘以n。 |
%
|
後綴,當某音符存在n個%後綴時,最終計算出的時值除以n。可以結合$實現三連音。
|
n
|
休止符,被視作一個正常音符處理。 |
b...
|
調整bpm到... |
m...
|
將後面的音符整體增加...個半音(12平均律)。...可以為負數。 |
r...
|
將時間往回調...拍,可利用此做和弦之類。 |
j...
|
若...為非負數,跳到...-1個音符的位置繼續,若...為負數,則往前跳...個音符再繼續,並且j...為一次性的。如:12345;j-2等效於1234545,12345;j1等效於123452345。
|
z Z
|
分別為-8000Hz與-5657.7Hz的噪波音符,可視為鼓點使用。 |
//musicjs*
Tr3("b183 n 1.# r1 6b r1 4 6.b r1 2b r1 6b 1.# r1 6b r1 4 1. r1 5b r1 1. r1 5b r1 1 6b r1 5b r1 2b 4/3/4/4#/4 r1 2b r1 6_b n/ 3b/ 4 r1 2b 3b/4/ 3b r1 1 r1 6_ 3b r1 1 r1 6_ 4 r1 1 r1 6_ 6b/ r0.5 4/ r0.5 3b/ 6/ 7b r1 4 r1 2b 6.b r1 2b r1 6b 1.# r1 6b r1 4 1./ r0.5 4/ r0.5 2b/ 7b/ 6b r1 2b r1 7_b 4/3/4/ r0.5 2b/ 3/ 4 n 4/ r0.5 1/ 3b/4/3b/4/ r0.5 1#/ 3b/4/ r0.5 1/ r0.5 6_/3b/4/3b/4 r1 3b r1 1 2b../ r0.5 2b./ 1../ r0.5 1./ 7.b r1 4. r1 2.b r1 7b 2..b r1 2b. 6..b r1 2b. r1 6.b 2b.. r1 2.b 1.. r1 6b. r1 4. r1 1. 6b. r1 6b 4./ r0.5 4/ 3./ r0.5 3/ 4./ r0.5 4/ 3./ r0.5 3/ 4.**/ r1.5 2.b**/ r1.5 7b**/ r1.5 4**/ 3.b/ 4. r1 2.b r1 7b r1 4# 3.b/ 4./ 3.b r1 1. r1 6b r1 4 3.b 4. r1 1. r1 6 r1 4 6.b/ r0.5 6b/ 6./ r0.5 6/ 7.b r1 4. r1 2.b r1 7b 6..b r1 6.b 2..b r1 6.b r1 4. r1 2.b 1../ r0.5 1./ 7.b/ r0.5 7b/ 6.b r1 4. r1 2.b r1 6b 4./ r0.5 4/ 3./ r0.5 3/ 4./ r0.5 4/ 3./ r0.5 3/ 4./ r0.5 4/ n/ n 4./ r0.5 2.b/ r0.5 7b/ 3.b/ 4./ r0.5 2.b/ r0.5 7b/ 3.b/ 4./ r0.5 2.b/ r0.5 7b/ 3.b/ 4./ r0.5 2.b/ r0.5 7b/ 3.b/ 4./ 3.b/ 4./ r0.5 1./ r0.5 6/ 3.b/ 2.b/ 1./ 7b"," ") //right hand
time=0
Tr3("b183 7b__ r1 4__ r1 7b___ 7b__**/ r1.5 4_**/ r1.5 6_b**/ 7b__/ 7b___/ 4__/ 4#__**/ 4#__ 4_/ r0.5 2_b/ 7_b r1 5_b 2b__ r1 2b___ 6b__/ 2b_/ 4_/ 6__b**/ r1 4_ r1 2_b 4__**/ r1.5 4___**/ 4__ 1_/ 4__ 7b__ r1 4__ r1 7b___ 6_b**/ r1.5 4_**/ r1.5 7__b**/ 7__b/ 7___b/ 4__/ 4#__**/ r1.5 4#___**/ 7_b r1 4_# 4_/ r0.5 2_b/ 7__b/ 4__#/ 2__b r1 2___b 6__b**/ r1.5 2_b**/ r1.5 4_**/ 6__b/ 4_ r1 2_b 4__ r1 4___ 4__/ 1_/ 4_/ 1_**/ r1 4_ r1 6_ 7__b r1 7___b 7___b/ 7__b/ 5___b/ 5__b/ r0.5 2___b/ 5___b/ 5__b/ r0.5 2___b/ 2___b/ 2__b/ r0.5 6___b/ 2___b/ 2__b/ r0.5 6___b/ 4___/ 4__/ r0.5 1__/ 4___/ 4__/ r0.5 1__/ 7b___/ 7b__/ r0.5 4__/ 7b___/ 7b__/ r0.5 4__/ 5___b/ 5__b/ r0.5 2__b/ 5___b/ 5__b/ r0.5 2__b/ 2___b/ 2__b/ r0.5 6___b/ 2___b/ 2__b/ r0.5 6___b/ 4___/ 4__/ r0.5 1__/ 4___/ 4__/ r0.5 1__/ 7___b/ 7__b/ r0.5 4__/ 7___b/ 7__b/ r0.5 4__/ 5___b/ 2b__/ r0.5 5b__/ 5___/ 2b__/ r0.5 5b__/ 2___b/ 2__b/ r0.5 6___b/ 2___b/ 2__b/ r0.5 6___b/ 4___/ 4__/ r0.5 1__/ 4___/ 4__/ r0.5 1__/ 7b___/ 7b__/ r0.5 4__/ 7b___/ 7b__/ r0.5 4__/ 5___b/ 5__b/ r0.5 2__b/ 5___b/ 5__b/ r0.5 2__b/ 2___b/ 2__b/ r0.5 6___b/ 2___b/ 2__b/ r0.5 6___b/ 4___/ 4__/ r0.5 1__/ 4___/ 4__/ r0.5 1__/ 7__b r1 4__ r1 7___b"," ") //left hand
|
infxdi8music()
infxdi8music() 函數接受一個希呂表聲法字符串並解析、播放。目前實現並不完整。