關(guān)于自制"Mod" Rsmplayer所使用的rsm文本格式的介紹

用語(yǔ)解釋:
文件頭? 設(shè)想中的在音軌定義前進(jìn)行預(yù)定義信息的文本,內(nèi)容包括歌曲信息、作者信息、預(yù)定義音色、音量、音量漸變模式(函數(shù))及參數(shù)、自動(dòng)建造模式參數(shù)及各音軌偏移參數(shù)(不過(guò)全都暫未實(shí)現(xiàn)……);
主音軌? rsm文本中第一次出現(xiàn)的$所標(biāo)記的音軌;
元參數(shù)? 在解析rsm文本時(shí)每遇到各種記號(hào)便對(duì)兩個(gè)預(yù)定義的RsmNote對(duì)象noteA和noteB進(jìn)行修改,新增的音符由noteA復(fù)制并修改而來(lái),它的參數(shù)稱作元參數(shù);
臨時(shí)記號(hào)? 將要修改的元參數(shù)賦給noteB后再修改元參數(shù),其后添加音符之后再?gòu)膎oteB還原該參數(shù);
參數(shù)n? 帶有參數(shù)的標(biāo)記用n代表參數(shù),使用時(shí)n可取值0~61,用0~9,a~z,A~Z共62個(gè)字符依序代替;
音符、控制音符、標(biāo)記? “音符”和“控制音符”對(duì)應(yīng)單個(gè)RsmNote對(duì)象,具有各種用于發(fā)音的成員變量,區(qū)別在于后者soundID成員變量等于0,且將其他成員變量用作控制參數(shù)起控制作用;標(biāo)記起操控元參數(shù)和RsmNote序列的作用;
已實(shí)現(xiàn):
$? 標(biāo)記一個(gè)音軌的開(kāi)始,初始化當(dāng)前音軌;
;? 標(biāo)記一個(gè)音軌的結(jié)束,將該音軌添加至List<RsmTrack> trackList中;
@n? 標(biāo)記另一個(gè)音軌在此啟動(dòng),參數(shù)n由該音軌的結(jié)束標(biāo)記是第幾次出現(xiàn)并減去1確定(主音軌是0,請(qǐng)不要使用@0);
~? 修改元delay參數(shù)為四分音符時(shí)值(12);
_? 修改元delay參數(shù)為八分音符時(shí)值(6);
=? 修改元delay參數(shù)為十六分音符時(shí)值(3);
.? 修改元delay參數(shù)為原來(lái)的1.5倍,即附點(diǎn)音符,不建議在"="標(biāo)記后使用;
*? 修改元delay參數(shù)為原來(lái)的三分之二,實(shí)現(xiàn)三連音;
-? 將已添加至List<RsmNote> thisNotes的最新音符的delay參數(shù)加12,即延長(zhǎng)一拍;
,? 標(biāo)記其后的音符與前一個(gè)音符同時(shí)播放;
0? 向List<RsmNote> thisNotes中添加休止符;
1~7? 對(duì)應(yīng)一個(gè)鋼琴音組的七個(gè)白鍵,以對(duì)應(yīng)noteNum值生成RsmNote對(duì)象添加至thisNotes中;
8? 增加已添加至thisNotes的最新音符的時(shí)值,將它的delay參數(shù)加上當(dāng)前元delay參數(shù)的值,實(shí)現(xiàn)連音符;
9? 復(fù)制已添加至thisNotes的最新音符,降八度后添加,且設(shè)置為同時(shí)播放;
>? 升八度前綴標(biāo)記;
<? 降八度前綴標(biāo)記;
#? 臨時(shí)升半音前綴標(biāo)記;
b? 臨時(shí)降半音前綴標(biāo)記;
+? 臨時(shí)升八度前綴標(biāo)記;
!? 臨時(shí)降八度前綴標(biāo)記;
Zn? 暫未分配字母標(biāo)記的雜項(xiàng)功能標(biāo)記,參數(shù)n表示功能號(hào):
? ? Z1? 啟動(dòng)自動(dòng)音符9功能
? ? Z2? 關(guān)閉自動(dòng)音符9功能
暫未實(shí)現(xiàn):
%n? 復(fù)制標(biāo)記,將已添加至thisNotes的最新的“參數(shù)n”個(gè)音符(包括控制音符)復(fù)制一次再次添加;
An,Bn? 標(biāo)記復(fù)制起始點(diǎn)和結(jié)束點(diǎn),參數(shù)n相等的AB標(biāo)記確定了一個(gè)音符組,結(jié)合P標(biāo)記實(shí)現(xiàn)重復(fù)音符復(fù)制功能;
Pn? 復(fù)制參數(shù)n代表的音符組添加到thisNotes中;
K? 標(biāo)記歌詞文本的開(kāi)始,代碼會(huì)搜索其后出現(xiàn)的第一個(gè)字符";",截取"K"與";"之間的文本作為一行歌詞,建議在所有音軌定義完成后,在rsm文本的末尾寫(xiě)入歌詞;
Ln? 控制音符,標(biāo)記某行歌詞的啟用,參數(shù)n由該行歌詞的"K"標(biāo)記是第幾次出現(xiàn)確定,L0表示空行;
以下是將音軌1略簡(jiǎn)化后的無(wú)歌詞《千本櫻》rsm文本(看上去很讓人眼花……將來(lái)做個(gè)專用編輯器吧……)
視頻地址:https://www.bilibili.com/video/av38250376/

