1. 调教了琴谱,现在可以识别更多乐谱。

2.增加了更多乐谱
3.增加了调度器配置,现在可以在调度器中调用设置
This commit is contained in:
石李城
2024-12-29 14:10:37 +08:00
parent 1dfb1fe698
commit f06985104c
17 changed files with 726 additions and 64 deletions

View File

View File

@@ -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"
}

View File

@@ -0,0 +1,8 @@
{
"name":"JOJO黄金之风2",
"short" :90,
"pause":200,
"longPause":200,
"split":"括号",
"toneStr":"J J <JH> J W J <FH> J J <JH> J R E <WH> J J <JH> J W J <FH> J J <JHJ> R E <WH> J J <JH> J W J <FHJ> J <JH> J R E <WH> J J <JHJ> W J <FH> J J J <HJ> // H QW E // Q // <QWE> / W / Q J Q W E // Y // H J Q W / Q J T R (QE) // (HQ) // <QW> (JE) / W / Q (GJ) / Q / W (HE) // (EY) // H J (HQ) / W / R E / Q W (QE) // (HQ) // <QW> (HE) / W Q (FJ) / Q W (QE) // (EY) // H <JQ> / 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"
}

View File

@@ -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) |
"
}

View File

@@ -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) /
"
}

View File

@@ -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 / /
<BXBNSDGH> /<WWETYN>
<YHYHYHYH> /<YHYHYHY> /
(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 /
"
}

View File

@@ -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"
}

View File

@@ -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
/
"
}

View File

@@ -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"
}

View File

@@ -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)"
}

View File

@@ -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 /
"
}

View File

@@ -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 /
"
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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*(?<scoreName>[^"\s]+)\s*"\s*,/;
const scoreNameRegex = /"\s*name\s*"\s*:\s*"\s*(?<scoreName>[^"]+)\s*"\s*,/;
const scoreShortRegex = /"\s*short\s*"\s*:\s*"?\s*(?<scoreShort>\d+)\s*"?\s*,/;
const scorePauseRegex = /"\s*pause\s*"\s*:\s*"?\s*(?<scorePause>\d+)\s*"?\s*,/;
const scoreLongPauseRegex = /"\s*longPause\s*"\s*:\s*"?\s*(?<scoreLongPause>\d+)\s*"?\s*,/;
const scoreSplitRegex = /"\s*split\s*"\s*:\s*"\s*(?<scoreSplit>[^"\s]+)\s*"\s*,/;
const scoreTonesRegex = /"\s*toneStr\s*"\s*:\s*"\s*(?<scoreTones>[^"]+)\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*(?<multi>[A-Za-z]{2,})\s*[)])|(?<single>[a-zA-Z])/g
const BracketRegex =/([(]\s*(?<multi>[A-Za-z]{2,})\s*[)])|(?<single>[a-zA-Z])|(?<LongPause>[+])/g ;
// /([(]\s*(?<multi>[A-Za-z]{2,})\s*[)])|(?<single>[a-zA-Z])|(?<LongPause>[/])/g
const BracketRegex =/([(]\s*(?<multi>[A-Za-z]{2,})\s*[)])|(?<single>[a-zA-Z])|(?<LongPause>[/|])|(?<shortPause>[<\[\{]\s*(?<item>[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 ; // <JHHKJ>
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,29 +266,25 @@
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) { // 遍历所有音符
@@ -256,21 +293,26 @@
// 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 = /((?<item>[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 包裹

View File

@@ -9,5 +9,6 @@
"link": "https://github.com/shilic"
}
],
"settings_ui": "settings.json",
"main": "main.js"
}

View File

@@ -0,0 +1,23 @@
[
{
"name": "selectValue", // 变量名在js内使用 settings.变量名 获取对应的配置值
"type": "select", // 类型
"label": "曲库", // 显示标签
"options": [ //选项
"赤伶",
"孤勇者",
"孤勇者2",
"牵丝戏",
"牵丝戏2",
"花之舞",
"声嘶力竭",
"JOJO黄金处刑曲",
"JOJO黄金之风",
"JOJO黄金之风2",
"黑人抬棺",
"溯",
"One last kiss"
]
}
]