From f06985104c08b3a5ddbd99f99e947fb6c27c01d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=B3=E6=9D=8E=E5=9F=8E?= <985478238@qq.com> Date: Sun, 29 Dec 2024 14:10:37 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E8=B0=83=E6=95=99=E4=BA=86=E7=90=B4?= =?UTF-8?q?=E8=B0=B1=EF=BC=8C=E7=8E=B0=E5=9C=A8=E5=8F=AF=E4=BB=A5=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E6=9B=B4=E5=A4=9A=E4=B9=90=E8=B0=B1=E3=80=82=202.?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=9B=B4=E5=A4=9A=E4=B9=90=E8=B0=B1?= =?UTF-8?q?=203.=E5=A2=9E=E5=8A=A0=E4=BA=86=E8=B0=83=E5=BA=A6=E5=99=A8?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=EF=BC=8C=E7=8E=B0=E5=9C=A8=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E5=9C=A8=E8=B0=83=E5=BA=A6=E5=99=A8=E4=B8=AD=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- repo/js/YuanQin/README.md | 0 repo/js/YuanQin/assets/JOJO黄金之风.json | 2 +- repo/js/YuanQin/assets/JOJO黄金之风2.json | 8 + repo/js/YuanQin/assets/JOJO黄金处刑曲.json | 45 +++++ repo/js/YuanQin/assets/One last kiss.json | 126 ++++++++++++ repo/js/YuanQin/assets/声嘶力竭.json | 27 +++ repo/js/YuanQin/assets/孤勇者.json | 6 +- repo/js/YuanQin/assets/孤勇者2.json | 94 +++++++++ repo/js/YuanQin/assets/溯.json | 7 + repo/js/YuanQin/assets/牵丝戏.json | 15 ++ repo/js/YuanQin/assets/牵丝戏2.json | 223 +++++++++++++++++++++ repo/js/YuanQin/assets/花之舞.json | 46 +++++ repo/js/YuanQin/assets/赤伶.json | 7 + repo/js/YuanQin/assets/黑人抬棺.json | 7 + repo/js/YuanQin/main.js | 153 ++++++++------ repo/js/YuanQin/manifest.json | 1 + repo/js/YuanQin/settings.json | 23 +++ 17 files changed, 726 insertions(+), 64 deletions(-) create mode 100644 repo/js/YuanQin/README.md create mode 100644 repo/js/YuanQin/assets/JOJO黄金之风2.json create mode 100644 repo/js/YuanQin/assets/JOJO黄金处刑曲.json create mode 100644 repo/js/YuanQin/assets/One last kiss.json create mode 100644 repo/js/YuanQin/assets/声嘶力竭.json create mode 100644 repo/js/YuanQin/assets/孤勇者2.json create mode 100644 repo/js/YuanQin/assets/溯.json create mode 100644 repo/js/YuanQin/assets/牵丝戏.json create mode 100644 repo/js/YuanQin/assets/牵丝戏2.json create mode 100644 repo/js/YuanQin/assets/花之舞.json create mode 100644 repo/js/YuanQin/assets/赤伶.json create mode 100644 repo/js/YuanQin/assets/黑人抬棺.json create mode 100644 repo/js/YuanQin/settings.json diff --git a/repo/js/YuanQin/README.md b/repo/js/YuanQin/README.md new file mode 100644 index 00000000..e69de29b diff --git a/repo/js/YuanQin/assets/JOJO黄金之风.json b/repo/js/YuanQin/assets/JOJO黄金之风.json index 0ec09ce5..6f406323 100644 --- a/repo/js/YuanQin/assets/JOJO黄金之风.json +++ b/repo/js/YuanQin/assets/JOJO黄金之风.json @@ -1,7 +1,7 @@ { "name":"JOJO黄金之风", "pause":200, - "longPause":500, + "longPause":200, "split":"括号", "toneStr":"(EHN)(WFV)(WFV)QW(WM)(WV)(QM)(JC)QCW(EHN)(YQV)(YQV)HJ(QX)(WN)(QX)(JC)GCF(EHN)Z(WFV)(WFV)QW(WM)(WV)(QM)(JC)QCW(EHN)(YQV)(YQV)YU(QX)(RX)(EX)(WC)QCTNNNBNN(AZ)NCBNNNBNNXX(AZ)BNNNBNN(AZ)NCBNNNBN(AZ)(AZ)(SX)(SX)(AZ)BNNNBNN(AZ)NCBNNNBNNXX(AZ)BNNNBNN(AZ)NCBNNNBNNNNBNN(AZ)NCBNNNBNNXX(AZ)BNNNBNN(AZ)NCBNNNBN(AZ)(AZ)(SX)(SX)(AZ)BNNNBNN(AZ)NCBNNNBNNXX(AZ)BNNNBNN(AZ)NCBNNNBNC" } \ No newline at end of file diff --git a/repo/js/YuanQin/assets/JOJO黄金之风2.json b/repo/js/YuanQin/assets/JOJO黄金之风2.json new file mode 100644 index 00000000..4ac381c4 --- /dev/null +++ b/repo/js/YuanQin/assets/JOJO黄金之风2.json @@ -0,0 +1,8 @@ +{ + "name":"JOJO黄金之风2", + "short" :90, + "pause":200, + "longPause":200, + "split":"括号", + "toneStr":"J J J W J J J J R E J J J W J J J R E J J J W J J J R E J J W J J J J // H QW E // Q // / W / Q J Q W E // Y // H J Q W / Q J T R (QE) // (HQ) // (JE) / W / Q (GJ) / Q / W (HE) // (EY) // H J (HQ) / W / R E / Q W (QE) // (HQ) // (HE) / W Q (FJ) / Q W (QE) // (EY) // H / W / Q J / T / R (QE) // (HQ) // Q W (HE) / W / Q (FJ) / Q / W (QE) / (EY) // Y J Q / D / S Q / G H" +} diff --git a/repo/js/YuanQin/assets/JOJO黄金处刑曲.json b/repo/js/YuanQin/assets/JOJO黄金处刑曲.json new file mode 100644 index 00000000..4394b09e --- /dev/null +++ b/repo/js/YuanQin/assets/JOJO黄金处刑曲.json @@ -0,0 +1,45 @@ +{ + "name":"JOJO黄金处刑曲", + "short" :90, + "pause":200, + "longPause":200, + "split":"括号", + "toneStr":"(EHN) (QHV) QW | (EHM)WQ(JC)QCW | (EQHN)N(YEQV) HJ | (QX)(WN)(QX)(JC)TCR | +/ +(EHN) (QHV) QW | (EHM)WM(QX)(JC)MQC(WC) | (EQHN)N(YEQV) HJ | (QFSX)(FX)(DX)(DC)QCG | +/ +(HN) (HN) (HN) (GB)(HN) (QZ) (HN) (DC)(GB) | (HN) (HN) (HN) (GB)(HN) (EC) (WX) (QZ)(GB) | +/ +(HN) (HN) (HN) (GB)(HN) (QZ) (HN) (DC)(GB) | (HN) (HN) (HN) (GB)(HN) (EC) (WX) (QZ)(GB) | +/ +(HN) (HN) (HN) (GB)(HN) (QAZ) (HN) (DC)(GB) | (HN) (HN) (HN) (GB)(HN) (EDC) (WSX) (QAZ)(GB) | +/ +(HN) (HN) (HN) (GB)(HN) (QAZ) (HN) (DC)(GB) | (HN) (HN) (HN) (GB)(HN) D | +/ +QW(EN) A SD D GHB(QD) (TG) | (RN) G GD D SEAB (WB) | +/ +(EN) A SD D G GD G | H G BB N V V(EV) B | +/ +JQW(EN) A SD D GHG(QD) (TG) | (YWH) G GDTD S A(RB) B | +/ +(RHN) A SD(EH)D G GD G | H G BB N V V(QV)J(HB)G | +/ +(GN)H(HN) DJ(QB) | (JN)(GB)(HDN) C C | (HDN)(GS)(HDN) D(JS)(QB) | (JN)(GB)(SN) MQJ(HM) | +/ +(GSN)H(HDN) (DN)G(HB) | (JSN)(GB)(HDN) CQJ(HC) | {GHQ}{WQH}{TRE}{QJH} | +/ +(GN)H GH (GC)H GH (GC)H(QB) | (EHDN)N(QHDV) VV(QV)W | (EHM)JWM(QM) | (JGC)CQC(WB) | +/ +(EQHDN)N(YEQHV) VV(HV)J | (QFSM)MWM(QM)(JDC)CGB(RB) | (EHDN)N(QHDV) VV(QV)W | (EHM)MWM(QM)(JGC)QBW | +/ +(EQHDN)N(YEQHV) V(HAV)(JSV) | (QFSM)M(FM)M(DM) | (SMC)(QD)C(HA) | (HDAN) (HN) (HN) (GB)(HN) (QZ) (HN) (DC)(GB) | +/ +(HN) (HN) (HN) (GB)(HN) (EC) (WX) (QZ)(GB) | (HN) (HN) (HN) (GB)(HN) (QZ) (HN) (DC)(GB) | +/ +(HN) (HN) (HN)(GB)(HN)(QZ) (EC) (WX) (QZ)(GB) | (HN) (HN) (HN) (GB)(HN) (QAZ) (HN) (DC)(GB) | +/ +(HN) (HN) (HN) (GB)(HN) (EDC) (WSX) (QAZ)(GB) | +/ +(HN) (HN) (HN) (GB)(HN) (QAZ) (HN) (DC)(GB) | (HN) (HN) (HN) (GB)(HN) | +" +} \ No newline at end of file diff --git a/repo/js/YuanQin/assets/One last kiss.json b/repo/js/YuanQin/assets/One last kiss.json new file mode 100644 index 00000000..f50ae3b0 --- /dev/null +++ b/repo/js/YuanQin/assets/One last kiss.json @@ -0,0 +1,126 @@ +{ + "name":"One last kiss", + "short" :90, + "pause":200, + "longPause":200, + "split":"括号", + "toneStr":" + +前奏: +(XAFH) (XAFH)/ (XAFH) / (XAFH) /(XAFH) (XAFH) / +(VADH) (VADH)/ (VADH) / (VADH) /(VADH) (VADH) / +(BDGJ) (BDGJ)/ (BDGJ) / (BDGJ) /(BDGJ) (BDGJ) / +(CSGJ) (CSGJ)/ (CSGJ) /Q(SGJ)E /(SGJT)E(SGJ)T/ + +(AFHE) T(AFHE)/ T(AFHE) / (AFH) /(AFH) (AFH) / +(VADH) (VADH)/ (VADH) / (VADH) /(VADH) (VADH) / +(BDGJ) (BDGJ)/ (BDGJ) / (BDGJ) /(BDGJ) (BDGJ) / +(CSGJ) (CSGJ)/ (CSGJ) / (CMSGJ) /(CMSGJ) (CMSGJ) / +/ / / / + + 第一段: +(AFHT)YY(AFHY)/YE(AFH)W/E(AFHW) /(AFH) (AFH) / +(ADHY) Y(ADHY)/YE(ADH)W/E(ADHW) /(ADHQ) (ADH) / +(DGJT)YY(DGJY)/YE(DGJ)W/E(DGJW) /(DGJ) (DGJQ) / +(MSGT)YY(MSGY)/YE(MSG)W/E(MSGW) /(MSGW) (MSG) / + +(AFHT)YY(AFHY)/YE(AFH)W/E(AFHW) /(AFH) (AFHQ) / +(ADHT)YY(ADHY)/YE(ADH)W/E(ADHW) /(ADHQ) (ADH) / +(DGJT)YY(DGJY)/YE(DGJ)W/E(DGJW) /(DGJ) (DGJ) / +(MSGE) W(MSG)/ (MSGQ) / (MSG) /(MSG) (MSG) / + +第二段: +(VADG) H(VAD)/ (VAD) / (VAD) /(VADG) H / +(BSDW) E(BSD)/H (BSD) /G(BSD)H /(BSD) H / +(VAD) (VAD)/ (VAD) / (VAD) /(VADH) (DE) / +(NADW) Q(NAD)/Q (NADE) /W(NAD)Q /(NADQ) W / + +(VADH) (VAD)/ (VAD) / (VAD) /(VADG) H / +(BSDW) E(BSD)/H (BSD) /G(BSD)H /(BSD) H / +(VAD) (VAD)/ (VAD) / (VAD) /(VADH) (DE) / +(MSGW) Q(MSG)/Q (MSGE) /W(MSG)Q /(MSGQ) W / + +第三段: +(ZXNDH) (DH)/(ZXN) (DH) /(ZXN)(DH) (ZXN)/(AQ) (ZXNSW) / +(ZCNDH) (DH)/(ZCN) (DH) /(ZCNDH) (DE) /(ZCNSW) (AQ) / +(XBMDH) (DH)/(XBM) (DH) /(XBM)(DH) (XBM)/(DH) (XBMDE) / +(CBMSW) (AQ) /(CBMAQ) (DE) /(CBMSW) (AQ) /(CBMAQ)(SW) / + +(ZXNDH) (DH)/(ZXN) (DH) /(ZXN)(DH) (ZXN)/(AQ) (ZXNSW) / +(ZCNDH) (DH)/(ZCN) (DH) /(ZCNDH) (DE) /(ZCNSW) (AQ) / +(XBMDH) (DH)/(XBM) (DH) /(XBM)(DH) (XBM)/(DH) (XBMDE) / +(CBMSW) (AQ) /(CBMAQ) (DE) /(CBMAQ) (DE)(CBM)/TE(CBM)T/ + +间奏: +(ZVNE) T(AFHE)/ T(AFHE) /(ZVNQ) E(AFH)/TE(AFH)T/ +(ZCNE) T(ADHE)/ T(ADHE) /(ZCNQ) E(ADH)/TE(ADH)T/ +(XBME) T(SGJE)/ T(SGJE) /(XBMQ) E(SGJ)/RE(SGJ)R/ +(CBME) R(MDGE)/ R(MDGE) /(CBM) (CBM)/W (CBM) / + +重复第一段: +(ZVNH) H(ZVNH)/HD(ZVN)S/D(ZVNS) /(ZVN) (ZVNA) / +(ZCNG)HH(ZCNH)/HD(ZCN)S/D(ZCNS) /(ZCNA) (ZCN) / +(XBMG)HH(XBMH)/HD(XBM)S/D(XBMS) /(XBM) (XBMA) / +(CBMG)HH(CBMH)/HD(CBM)S/S(CBM) /(CBMA) (CBM) / + +(ZVNG)HH(ZVNH)/HD(ZVN)S/D(ZVNS) /(ZVN) (ZVNA) / +(ZCNH) H(ZCNH)/HD(ZCN)S/D(ZCNS) /(ZCNA) (ZCN) / +(XBMG)HH(XBMH)/HD(XBM)S/D(XBMS) /(XBM) (XBMA) / +(CBMG)HHH/HDDS/S AC/MDG / + +重复第二段: +(VADT) Y(VADY)/ (VAD) / (VAD) /(VADG) H / +(BSDW) E(BSD)/H (BSD) /G(BSD)H /(BSD) H / +(VAD) (VAD)/ (VAD) / (VAD) /(VADH) (DE) / +(NADW) Q(NAD)/Q (NADE) /W(NAD)Q /(NADQ) W / + +(VADH) (AD)/ (AD) / (AD) /(ADG) H / +(BSDW) E(SD)/H (SD) /G(SD)H /(SD) H / +(VAD) (AD)/ (AD) / (AD) /(ADH) (DE) / +(MSGW) Q(MSG)/Q (MSGE) /W(MSG)Q /(MSGQ) W / + +重复第三段: +(ZXNH)SFH/(ZXNS)FHS/(ZXNF)HS(ZXNF)/(AQ) (ZXNSW) / +(ZCNH)ADH/(ZCNA)DHA/(ZCNDH) (ADE)D/(ZCNSW) (AQ) / +(XBMH)ADH/(XBMA)DHA/(XBMD)HA(XBMD)/(NH) (XBMDE) / +(CBMSW) (AQ) /(CBMAQ) (DE) /(CBMSW) (AQ) /(CBMAQ)(SW) / + +(ZXNH)SFH/(ZXNS)FHS/(ZXNF)HS(ZXNF)/(AQ) (ZXNSW) / +(ZCNH)ADH/(ZCNA)DHA/(ZCNHD) (ADE)D/(ZCNSW) (AQ) / +(XBMH)ADH/(XBMA)DHA/(XBMD)HA(XBMD)/(NH) (XBMDE) / +(CBMSW) (AQ) /(CBMAQ) (DE) /(CBMAQ) (DE)(CBM)/TE(CBM)T/ + +第四段第一部分: +(ZVNE) T(AFHE)/ T(AFHE) /(ZVNQ) E(AFH)/TE(AFH)T/ +(ZCNE) T(ADHE)/ T(ADHE) / (ZCN) /(ZCNH) (ZCNDE) / +(MSGW) Q(MSG)/Q (MSGE) /W(MSG)Q /(MSGQ)W(MSGW)W/ + +(CBMQ)WW(DGJW)/QW(DGJW)W/Q(CBMW)WW/(DGJQ)W(DGJW)W/ +(ZVNQ)WW(AFHW)/QW(AFHW)W/Q(ZVNW)WW/(AFHQ)W(AFHW)W/ +(ZCNQ)WW(ADHW)/QW(ADHW)W/Q(ZCNW)WW/(ADHQ)W(ADHW)W/ +(XBMQ)WW(SGJW)/QW(SGJW)W/Q(XBMW)WW/(SGJQ)W(SGJW)W/ +(CBMQ)WW(DGJW)/QW(DGJW)W/Q(CBMW)WW/(CS)GJW/ + +第四段第二部分: +(ZVNGT) (HY)/ / /G H / +(ZCNW) E /H /G H / H / +(AD) (AD)/ (AD) / /H E / +(NSW) Q /Q E /(BSW) Q /Q W / + +(VADH) (AD)/ (AD) / /G H / +(ZCNW) E /H /G H/ H / +(AD) (AD)/ (AD) / / / +(MS) (MS)/ (MS) / /H E / + +(ZVNW) Q(ZVN)/Q (ZVNE) /W(ZVN)Q /(ZVNQ) W / +(ZCNDH) (ZCNDH)/ (ZCNDH) / (ZCNDH) /(ZCNDH) E / +(XBMW) Q(XBM)/Q (XBME) /W(XBM)Q /(XBMNQ) (DW) / +(CBMS) A(CBM)/A (CBMD) /S(CBM)A /(CBMAH) (SE) / + +(ZVNW) Q(ZVN)/Q (ZVNE) /W(ZVN)Q /(ZVNQ) W / +(ZCNDH) (ZCNDH)/ (ZCNDH) / (ZCNDH) /(ZCNDH) E / +(XBMW) Q(XBM)/Q (XBME) /W(XBM)Q /(XBMNQ) (DW) / +(CBMS) A(CBM)/A (CBMD) /S(CBM)A /(CBMA) (CBMS) / + +" +} \ No newline at end of file diff --git a/repo/js/YuanQin/assets/声嘶力竭.json b/repo/js/YuanQin/assets/声嘶力竭.json new file mode 100644 index 00000000..6e4015da --- /dev/null +++ b/repo/js/YuanQin/assets/声嘶力竭.json @@ -0,0 +1,27 @@ +{ + "name":"声嘶力竭", + "short" :100, + "pause":180, + "longPause":200, + "split":"括号", + "toneStr":" + 键盘第一页: + +前奏: +(VS)DA /(DH) A /(BS) M /(SJ) M / +(NS) A /(DQ) A /(BSW) /H G / +(VH) A /(AE) /(BH) (SG) /(SG) / +H / / + + / + / / + +(NADH) E/ W Q/ J Q/J G / +(NADH) E/ W Q/ J Q/J G / +(CNH) (DE)/ (SW) (AQ)/ (MJ) (AQ)/(MJ) (BG) / +(CNH) /(CNH) E/ Y /(CN) A / + + + + " +} diff --git a/repo/js/YuanQin/assets/孤勇者.json b/repo/js/YuanQin/assets/孤勇者.json index d316317a..4f0d9629 100644 --- a/repo/js/YuanQin/assets/孤勇者.json +++ b/repo/js/YuanQin/assets/孤勇者.json @@ -1,7 +1,7 @@ { "name":"孤勇者", - "pause":200, - "longPause":"450", + "pause":180, + "longPause":"400", "split":"括号", - "toneStr":"E+QWQE+QWQWQH+QH+QH+QWQJ++E+QWQE+QWQWQH+QH+QH+QWQJ++HQY+YYTY+YTYTYTE+HQY+YYTYTU+UUYUYE++ETEWEWEW+ETETEW+EWEW+QWEHQEWEWQH++HJQWJQQ+QJQWJQQ+QWEWEWE+EWETE++HJQWJQQ+QJQWJQQ+QWEWEWE+EWETE++TE+TE+TETYET+TE+TE+TETYET++TTEWWQEWWQH+TTEWWQEWWQH" + "toneStr":"E/QWQE/QWQWQH/QH/QH/QWQJ//E/QWQE/QWQWQH/QH/QH/QWQJ//HQY/YYTY/YTYTYTE/HQY/YYTYTU/UUYUYE//ETEWEWEW/ETETEW/EWEW/QWEHQEWEWQH//HJQWJQQ/QJQWJQQ/QWEWEWE/EWETE//HJQWJQQ/QJQWJQQ/QWEWEWE/EWETE//TE/TE/TETYET/TE/TE/TETYET//TTEWWQEWWQH/TTEWWQEWWQH" } \ No newline at end of file diff --git a/repo/js/YuanQin/assets/孤勇者2.json b/repo/js/YuanQin/assets/孤勇者2.json new file mode 100644 index 00000000..51c61aeb --- /dev/null +++ b/repo/js/YuanQin/assets/孤勇者2.json @@ -0,0 +1,94 @@ +{ + "name":"孤勇者2", + "short" :90, + "pause":300, + "longPause":"300", + "split":"括号", + "toneStr":" + WJQH WJQH WJQH WJQH + (VAW)JQH (BSW)JQH (NDW)JQH (BSW)JQH + / + (VAW)(VA) (VAJ)(VA) (VAQ)(VA) (VAH)(VA) + (BSW)(BS) (BSJ)(BS) (BSQ)(BS) (BSH)(BS) + (NDW)(ND) (NDJ)(ND) (NDQ)(ND) (NDH)(ND) + (BSW)(BS) (BSJ)(BS) (BSQ)(BS) (BSH)(BS) + / + (NDE) D D D D D DQ(MW)Q + (ADE) D D D D D Q(DW)Q(DW)E + (VDH) DQ(DH) DQ(DH) DQ(DW)(DQ) + (BDJ) D D D D D DSAS + / + (NDE) D D D D D DQ(MW)Q + (ADE) D D D D D Q(DW)Q(DW)E + (VDH) DQ(DH) DQ(DH) DQ(DE)(DW) + (BDJ) D D D D D DSAS + / + (VAH)Q(DY) DY(DY)T (DY) + (DY)T(BSY)T(DY)T + (NA)ED D D D D D (DH)Q(VAY) + DY(DY)T(DY)T (BSU) DY(DU)Y(DU)Y + (NA)ED D D D D DE(DT)E + (VAW) DE(DW) DE(BSW) DE(DT)E(DT)E + (NAW) DE(DW) DE(BSW) D D (DQ)W + (VAE) (DH) (DQ) (DE) (BSW) DE(DW) (DQ) + (CNH)CNSDHQE(QEY) +/ + HJ(VQ)W(NJ)Q (ADQ) (VQ)J +(BQ)W(MJ)Q (SGQ) (BQ)W +(NQE)W(AQE)W(DHQE) (NQE)W +(BQE) (MQT) (SGQE) (BH)J +/ +(VQ)W(NJ)Q (ADQ) (VQ)J +(BQ)W(MJ)Q (SGQ) (BQ)W +(NQE)W(AQE)W(DHQE) (NQE)W +(BQE) (MQT) (SGQE) (BQT) +/ +(VE)NAT(ADE) VT(BE)(MT)(SY)E (SGT) +(BT) (NE)ADT(DHE) NT(BE)(MT)(SY)E (SGT) +(BT)T (VE)N(AW) (ADW) (VQ)E +BM(SW) (SGW) (BQ)H +NC(AD) (ADQ) (ADJ) (BH)MSDGWET +E W W QE W WQQQ +/ +(VHW) J Q H (BW) J Q H +(NW) J Q H (BW) J Q H +(VW) J Q H (BW) J Q H +(NW) J Q H (BW) J Q +/ +HG(VH) NG(AH)G(NH)G +(BH) MG(SH)G(MH)G +NDC N M A M N +(BH)G (VH) NG(AH)G(NH)G +(BJ) MH(SJ)H(MJ)H +NDC N M A +/ +ETE (VW) NE(ADW) VE(BW) ME(SGT)E(BT)E +(NW) AE(DHW) NE(BW) M (SG) (BA)S +(VAD) (VAH) (VAQ) (VAE) +(BSW) (BS)E (BSW) (BSQ) +(NADH)CNSDHQE (QEY)EQHDN +/ +HJ(VQ)W(NJ)Q (ADQ) (VQ)J +(BQ)W(MJ)Q (SGQ) (BQ)W +(NQE)W(AQE)W(DHQE) (NQE)W +(BQE) (MQT) (SGQE) (BH)J +/ +HJ(VQ)W(NJ)Q (ADQ) (VQ)J +(BQ)W(MJ)Q (SGQ) (BQ)W +(NQE)W(AQE)W(DHQE) (NQE)W +(BQE) (MQT) (SGQE) (BQT) +/ +(VE)NAT(ADE) VT(BE)(MT)(SY)E (SGT) +(BT) (NE)ADT(DHE) NT(BE)(MT)(SY)E (SGT) +(BT)T (VE)N(AW) (ADW) (VQ)E +BM(SW) (SGW) (BQ)H +NC(AD) (ADQ) (ADJ) (BH)MSDGWET +E W W QE W WQQQ +/ +(VHW) J Q H (BW) J Q H +(NW) J Q H (BW) J Q H +(VW) J Q H (BW) J Q H +(NW) J Q H (BW) J Q + / + " +} \ No newline at end of file diff --git a/repo/js/YuanQin/assets/溯.json b/repo/js/YuanQin/assets/溯.json new file mode 100644 index 00000000..4e1f6f07 --- /dev/null +++ b/repo/js/YuanQin/assets/溯.json @@ -0,0 +1,7 @@ +{ + "name":"溯", + "pause":170, + "longPause":200, + "split":"括号", + "toneStr":"AGDS/AAGD/AGDS/MMGD/AMAAMASS/SDD/DDMMBA//AMAAMASS/SDD/SDDFD//DSDDDDQJGD/AGMMBA/AGFDSD//ASD/QJQJGD/AGDSAAGD//AGDSMMGDS/QJQJGD/AGDSAAGD//AGDSM/QJQJGD" +} \ No newline at end of file diff --git a/repo/js/YuanQin/assets/牵丝戏.json b/repo/js/YuanQin/assets/牵丝戏.json new file mode 100644 index 00000000..72257da2 --- /dev/null +++ b/repo/js/YuanQin/assets/牵丝戏.json @@ -0,0 +1,15 @@ +{ + "name":"牵丝戏", + "short" :90, + "pause":180, + "longPause":300, + "split":"括号", + "toneStr":"(QA)(JM)(GB)//(GB)(DC)(GB)(HN)/(QA)(JM)(GB)//(GB)(DC)(WS)(ED)// + (ED)(TG)(WS)(ED)(WS)/(QA)(JM)(QA)(JM)(QA)(WS)(ED)/(WS)(ED)(HN)/(WS)(ED)(HN)(GB)(HN)// + (QA)(JM)(GB)//(GB)(DC)(GB)(HN)/(QA)(JM)(GB)//(GB)(DC)(WS)(ED)// + (ED)(TG)(WS)(ED)(TG)(WS)/(QA)(JM)(QA)(JM)(QA)(WS)(ED)/(WS)(ED)(HN)/(WS)(ED)(HN)(GB)(HN)// + (HN)(QA)(WS)(ED)(HN)(WS)/(HN)(QA)(JM)(GB)(DC)(GB)/(HN)(QA)(WS)(ED)(HN)(WS)(ED)(TG)(ED)// + (HN)(QA)(WS)(ED)(HN)(WS)/(QA)(JM)(QA)(JM)(WS)(ED)/(WS)(ED)(HN)/(WS)(ED)(HN)(GB)(HN)// + (ED)(TG)(ED)(WS)/(ED)(WS)(QA)(HN)(ED)/(ED)(TG)(ED)(WS)/(ED)(WS)(TG)(YH)(ED)// + (WS)(ED)(TG)(YH)(TG)(ED)(TG)(WS)/(ED)(WS)(QA)(WS)(ED)(TG)(HN)/(HN)(QA)(WS)(ED)(HN)/(WS)(ED)(HN)(GB)(HN)" +} \ No newline at end of file diff --git a/repo/js/YuanQin/assets/牵丝戏2.json b/repo/js/YuanQin/assets/牵丝戏2.json new file mode 100644 index 00000000..dd00046c --- /dev/null +++ b/repo/js/YuanQin/assets/牵丝戏2.json @@ -0,0 +1,223 @@ +{ + "name":"牵丝戏2", + "short" :90, + "pause":170, + "longPause":180, + "split":"括号", + "toneStr":" + + + / / /HJQW/ + +(VE) N(AH)/ NVN/(BJ)QM(SJ)/(MG)S(MD)/ + +Z CB/NM C/ZCBA/(MH)J(BQ)W/ + +(ZE) V(NH)/AF S/(XJ)QB(MJ)/S(MG) (BD)/ + + + +Z (CQ)B/(NJ)MGC/(ZD)C(BA)A/(MH)J(BQ)W/ + +(ZE) V(NH)/AF S/(XJ)QB(MJ)/S(MG) (BD)/ + +(ZG)DC(BJ)/NMQC/ZCBA/(MD)Q(BJ)G/ + +(XD)VB(NH)/MADN/(ZG)CB(MG)/AS M/ + + + +(ZY)E(CT)(BW)/(NE)(MQ)W(CH)/(ZQ)(CG)(BH)(AD)/(MG)S(BD)M/ + +(VQ)NAS/AFJS/(XG)BMA/(MG)S(AD)M/ + +(ZG)CN(MH)/CM C/ZCNA/MBXB/ + +(VQ)NAS/NSJA/(XG)BNM/(MG)A(MD)B/ + + + +(ZW)CN(ME)/CM C/ZCNA/(ME)B(XT)B/ + +(VW)NAS/AFES/(XW)BMA/(MQ)S(AJ)M/ + +(ZQ)C(NJ)M/(CQ)MW(CE)/ZCNA/(MW)B(XE)(BH)/ + +XVNM/(NW)SE(MH)/ZCBM/(BG)D M/ + + + +(ZH)CNM/CM C/ZC(NH)(AD)/(MG)(BS)(XD)(BA)/ + +(VQ)NAS/AFJS/(XG)BMA/(MG)S(AD)M/ + +(ZG)CN(MH)/CMH(CD)/(ZD)(CD)(NH)(AD)/(MG)(BH)(XD)(BS)/ + +(ZQ)VNM/AMJB/(XG)BNM/(MG)A(MD)B/ + + + +(ZW)CN(ME)/CM C/ZCNA/(ME)B(XT)B/ + +(VW)NAS/(AE)FT(SW)/XBMA/(MQ)S(AJ)M/ + +(ZQ)C(NJ)M/(CQ)MW(CE)/ZCNA/(MW)B(XE)(BH)/ + +XVNM/(NW)SE(MH)/ZCBM/(BG)D M/ + + + +(ZH)CNM/CM C/ZCNA/(MH)B(XQ)B/ + +(ZW)VN(ME)/AD(NH)M/(XW)BMA/(SH)M(BQ)M/ + +(ZJ)CB(MG)/A(BD)M/(ZG)CNM/(AH)N(CQ)N/ + +(XW)VN(ME)/AD(NH)M/(XW)BM(AE)/SM(BT)M/ + + + +(ZE)BAD/GAD/XNSD/(CH)M(DQ)G/ + +(ZW)VN(ME)/AD(NH)M/(XW)BMA/(SQ)M(BJ)M/ + +(ZQ)C(BJ)M/QD(BW)(ME)/VNAS/(DW)A(NE)(AH)/ + +XVNM/(NW)SE(MH)/ZCBM/(BG)D M/ + + + +(ZH)CNM/CM C/ZC(NE)A/(MT)B(XE)B/ + +(ZVW) V /(NA) (VE) /(XBW) B /(MSQ) (BH) / + +(CN) (NE) /(ADE) N /(AD) (NE) /(ADT) (NE) / + +(XNW) N /(SH) (NE) /(ZBW) B /(AGT) (BY) / + + + +(ZV) (VE) /(NA) V /X (NSW) /(CE) (MDT) / + +(ZVY) (VT) /(NAE) (VT) /(XBW) B /(MSE) (BW) / + +(ZCQ) (CW) /(BME) (CT) /(ZVH) V /(NAH) (VQ) / + +(ZVW) (VE) /(NSH) V /(ZCW) (CE) /(MDH) (CG) / + + + +(CN) (NH) /(AD) N /(AD) N /(AD) (NE) / + +(ZVW) VE/(NA) (VG) /(XBD) B /(MSH) (BE) / + +(NW) NE/(AD) (NG) /(AD) N /(AD) (NE) / + +(XW) XE/(VN) (XH) /(BG) BH/(MS) (BJ) / + + + +(ZV) (VD) /(NA) V /B (MS) /N (ADE) / + +(VW) VE/(NA) (VW) /B B /(MS) B / + +(CW) CE/(BM) (CQ) /(VH) V /(NAD) (VG) / + +(XH) (XE) /(NSY) (XT) /(CW) CE/(MD) (CT) / + + + +(NY) N /(DH) N /(DH) N /(DH) N / + +(VQ)NAS/AFJS/(XG)BMA/(MG)S(AD)M/ + +(ZG)CN(MH)/CMH(CD)/(ZD)(CD)(NH)(AD)/(MG)(BH)(XD)(BS)/ + +(ZQ)VNM/AMJB/(XG)BNM/(MG)A(MD)B/ + + + +(ZW)CN(ME)/CM C/ZCNA/(ME)B(XT)B/ + +(VW)NAS/(AE)FT(SW)/XBMA/(MQ)S(AJ)M/ + +(ZQ)C(NJ)M/(CQ)MW(CE)/ZCNA/(MW)B(XE)(BH)/ + +XVNM/(NW)SE(MH)/ZCBM/(BG)D M/ + + + +(ZH)CNM/CM C/ZCNA/(MH)B(XQ)B/ + +(ZW)VN(ME)/AD(NH)M/(XW)BMA/(SH)M(BQ)M/ + +(ZJ)CB(MG)/A(BD)M/(ZG)CNM/(AH)N(CQ)N/ + +(XW)VN(ME)/AD(NH)M/(XW)BM(AE)/SM(BT)M/ + + + +(ZE)BAD/GAD/XNSD/(CH)M(DQ)G/ + +(ZW)VN(ME)/AD(NH)M/(XW)BMA/(SQ)M(BJ)M/ + +(ZQ)C(BJ)M/QD(BW)(ME)/VNAS/(DW)A(NE)(AH)/ + +XVNM/(NW)SE(MH)/ZCBM/(BG)D M/ + + + +(ZH)CNM/CM C/ZC(NE)A/(MT)B(XE)B/ + +(ZVW) V /(NA) (VE) /(XBW) B /(MSQ) (BH) / + +(CN) (NE) /(ADE) N /(AD) (NE) /(ADT) (NE) / + +(XNW) N /(SH) (NE) /(ZBW) B /(AGT) (BY) / + + + +(ZV) (VE) /(NA) V /X (NSW) /(CE) (MDT) / + +(ZVY) (VT) /(NAE) (VT) /(XBW) B /(MSE) (BW) / + +(ZCQ) (CW) /(BME) (CT) /(ZVH) V /(NAH) (VQ) / + +(ZVW) (VE) /(NSH) V /(ZCW) (CE) /(MDH) (CG) / + + + +(CNG) (NH) /(AD) N /(AD) (NE) /(ADT) (NE) / + +(ZVW) V /(NA) (VE) /(XBW) B /(MSQ) (BH) / + +(CN) (NE) /(AD) N /(AD) (NE) /(ADT) (NE) / + +(ZVW) V /(NA) (VE) /(XBW) B /(MST) (BY) / + + + +(ZV) (VE) /(NA) V /B (MSW) /(NE) (ADT) / + +(ZVY) (VT) /(NAE) (VT) /(XBW) B /(MSE) (BW) / + +(ZCQ) (CW) /(BME) (CT) /(ZVH) V /(NAH) (VQ) / + +(ZVW) (VE) /(NSH) V /(ZCW) (CE) /(MDH) (CG) / + + + +(CN) (NH) /(AD) N /(AD) N /(AD) N / + +(VE) N(AH)/ NVN/(BJ)QM(SJ)/(MG)S(MD)/ + +Z CB/NM C/ZCBA/(MH)J(BQ)W/ + +(ZE) V(NH)/AF S/(XJ)QB(MJ)/S(MG) (BDH)/ + + + +Z CB/NM C/ZCBA/MB / + + " +} \ No newline at end of file diff --git a/repo/js/YuanQin/assets/花之舞.json b/repo/js/YuanQin/assets/花之舞.json new file mode 100644 index 00000000..7b848af6 --- /dev/null +++ b/repo/js/YuanQin/assets/花之舞.json @@ -0,0 +1,46 @@ +{ + "name":"花之舞", + "short" :90, + "pause":200, + "longPause":200, + "split":"括号", + "toneStr":" + E A / HQE/(BGJW) S /[GJWT] / + +(CJW) MU/(DY) GT/(NY) D /(HE) D / + +(VFH) A /(FHE) A /(BW) [(SW)EW]/(GJ) (SG) / + +(NH) D /H J /Q D /H E / + + + +[VHQE] A /FH(AQ)E/(BGJW) S /[GJWT] S / + +(CJW) (MJT) /(DJY) (GJU) /(ND)Q(CS)J/(NA)H(CM)G/ + +(VH)E(AW)E/(FH)EWE/(BH)E(SW)E/(GH)EWE/ + +(NH)E(CQ)E/(NH)E(MQ)E/(AH)E(NHQ)E/(CH) (ND) / + +、 + +(NHQ)D(AJ)(MD)/(SQ)(AD)(MW)(AD)/(CJ)M(BMDH)M/(BMDG) DG/ + +(VFH)A(NG)(BA)/(NH)(MA)(AQ)(NA)/(ZG)A(CBAF)A/(CBAD) DG/ + +(XSF)N(VD)(CN)/(XS)(ZN)(MF)N/(ZD)C(CS)(XC)/(ZA)C(ND)C/ + +(MJW)F(VQ)(BF)/(NJ)(MF)(AH)(MF)/(CSDG) (VADH) /(BMDGJ) D / + + + +(NQ)D(CJ)D/(NQ)D(CW)D/(CJ)M(MH)M/(CG) (MD)G/ + +(VH)V(NH)(BG)/(NH)(MJ)(AQ)(NH)/(ZG)A(BF)A/(AD) (BD)G/ + +(VF) (FR)(DE)/(SW)(AQ)(MJ) /(CDE)W(XSE)R/(ZAE)W(CDQ)J/ + +(XSH) (ZAE) /(BMG) EB/(NH) C /N / +" +} \ No newline at end of file diff --git a/repo/js/YuanQin/assets/赤伶.json b/repo/js/YuanQin/assets/赤伶.json new file mode 100644 index 00000000..ed71fe35 --- /dev/null +++ b/repo/js/YuanQin/assets/赤伶.json @@ -0,0 +1,7 @@ +{ + "name":"赤伶", + "pause":180, + "longPause":440, + "split":"括号", + "toneStr":"DGS/ASSDD/NMAADS/ASD//DGS/ASDSA//NMAADS/BNMN//NMASSDDGGHS/SDGDDSA/NNMASD//NMASSDDGGHS/SDGDDSA/NHGDSD//EWEHE/GHJHQ//EWEHE/GHJTE//EWEHE/GHJHQWEH//WEH/WEW/GHJH" +} \ No newline at end of file diff --git a/repo/js/YuanQin/assets/黑人抬棺.json b/repo/js/YuanQin/assets/黑人抬棺.json new file mode 100644 index 00000000..00014284 --- /dev/null +++ b/repo/js/YuanQin/assets/黑人抬棺.json @@ -0,0 +1,7 @@ +{ + "name":"黑人抬棺", + "pause":112, + "longPause":260, + "split":"括号", + "toneStr":"FFFF/HHHH/GGGG/QQQQ/WWWWWWWWWWWW/GFDAS/SHG/F/D/DDG/FDS/SRERERS/SRERERS/SHG/F/D/DDG/FDS/SRERERS/SRERERFFFF/HHHH/GGGG/QQQQ/WWWWWWWWWWWW//GFDAS/SHG/F/D/DDG/FDS/SRERERS/SRERERS/SHG/F/D/DDG/FDS/SRERERS/SRERERFFFF/HHHH/GGGG/QQQQ/WWWWWWWWWWWW" +} \ No newline at end of file diff --git a/repo/js/YuanQin/main.js b/repo/js/YuanQin/main.js index 53d2131e..93989c0d 100644 --- a/repo/js/YuanQin/main.js +++ b/repo/js/YuanQin/main.js @@ -1,12 +1,16 @@ /** + * 谱子说明:/为节拍线,每两个/之间为一拍,每个字符占1/4拍,小括号( )内视为一个整体,一起按下,中括号【 】内从左到右依次快速演奏。 * @author 阿城同学 + * @link https://github.com/shilic */ // 所有的代码必须由 async function 包裹 (async function () { log.info("[{YuanQin}]正在启动", "原琴"); /* ------------------------------------------------------1. 数据结构区, 以下代码用于预定义数据结构-------------------------------------------------- */ - /** 乐谱文件,后期可以优化,将该文件放到 settings.json 文件中进行配置。 */ // assets/JOJO黄金之风.json - let scoreFilePath = "assets/孤勇者.json"; + // 从配置中获取你选择的乐谱 + let selectValue = settings.selectValue; + //log.info("selectValue:{options}",selectValue); + let scoreFilePath = `assets/${selectValue}.json`; /** 定义分割类型枚举 */ const SplitTypeEnum = { /** 括号分割 */ @@ -18,12 +22,14 @@ }; /** 定义音符类型枚举 */ const ToneTypeEnum = { - /** 该音符表示一个长停顿,例如某段歌曲中的间隔 (就是换气,谁TM 唱歌不换气啊) */ + /** 该音符表示一个长停顿,例如某段歌曲中的间隔 (就是换气,谁TM 唱歌不换气啊)。文件中用 / 表示 */ LongPause : 0, /** 该音符表示一个单音符(简简单单) */ Single : 1, - /** 该音符表示一个多音符,即多个音符同时按下(原琴玩家表示办不到啊,只有用脚本了) */ + /** 该音符表示一个多音符,即多个音符同时按下(原琴玩家表示办不到啊,只有用脚本了) ,如 (QA) 表示这两个同时按下 */ Multi : 2, + /** 一个短间隔,在文件中用 <> 表示 ,表示左右两个字符需要快速弹奏。 */ + ShortInterval : 3, }; /** 音符对象模型 */ var ToneObject = { @@ -34,6 +40,8 @@ var MusicScoreObject = { /** 乐谱名称 */ name : "" , + /** 一个短间隔(单位:毫秒)。在文件中用 <> 表示 ,表示左右两个字符需要快速弹奏。 */ + shortMills : 80, /** 暂停间隔 (单位:毫秒)。当你按下一个音符时,需要暂停这么多毫秒的时间再按下一个音符(废话,难道你一直按啊)*/ pauseMills : 200 , /** 长间隔 (单位:毫秒)。表示一个长停顿,例如某段歌曲中的间隔 。(就是换气,谁TM 唱歌不换气啊)*/ @@ -46,19 +54,23 @@ toneList : [] , }; /* ----------------------------------------------------2. 执行区域 ,以下代码用于正式执行操作------------------------------------------------------ */ - /** 乐谱对象 */ + /** 乐谱对象 + * @class MusicScoreObject + */ let musicScore = await getMusicScoreFromFile(scoreFilePath); // 使用 await 来等待函数执行完毕。获取乐谱 - //await printMusicScore(musicScore); //打印一个乐谱的基本信息 + ////await printMusicScore(musicScore); //打印一个乐谱的基本信息 let ifParse = await parseScore(musicScore); // 解析乐谱 if(ifParse){ log.info("音符解析成功,尝试播放《{name}》",musicScore.name); - await printTones(musicScore); // 打印解析后的音符列表 + //await printTones(musicScore); // 打印解析后的音符列表 await sleep(3000); await playMusic(musicScore); } else{ log.error("音符解析失败"); } + + //await regexTest2(); /* ---------------------------------------------------3. 方法区 , 以下代码用于定义方法------------------------------------------------------------*/ /** * 从文件中读取一个乐谱 @@ -72,7 +84,7 @@ try { fileContent = file.readTextSync(scorePath); // 同步阻塞式的将乐谱从文件中读取。 //log.info("{fileContent}",fileContent); // 用于测试读取文件,测试成功 - log.info("[{y}]读取乐谱文件《{scorePath}》成功","原琴",scorePath); + //log.info("[{y}]读取乐谱文件《{scorePath}》成功","原琴",scorePath); } catch (error) { log.error("[{y}]在读取文件 《{scorePath}》时,发生错误","原琴",scorePath); return null ; @@ -82,33 +94,43 @@ return null ; } // 一些正则表达式,用于解析你的乐谱文件 - const scoreNameRegex = /"\s*name\s*"\s*:\s*"\s*(?[^"\s]+)\s*"\s*,/; + const scoreNameRegex = /"\s*name\s*"\s*:\s*"\s*(?[^"]+)\s*"\s*,/; + const scoreShortRegex = /"\s*short\s*"\s*:\s*"?\s*(?\d+)\s*"?\s*,/; const scorePauseRegex = /"\s*pause\s*"\s*:\s*"?\s*(?\d+)\s*"?\s*,/; const scoreLongPauseRegex = /"\s*longPause\s*"\s*:\s*"?\s*(?\d+)\s*"?\s*,/; const scoreSplitRegex = /"\s*split\s*"\s*:\s*"\s*(?[^"\s]+)\s*"\s*,/; const scoreTonesRegex = /"\s*toneStr\s*"\s*:\s*"\s*(?[^"]+)\s*"\s*,?/; // 执行正则表达式 匹配操作 const scoreNameMatch = scoreNameRegex.exec(fileContent); + const scoreShortMatch = scoreShortRegex.exec(fileContent); const scorePauseMatch = scorePauseRegex.exec(fileContent); const scoreLongPauseMatch = scoreLongPauseRegex.exec(fileContent); const scoreSplitMatch = scoreSplitRegex.exec(fileContent); const scoreTonesMatch = scoreTonesRegex.exec(fileContent); - if(scoreNameMatch.groups.scoreName != null) { // 可能会出现无法捕获的情况,例如用户没有填这个字段。给代码增加容错性。 + // 得到匹配结果 + // 可能会出现无法捕获的情况,例如用户没有填这个字段。给代码增加容错性。 + // 使用 try-catch 语句,替换了原来的空值判断,看来java的正则表达式和js还是不太一样,java是可以直接获取,但是可能为空,而js是直接报错。 + try { musicScore.name = scoreNameMatch.groups.scoreName; + } catch (error) { + log.error("未识别到乐曲名称"); } - if(scorePauseMatch.groups.scorePause != null) { - let value = parseInt(scorePauseMatch.groups.scorePause); - musicScore.pauseMills = value; + try { + musicScore.shortMills = parseInt(scoreShortMatch.groups.scoreShort) ; + } catch (error) { + log.error("未识别到短间隔"); } - if(scoreLongPauseMatch.groups.scoreLongPause != null){ - let str = scoreLongPauseMatch.groups.scoreLongPause; - //log.debug("长间隔 String = {m}",str); - let value = parseInt(str); - //log.debug("长间隔 int = {v}",value); - musicScore.longPauseMills = value; + try { + musicScore.pauseMills = parseInt(scorePauseMatch.groups.scorePause); + } catch (error) { + log.error("未识别到普通间隔"); } - if(scoreSplitMatch.groups.scoreSplit != null){ // 分割类型 ,如 括号 - //log.debug("开始识别 分割类型"); + try { + musicScore.longPauseMills = parseInt(scoreLongPauseMatch.groups.scoreLongPause); + } catch (error) { + log.error("未识别到长间隔"); + } + try { let value = scoreSplitMatch.groups.scoreSplit; if(value === "括号"){ musicScore.split = SplitTypeEnum.Bracket ; @@ -117,10 +139,13 @@ }else{ musicScore.split = SplitTypeEnum.Bracket ; } + } catch (error) { + log.error("未识别到分割类型"); } - if(scoreTonesMatch.groups.scoreTones != null){ - //log.debug("开始识别 音符"); + try { musicScore.toneStr = scoreTonesMatch.groups.scoreTones; + } catch (error) { + log.error("未识别到乐谱"); } return musicScore; } //getMusicScoreFromFile 从文件中读取一个乐谱 @@ -148,8 +173,8 @@ async function parseTones(tonesString ,splitType) { let toneList = [] ; //预定义返回值 /** 括号分割模式下,用于识别音符的正则表达式 /g 表示全局匹配*/ - // /([(]\s*(?[A-Za-z]{2,})\s*[)])|(?[a-zA-Z])/g - const BracketRegex =/([(]\s*(?[A-Za-z]{2,})\s*[)])|(?[a-zA-Z])|(?[+])/g ; + // /([(]\s*(?[A-Za-z]{2,})\s*[)])|(?[a-zA-Z])|(?[/])/g + const BracketRegex =/([(]\s*(?[A-Za-z]{2,})\s*[)])|(?[a-zA-Z])|(?[/|])|(?[<\[\{]\s*(?[A-Za-z]{2,})\s*[\}>\]])/g ; // 由 + 号表示长间隔,改为了由 / 表示 let regex = null; if(splitType == SplitTypeEnum.Bracket){ // 括号分割 regex = BracketRegex; @@ -168,6 +193,7 @@ let tone = Object.create(ToneObject); // 通过原型创建一个音符对象 tone.tones = [] ; let value ; + if(match.groups.multi != null){ //log.debug("{m}",match[1]); tone.toneType = ToneTypeEnum.Multi ; @@ -176,12 +202,14 @@ for (const element of charArray) { tone.tones.push(element); } + //log.debug("multi ={m}",value); } if(match.groups.single != null){ tone.toneType = ToneTypeEnum.Single ; value = match.groups.single ; // 如 B //tone.tones.push(value); tone.tones = value ; + //log.debug("single ={m}",value); } if(match.groups.LongPause != null){ tone.toneType = ToneTypeEnum.LongPause ; @@ -192,6 +220,19 @@ // } tone.tones = value ; } + if(match.groups.shortPause != null){ + tone.toneType = ToneTypeEnum.ShortInterval ; + //let shortPauseValue = match.groups.shortPause ; // + let value = match.groups.item ; // JHHKJ + const charArray = Array.from(value); + for (const element of charArray) { + tone.tones.push(element); + } + //log.info("快速弹奏的音符:{m}",shortPauseValue); + } + // else{ + // log.info("未识别到快速弹奏的音符{m}",match.groups.shortPause); + // } toneList.push(tone); // //log.debug("{m}",value); //toneArray.push(value); @@ -212,9 +253,9 @@ let tones = toneObject.tones; switch(type){ case ToneTypeEnum.Multi: - toneStr = toneStr + "[" ; + toneStr = toneStr + "(" ; toneStr = toneStr + tones; - toneStr = toneStr + "]" ; + toneStr = toneStr + ")" ; toneStr = toneStr + " "; break; case ToneTypeEnum.Single: @@ -225,52 +266,53 @@ toneStr = toneStr + tones; toneStr = toneStr + " "; break; + case ToneTypeEnum.ShortInterval: + toneStr = toneStr + "<" ; + toneStr = toneStr + tones; + toneStr = toneStr + ">" ; + toneStr = toneStr + " "; + break; default: break; } } // 遍历所有音符 log.info("{m}",toneStr); } // 打印解析后的音符列表 - /** - * 打印解析后的乐谱的基本信息 - * @param {MusicScoreObject} musicScore - */ - async function printMusicScore(musicScore) { - log.debug("22尝试输出捕获到的乐谱名称:{m}",musicScore.name); // 例如输出:[scoreName,黄金之风],或输出: 黄金之风 - log.debug("尝试输出捕获到的乐谱暂停间隔:{m}",musicScore.pauseMills); - log.debug("尝试输出捕获到的乐谱长间隔:{m}",musicScore.longPauseMills); - log.debug("尝试输出捕获到的分割类型:{m}",musicScore.split); - //log.debug("尝试输出捕获到的音符列表:{m}",musicScore.toneStr); - } //打印一个乐谱 /** * 执行播放操作 * @param {MusicScoreObject} musicScore */ async function playMusic(musicScore) { let mills = musicScore.pauseMills ; + let shortMills = musicScore.shortMills; let longPause = musicScore.longPauseMills ; let toneList = musicScore.toneList; for(const toneObject of toneList) { // 遍历所有音符 let type = toneObject.toneType; let tones = toneObject.tones; - // 1. 按下按键,并松开 + // 1. 按下按键,并松开 switch(type){ case ToneTypeEnum.Multi: - playSingle(tones); + await playMulti(tones); await sleep(mills); break; case ToneTypeEnum.Single: - playMulti(tones); + await playSingle(tones); await sleep(mills); break; case ToneTypeEnum.LongPause: await sleep(longPause); break; + case ToneTypeEnum.ShortInterval: + for(const item of tones){ + await playSingle(item); + await sleep(shortMills) ; + } + break; default: break; } // 2. 间隔一定时间 - } // 遍历所有音符 } //执行播放操作 /** @@ -296,23 +338,14 @@ keyUp(key); } } // 模拟多个按键同时按下 + async function regexTest2(params) { + let regex = /((?[A-Za-z])~?)/g; + let match; + let input = "J~H~J~W~K"; + while(match = regex.exec(input)){ + log.info("音符{m}",match.groups.item); + //log.info("音符{m}",match[1]); + } //while + } - /** 这段代码用于测试正则表达捕获组的输出 - */ - async function testRegex() { - let str = '{systemName=系统1, systemId=1001} , {systemName=系统2,systemId=1002} , {systemName=系统3, systemId=1003}'; - let reg = /systemName=(.*?),/g; - // str .match(reg); - // reg.exec(str ) - let result = ""; - while(result = reg.exec(str)) { - log.info(result[1]); - } - } - /** 这段代码用于测试播放效果 */ - async function playTest() { - await sleep(1000); - let array = ["E","H","N"]; - playMulti(array); - } })();// 所有的代码必须由 async function 包裹 \ No newline at end of file diff --git a/repo/js/YuanQin/manifest.json b/repo/js/YuanQin/manifest.json index 41b6da01..d6705f81 100644 --- a/repo/js/YuanQin/manifest.json +++ b/repo/js/YuanQin/manifest.json @@ -9,5 +9,6 @@ "link": "https://github.com/shilic" } ], + "settings_ui": "settings.json", "main": "main.js" } \ No newline at end of file diff --git a/repo/js/YuanQin/settings.json b/repo/js/YuanQin/settings.json new file mode 100644 index 00000000..e145e9b9 --- /dev/null +++ b/repo/js/YuanQin/settings.json @@ -0,0 +1,23 @@ +[ + { + "name": "selectValue", // 变量名,在js内使用 settings.变量名 获取对应的配置值 + "type": "select", // 类型 + "label": "曲库", // 显示标签 + "options": [ //选项 + "赤伶", + "孤勇者", + "孤勇者2", + "牵丝戏", + "牵丝戏2", + "花之舞", + "声嘶力竭", + "JOJO黄金处刑曲", + "JOJO黄金之风", + "JOJO黄金之风2", + "黑人抬棺", + "溯", + "One last kiss" + ] + } +] + \ No newline at end of file