static String rsm_senbon_zakura_3 = "" //
+ "$@1 _.6,+2 _.6,+2 _5,+1 _.6,+2 _.6,+2 _5,+1 _.6,+2 _.6,+2 _5,+1 ~6,+2 ~+1,+4" // 1-2
+ "_.6,+2 _.6,+2 _5,+1 _.6,+2 _.6,+2 _5,+1 ~6,+2 ~+4,+6 ~+3,+5 ~+4,+6>" // 3-4
+ "_56=2121 _56=2121 _56=2121 _4=*343_21 _56=2121 _56=2121 _56>_14 =3432_1<6" // 5-8
+ "_56=2121 _56=2121 _56=2121 _4=*343_21 _2=12_4=24 _6=56>14<6>1 _4=*343_21 ~2_24" // 9-12
+ "_56=2121 _56=2121 _56=2121 _4=*343_21 _56=2121 _56=2121 _56>_14 =3432_1<6" // 13-16
+ "_56=2121 _56=2121 _56=2121 _4=*343_21 _5=6>121<65 _2456 _.2.2_1~2-" // 17-20
+ "<~2_.2=1 _2445 ~2_.2=1 _21<6>1? ~2_.2=1 _2456 ~6_*565 ~42" // 21-24
+ "~2_.2=1 _1245 ~2_.2=1 _211<6>? ~2_.2=1 _1245 ~6_*565 ~42" // 25-28
+ "4321 _1=12<_65~6- _6>1~253 4_31~2-" // 29-32
+ "4321 _1=12<_65~6_6>1 2~2_2~45 3--_24" // 33-36
+ "_.5.5_6 ~.6_6 >12<54 ~6_24 _.5.5_6 ~.6_6 b7654 ~4_24" // 37-40
+ "_.5.5_6 ~.6_6 >12<54 ~6_24 ~b76 54 _5631 ~2_24" // 41-44
+ "_.5.5_6 ~.6_6 >12<54 ~6_24 _.5.5_6 ~.6_6 b7654 ~4_24" // 45-48
+ "_.5.5_6 ~.6_6 >12<54 ~6_24 ~b76 54 _546>1 ~2-" // 49-52
+ "_2222 22=1<7_6 5555 55=54_2 2222 22=21_<6 5=65 6>124 6>124 _3=<24" // 53-56
+ "64268624 64268624 b754b78b754 b754b78b754" // 57-58
+ "b742b78b742 b742b78b742 53158531 63168631" // 59-60
+ "6426 +2642 5426 +4+264 b742b7 +2b742 b742b7 >432<b7" // 61-62
+ "+2b74b7 >4!b724 b742<b7 b742!b7 ~1 =<135+1 ~+#1 =#14#5>#1" // 63-64
+ "=5646 5432 3212 21<65 6546 5434 ~2-" // 65-66
+ "_2346 =56>23 4324 ~.6_+1 ~6-" // 67-68
+ "<_2154 64>21 64=*+16+16+16 ~+1-" // 69-70
+ "_4=2<b7 4b7>24 _5=31 !5135 _.6.b6=6b6 ~6-" // 71-72
+ "4321 _1=12<_65~6- _6>1~253 4_31~2-" // 73-76
+ "4321 _1=12<_65~6_6>1 2~2_2~45 3--_24" // 77-80
+ "_.5.5_6 ~.6_6 >12<54 ~6_24 _.5.5_6 ~.6_6 b7654 ~4_24" // 81-84
+ "_.5.5_6 ~.6_6 >12<54 ~6_24 ~b76 54 _5656 ~6_35" // 85-88
+ "_.6.6_7 ~.7_7 >23<65 ~7_35 _.6.6_7 ~.7_7 +1765 ~5_35" // 89-92
+ "_.6.6_7 ~.7_7 >23<65 ~7_35 ~+17 65 _657>2 ~3_<35" // 93-96
+ "67=3232 _67=3232 _67=3232 _5=*#45#4_32" // 97-98
+ "67=3232 _67=3232 _67>25 =#45#43_2<7" // 99-100
+ "67=3232 _67=3232 _67=3232 _5=*#45#4_32" // 101-102
+ "_3=23 _5=35 _6=67 >25!72 _5=*#45#4_32 ~3_35" // 103-104 ">"
+ "67=3232 _67=3232 _67=3232 _5=*#45#4_32" // 105-106
+ "67=3232 _67=3232 _67>25 =#45#4#3_2<7" // 107-108
+ "67=3232 _67=3232 _67=3232 _5=*#45#4_32" // 109-110
+ "_6=7>2 32<76 _3567 .3.3_2 ~3-" // 111-112
+ "_.3.3_2 ~3- 0000;"// 113-114
+ "$< A1 _.2,6,+2 _.2,6,+2 _2,6,+2 B1 P1 P1 P1" // 1-2
+ "P1 P1 ~2,6,+2 ~2,6,+2 ~1,5,+1 ~1,5,+1" // 3-4
+ "A2 _!b7_4,b7 _!b7_4,b7 _1_5,+1 _1_5,+1 _2_6,+2 _2_6,+2 _2_6,+2 _2_6,+2 B2" // 5-6
+ "P2 P2 P2 P2 P2 P2 P2" // 7-20
+ "A3 _2_6,+2 _2_6,+2 _2_6,+2 _2_6,+2 _!b7_4,b7 _!b7_4,b7 _1_5,+1 _1_5,+1 B3" // 21-22
+ "P3 P3 P3" // 23-28
+ "A4 _!b7_4,b7 _!b7_4,b7 _!b7_4,b7 _!b7_4,b7 >_!4_1,4 _!4_1,4 _!4_1,4 _!4_1,4" // 29-30
+ "<_!b7_4,b7 _!b7_4,b7 _1_5,+1 _1_5,+1 B4 _2_6,+2 _2_6,+2 _2_6,+2 _2_6,+2" // 31-32
+ "P4 _!6_3,6 _!6_3,6 ~3,6,+#1,+3 8" // 33-36
+ "A5 _2_6,+2 _2_6,+2 _!b7_4,b7 _!b7_4,b7 _1_5,+1 _1_5,+1 >_!4_1,4 _!4_1,4<" // 37-38
+ "_2_6,+2 _2_6,+2 _!b7_4,b7 _!b7_4,b7 _1_5,+1 _1_5,+1 >_!4_1,4 _!4_1,4<" // 39-40
+ "_2_6,+2 _2_6,+2 _!b7_4,b7 _!b7_4,b7 _1_5,+1 _1_5,+1 >_!4_1,4 _!4_1,4<" // 41-42
+ "_!b7_4,b7 _!b7_4,b7 _1_5,+1 _1_5,+1 _!b7_4,b7 _!b7_5,+1 ~2,6,+2 8 B5 P5" // 43-52
+ "~2,6,+2 8 ~!b7,4,b7 8 ~1,5,+1 8 ~2,6,+2 8" // 53-54
+ "~2,6,+2 8 ~!b7,4,b7 8 ~1,5,+1 8 ~!6,3,6 8" // 55-56
+ "A6 ~2,6,+2 ~2,6,+2 ~2,6,+2 ~2,6,+2 ~!b7,4,b7 ~!b7,4,b7 ~!b7,4,b7 ~!b7,4,b7 B6" // 57-58
+ "~!b7,4,b7 ~!b7,4,b7 ~!b7,4,b7 ~!b7,4,b7 ~1,5,+1 ~1,5,+1 ~!6,3,6 ~!6,3,6 P6" // 59-62
+ "~!5,2,5 ~!5,2,5 ~!5,2,5 ~!5,2,5 <~1,5,+1 ~1,5,+1 >~!6,#1,3,6 ~!6,#1,3,6" // 63-64
+ "A7 ~!b7,4,b7 ~!b7,4,b7 ~1,5,+1 ~1,5,+1 B7 ~2,4,6 ~2,4,6 ~2,4,6 ~2,4,6" // 65-66
+ "P7 ~2,4,6 ~2,4,6 ~2,4,6 ~2,4,6" // 67-68
+ "P7 ~2,6,+2 ~2,6,+2 ~2,6,+2 ~2,6,+2" // 69-70
+ "P7 ~!6,3,6 ~!6,3,6 ~!6,3,6 ~!6,3,6" // 71-72
+ "A8 ~!b7,4,b7 ~!b7,4,b7 ~!b7,4,b7 ~!b7,4,b7 ~!4,1,4 ~!4,1,4 ~!4,1,4 ~!4,1,4 B8" // 73-74
+ "~!b7,4,b7 ~!b7,4,b7 ~1,5,+1 ~1,5,+1 ~2,6,+2 ~2,6,+2 ~2,6,+2 ~2,6,+2 P8" // 75-78
+ "_!b7,4,b7 ~!b7,4,b7 _!b7,4,b7 ~!b7,4,b7 ~!b7,4,b7 ~!6,3,6 ~!6,3,6 ~3,6,+#1,+3 8" // 79-80
+ "A9 ~2,6,+2 8 ~!b7,4,b7 8 ~1,5,+1 ~1,5,+1 >~!4,1,4 8< B9 P9 P9" // 81-86
+ "~!b7,4,b7 ~!b7,4,b7 ~1,5,+1 ~1,5,+1 ~!b7,4,b7 ~1,5,+1 ~2,6,+2 8" // 87-88
+ "Aa _3_7,+3 _3_7,+3 _1_5,+1 _1_5,+1 _2_6,+2 _2_6,+2 _5_+2,+5 _5_+2,+5 Ba Pa Pa" // 89-94
+ "_1_5,+1 _1_5,+1 _2_6,+2 _2_6,+2 _1_5,+1 _2_6,+2 ~3,7,+3 8" // 95-96
+ "Ab _1_5,+1 _1_5,+1 _2_6,+2 _2_6,+2 _3_7,+3 _3_7,+3 _3_7,+3 _3_7,+3 Bb Pb Pb" // 97-102
+ "_1_5,+1 _1_5,+1 _2_6,+2 _2_6,+2 _1_5,+1 _2_6,+2 ~3,7,+3 8 Pb Pb Pb" // 103-110
+ "_1_5,+1 _1_5,+1 _2_6,+2 _2_6,+2 _.3,.7,.+3 _.3,.7,.+3 _3,7,+3 ~3,7,+3 _3,7,+3 =2,+2 =#2,+#2" // 111-112
+ "_.3,.7,.+3 _.3,.7,.+3 _3,7,+3 ~3,7,+3 <~3,7,+3 ~0000;" // 113-114
+ "";