mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-03-19 03:59:51 +08:00
@@ -1,18 +1,4 @@
|
||||
# 原琴 - AutoYuanQin
|
||||
- [播放演奏脚本](#播放演奏脚本)
|
||||
- [上传至仓库](#上传至仓库)
|
||||
- [本地播放](#本地播放)
|
||||
- [MIDI翻谱器](#MIDI翻谱器)
|
||||
- [五线谱翻谱器](#五线谱翻谱器)
|
||||
- [曲谱制作解答](#曲谱制作解答)
|
||||
- [曲谱文件位置](#曲谱文件位置)
|
||||
- [文件结构](#文件结构)
|
||||
- [字段说明](#字段说明)
|
||||
- [文本格式](#文本格式)
|
||||
- [代码美化](#代码美化)
|
||||
- [Notes 解析规则](#解析规则)
|
||||
- [音符格式](#音符格式)
|
||||
- [更新日志](#更新日志)
|
||||
|
||||
## 播放演奏脚本
|
||||
1. 在全自动 - 调度器中 新建配置组/选择已有的组 将*AutoYuanQin*添加至配置组中
|
||||
@@ -23,20 +9,18 @@
|
||||
- 现在有更自动化的`AutoYuanQin/tools/MIDI翻谱器.html`提供自动的MIDI文件转*AutoYuanQin*格式的乐谱
|
||||
- `AutoYuanQin/assets/tutorial_file`目录下有文档供曲谱制作人阅读
|
||||
- 本文档下文会详细说明一个标准格式的曲谱.json文件格式, 包括各个字段的解释以及曲谱内容的格式要求
|
||||
- 即使将你制作的曲谱的JSON文件置于正确的路径也无法在调度器的JS脚本配置里出现你制作的曲谱, 需要上传至仓库
|
||||
- 将你制作的曲谱的JSON文件置于正确的路径运行脚本时会自动重置settings并退出脚本
|
||||
- 如果你愿意慷慨的将自己的乐曲上传至仓库我们会很满足
|
||||
|
||||
### 上传至仓库
|
||||
1. 上传到BetterGI脚本仓库的[路径](https://github.com/babalae/bettergi-scripts-list/tree/main/repo/js/AutoYuanQin/assets)下, 根据已存在的曲谱在你的文件名前添加序号`例如 10.曲名.json`, 完成后请联系BetterGI v7群主更新JS脚本
|
||||
1. 联系BetterGI v7(1029539994)群主帮你更新到仓库
|
||||
1. 发送邮件到*hijiwos@hotmail.com*并说明, 你的谱子将会在一段时间内更新到仓库
|
||||
|
||||
### 本地播放
|
||||
1. 如果你暂时不将乐谱上传至仓库, 那么你可以在"单曲名称"中将你置于`AutoYuanQin/assets`下的乐谱名称输入, 此自定义配置的优先级高于单曲选择
|
||||
|
||||
## MIDI翻谱器 <a id="MIDI翻谱器"></a>
|
||||
1. 翻谱器位于`AutoYuanQin/tools/MIDI翻谱器.html`,请使用浏览器打开
|
||||
1. 点击选择文件, 将你想要转换的MIDI文件放入, 网页将自动开启转换
|
||||
1. 完成转换后点击"导出Json"后可将文件转移至`AutoYuanQin/assets`目录下使用[本地播放](#本地播放)
|
||||
1. 完成转换后点击"导出Json"后可将文件转移至`AutoYuanQin/assets/score_file`目录下使用
|
||||
1. **请不要在不了解文件结构的情况下手动修改JSON文件中的信息**
|
||||
|
||||
## 五线谱翻谱器
|
||||
@@ -62,7 +46,7 @@
|
||||
1. 有不懂的地方请在 `/assets/tutorial_file/example.json` 内找, 这个谱子内包含了该脚本的五线谱相关的所有功能
|
||||
|
||||
## 曲谱文件位置
|
||||
1. 所有的曲谱文件应放置于 `AutoYuanQin/assets` 路径下
|
||||
1. 所有的曲谱文件应放置于 `AutoYuanQin/assets/score_file` 路径下
|
||||
|
||||
## 文件结构
|
||||
一个标准的曲谱.json文件的基本结构如下:
|
||||
@@ -261,6 +245,12 @@ notes 字段中包含的是乐谱内容音符**必须**使用**大写字母**,
|
||||
由于更新日志于3.0开始记录, 往期更新内容应该都在git的记录中, 不过我懒得翻了
|
||||
|
||||
- ver 3.1.1
|
||||
1. 修复了music_queue字段的自动查找
|
||||
1. 修改了README.md使其更合理
|
||||
1. 在settings中提供了调试选项便于查看乐谱演奏信息
|
||||
1. 新增了一些乐谱
|
||||
|
||||
- ver 3.1.0
|
||||
1. 新增了解析基于字符串的按键序列的函数
|
||||
1. 新增了执行上述函数序列化按键信息的函数
|
||||
1. 初步完成了以上函数与原项目代码的适配
|
||||
|
||||
10
repo/js/AutoYuanQin/assets/score_file/0012.悠可琴千本樱.json
Normal file
10
repo/js/AutoYuanQin/assets/score_file/0012.悠可琴千本樱.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"name": "悠可琴千本樱",
|
||||
"author": "半江残秋",
|
||||
"type": "keyboard",
|
||||
"instrument": "悠可琴",
|
||||
"arranger": "原琴玩家伊蕾娜",
|
||||
"description": "BV1XZ6XYLEJp 按键序列待修",
|
||||
"bpm": 500,
|
||||
"notes": "(NY) (NY)/ (BT) /(NY) (NY)/ (BT) /(NY) (NY)/ (BT) /(NY) Y/A Y /(NY) (NY)/ (BT) /(NY) (NY)/ (BT) /(NY) /(DY) /(ST) /(DT) /(SR) D /(NR)BNB/(ST) D /(NT)BNB/(SY) D /(NY)BNB/(AY) MA/M(NY) B /(SR) D/ (NR)BN/B(ST) D/ (NT)BN/B(SY) D/ (GY) A/ (MY)AM/N(BY) D /(SR) D/ (NR)BN/B(ST) D/ (NT)BN/B(SY) D/ (NY)BN/B(AY) M/AM(NY) /B (NR) /BN(AR) /NA(ST) /SD(GT)A/DG(AY) /JAJ(HY)/ G (HY)/ (NY) /A (SR)/ D (NR)/BNB(ST)/ D (NT)/BNB(SY)/ D (NY)/BNB(AY)/ MAM/(NY) B /(SR) D /(NR)BNB/(ST) D /(NT)BNB/(SY) D /(GY) A /(MY)AMN/(BY) D /(SR) D /(NR)BNB/(ST) D /(NT)BNB/(SY) D /(NY)BNB/(AY) MA/M(NY) B/ (SR) D/G(HR)GD/S(NT) A /(ST) D/ (NY) /NY B/ (NY) /Y / (NY) / (NY) /B(NY) A /(AY) S/ (NR) / (NR) /B(NT) B /(CT) B/ (NY) / (NY) /B(NY) A /(SY) D/ (DR) / (SR) D/ S (AT) /(NT)/ (NY)/ (NY)/ B(NY) /A (AY)/ S (NR)/ (NR)/ B(NT) /B (BT)/ C (NY)/ (NY)/ B(BY) /N (AY)/ S (DR)/ (SR)/ D S /(AT) / (NT) / (AR) / (MR) /(NR) / (BR) / (BQ) B/N(CQ) X /(CQ) / Q / (CR) B/ (NR) /(ST) / (MT) / (AY) / (MY) B /(NY) / Y / (AR) / (MR) /(NR) / (BR) / (BQ) B/N(CQ) X /(CQ) / (CQ) B/ (NR) N/ R N /(AT) / (ST) / (ME) / E E /E / N A/ (SY) /SY D /(DR) / R D/ (GT) H/ (ST) A /(DQ) / (NQ) A/ (SY) /SY D /(DR) / R D/ (FT) D/ (ST) A /(AQ) / (NQ) A/ (SY) /SY D /(DR) / R D/ (GT) H/ (ST) A /(DQ) / (NQ) A/ (FR) / (DR) /(ST) / (AT) / (SR) D/ (MR) B /(NY) / N A/ (SY) /SY D /(DR) / R D/ (GT) H/ (ST) A /(DQ) / (NQ) A/ (SY) /SY D /(DR) / R D/ (FT) (DW)/ (ST) (AW) /(AQ) / (NQ) A/ (SY) /SY D /(DR) / R D/ (GT) H/ (ST) A /(DQ) / (NQ) A/ (FR) / (DR) /(ST) / (AT) / (SR) A/ (DR) G /(HY)/"
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"name": "Counting Stars",
|
||||
"author": "半江残秋",
|
||||
"type": "keyboard",
|
||||
"instrument": "风物之诗琴",
|
||||
"arranger": "指尖灬旋律丿",
|
||||
"description": "BV1X8mKYYENw 有小问题",
|
||||
"bpm": 460,
|
||||
"notes": "(NW) C /(AE) C /(NT) A /(DE)WA /(ZW) (BE) /(AW)QBE /Z B /D Z /B (SW) /(GW) (SE)R/B (SE) /(GW) (SQ) /(VE) A /(FH) A /(VQ) A /F (AH) /(NW) C /(AE) C /(NT) A /(DE)WA /(ZW) (BE) /(AW)QBE /Z B /D Z /B (SW) /(GW) (SE) /(BR) (SE) /(GW)QS /(VE) (AW) /(FW) (AH) /(VQ) A /F A /V A /F (AH) /(VE) (AW) /(FW) (AQ) / / Q /H / /(CNADH) N /(CN) N /(CN) N /(CN) N /(BADGQ) A /(BA) A /(BA) A /(BA) A /(XBSGJ) B /(XB) B /(XB) B /(XB) B /(ZVAFH) V /(ZV) V /(ZV) V /(ZV) V /(CNQE) N /(CN) N /(CN) N /(CNGT) N(DE)/(BASW) A /(BA) A /(BA) A /(BAGT) A(DE)/(XBSW) B /(XB) B /(XB) B /(XBGT) B(DE)/(ZVSW) V /(ZV) V /(ZVDE) (VE) /(ZVE) (VE)E/(NE) C /A (CE)E/(NE)EAE /D A /(ZE) (BE) /(AE) BE/(ZT) (BT)W/D Z /(BE) (SW) /(GQ) (SH) /(BE) (SW) /(GQ)WS /V (AE)W/(FQ) (AH) /(VE) (AW) /(FQ)WA /(NE) C /A (CE)E/(NE) (AE) /(DE) A /(ZE) B /A (BE)E/(ZE) (BE) /(DE) Z /(BE) (SW) /(GQ) (SH) /(BE) (SW) /(GQ)WS /VH(AE)W/(FQ) (AH) /(VE) (AW) /(FQ)WA /N C /(AH) CG/(NH) (CQ) /(DY) (CT) /Z B /(AW) B /(ZQ) (BW) /(DE) Z /(BW) X /S X /(BJ) (SH) /(GJ) (SQ) /(VJ) (ZH) N ZG/(VH)G(ZD) /A Z /N C /(AH) CG/(NH) (CQ) /(DY) (CT) /Z B /(AW) B /(ZQ) (BW) /(DE) Z /(BW) X /S X /(BJ) (SH) /(GJ) (SQ) /(VJ) (ZH) N ZG/(VH)G(ZD) /A Z /V (ZD) /(NH) ZG/(VH) Z /(AH) ZG/(VH) Z /(NH) ZG/(VH) (ZG) /A Z /(ZVH) /G S /A S /D S A /N BN/(CNW) C /(NE) C /(CNT) C /(AE)WC /(ZBW) (BE) /(AW)QBE /(ZB) B /D Z /(XB) (XW) /(SW) (XE)R/(XB) (SE) /(GW) (SQ) /(ZVE) N /(AH) N /(ZVQ) Z /A (ZH) /(CNW) C /(NE) C /(CNT) C /(AE)WC /(ZBW) (BE) /(AW)QBE /(ZB) B /D Z /(XB) (XW) /(SW) (XE) /(XBR) (SE) /(GW)QS /(ZVE) (NW) /(AW) (NH) /(ZVQ) Z /A Z /(CNW) C /(NE) C /(CNT) C /(AE)WC /(ZBW) (BE) /(AW)QBE /(ZB) B /D Z /(XB) (XW) /(SW) (XE)R/(XB) (SE) /(GW) (SQ) /(ZVE) N /(AH) N /(ZVQ) Z /A (ZH) /(CNW) C /(NE) C /(CNT) C /(AE)WC /(ZBW) (BE) /(AW)QBE /(ZB) B /D Z /(XB) (XW) /(SW) (XE) /(XBR) (SE) /(GW)QS /(ZVE) (NW) /(AW) N /(ZVE) (ZW) /(AW) (ZQ) /(CNQE) (CH) /N C /N C /(AGT) C(DE)/(ZBSW) B /A B /Z B /(DGT) Z(DE)/(XBSW) X /S X /B X /(SGT) X(DE)/(ZVSW) N /A N /(VDE) (ZE) /(NE) (ZE) /(NE) C /A (DE)E/EE E /N /(ZE) (BE) /(AE)ED /T TW/Z /(BE) (XW) /(SQ) (XH) /EW /(BW) /E W /QH /E (ZVW) /(ZVQ)W /(NE) C /A (CE)E/(NE) (AE) /(DE) A /(ZE) B /A (BE)E/(ZE) (BE) /(DE) Z /(BE) (SW) /(GQ) (SH) /(BE) (SW) /(GQ)WS /VH(AE)W/(FQ) (AH) /(VE) (AW) /(FQ)WA /(CN) A /(DH) AG/(NH) (AQ) /(DY) (AT) /(ZB) A /(DW) A /(ZQ) (BW) /(DE) Z /(XBW) S /G S /(BJ) (SH) /(GJ) (SQ) /(ZVJ) (NH) /A NG/(VH)G(ZD) /N Z /V (ZD) /(NH) ZG/(VH) Z /(AH) ZG/(VH) Z /(NH) ZG/(VH) (ZG) /A Z /(ZVH) /G S /A S /D S A /N BN/(CNW) C /(NE) C /(CNT) C /(AE)WC /(ZBW) (BE) /(AW)QBE /(ZB) B /D Z /(XB) (XW) /(SW) (XE)R/(XB) (SE) /(GW) (SQ) /(ZVE) N /(AH) N /(ZVQ) Z /A (ZH) /(CNW) C /(NE) C /(CNT) C /(AE)WC /(ZBW) (BE) /(AW)QBE /(ZB) B /D Z /(XB) (XW) /(SW) (XE) /(XBR) (SE) /(GW)QS /(ZVE) (NW) /(AW) (NH) /(ZVQ) Z /A Z /(CNW) C /(NE) C /(CNT) C /(AE)WC /(ZBW) (BE) /(AW)QBE /(ZB) B /D Z /(XB) (XW) /(SW) (XE)R/(XB) (SE) /(GW) (SQ) /(ZVE) N /(AH) N /(ZVQ) Z /A (ZH) /(CNW) C /(NE) C /(CNT) C /(AE)WC /(ZBW) (BE) /(AW)QBE /(ZB) B /D Z /(XB) (XW) /(SW) (XE) /(XBR) (SE) /(GW)QS /(ZVE) (NW) /(AW) N /(ZVE) (ZW) /(AW) (ZQ) /(CNQ) H /(NA) / /(NA) / /(NA) HG/D G /(NAH) /Q J /H GQ/ J H/ Q / JJ/HHGQ / QJ /H /(HQ) (GJ) /(DH) (DG)(HQ)/ (GJ) (DH)/ (HQ) / (GJ)(GJ)/(DH)(DH)(DG)(HQ)/ (HQ)(GJ) /(DH) /(CNQ) J /H GQ/(CN)J H/ Q /(CN) JJ/HHGQ/(CN)QJ /H /(CNQ) J /(CNH) GQ/(CN)J H/(CN) Q /(CN) JJ/(CNH)HGQ/(CN)Q(CNJ) /(CNH) (CN) /(XNH) /G S /A (CMS) /D / / / /S A /N BN/ (CNW) C /(NE) C /(CNT) C /(AE)WC /(ZBW) (BE) /(AW)QBE /(ZB) B /D Z /(XB) (XW) /(SW) (XE)R/(XB) (SE) /(GW) (SQ) /(ZVE) N /(AH) N /(ZVQ) Z /A (ZH) /(CNW) C /(NE) C /(CNT) C /(AE)WC /(ZBW) (BE) /(AW)QBE /(ZB) B /D Z /(XB) (XW) /(SW) (XE) /(XBR) (SE) /(GW)QS /(ZVE) (NW) /(AW) (NH) /(ZVQ) Z /A Z /(CNW) C /(NE) C /(CNT) C /(AE)WC /(ZBW) (BE) /(AW)QBE /(ZB) B /D Z /(XB) (XW) /(SW) (XE)R/(XB) (SE) /(GW) (SQ) /(ZVE) N /(AH) N /(ZVQ) Z /A (ZH) /(CNW) C /(NE) C /(CNT) C /(AE)WC /(ZBW) (BE) /(AW)QBE /(ZB) B /D Z /(XB) (XW) /(SW) (XE) /(XBR) (SE) /(GW)QS /(ZVE) (NW) /(AW) N /(ZVE) (ZW) /(AW) (ZQ) /(CNQ) (CJ) /(NH) (CG)Q/(CN)JCH/A (CQ) /(ZB) (BJ)J/(AH)H(BG)Q/(ZB)Q(BJ) /(DH) Z /(XBQ) (XJ) /(SH) (XG)Q/(XB)JXH/S (XQ) /(ZV) (NJ)J/(AH)H(NG)Q/(ZV)Q(ZJ) /(AH) Z /(CNQ) (CJ) /(NH) (CG)Q/(CN)JCH/A (CQ) /(ZB) (BJ)J/(AH)H(BG)Q/(ZB)Q(BJ) /(DH) Z /(XBQ) (XJ) /(SH) (XG)Q/(XB)JXH/S (XQ) / JJ/HHGQ/ QJ /H /"
|
||||
}
|
||||
10
repo/js/AutoYuanQin/assets/score_file/0014.Bad Apple.json
Normal file
10
repo/js/AutoYuanQin/assets/score_file/0014.Bad Apple.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"name": "Bad Apple",
|
||||
"author": "半江残秋",
|
||||
"type": "keyboard",
|
||||
"instrument": "风物之诗琴",
|
||||
"arranger": "指尖灬旋律丿",
|
||||
"description": "BV1H341167jP",
|
||||
"bpm": 350,
|
||||
"notes": "C C C [{C}{C}{C}{C}{C}] C C CCC C C [CCCCC] C C CCC C C [CCCCC] C C CCC C C [CCCCC] C C CC N CNBN C N CNBNC N CNBN C NA(CS) ASC N CNBN C N CNBNC N CNBN (CS) AS (CA) NAC N CNBN C N CNBNC N CNBN C NA(CS) ASC N CNBN C N CNBNC N CNBN (CN)(CN)(CN) (ND)(ND)(ND)(NH)(DJ)(NQ)(DW)(NE)D (NY)(DT)(NE)D (NH)D (NE)(DW)(NQ)(DJ)(VH)(AJ)(VQ)(AW)(VE)A (VW)(AQ)(BJ)(SH)(BJ)(SQ) (CJ)(MH) C(MJ)(NH)(DJ)(NQ)(DW)(NE)D (NY)(DT)(NE)D (NH)D (NE)(DW)(NQ)(DJ)(VH)(AJ)(VQ)(AW)(VE)A (VW)(AQ)(BJ)S (BQ)S (CW)M (CE)M(NH)(DJ)(NQ)(DW)(NE)D (NY)(DT)(NE)D (NH)D (NE)(DW)(NQ)(DJ)(VH)(AJ)(VQ)(AW)(VE)A (VW)(AQ)(BJ)(SH)(BJ)(SQ) (CJ)(MH) C(MJ)(NH)(DJ)(NQ)(DW)(NE)D (NY)(DT)(NE)D (NH)D (NE)(DW)(NQ)(DJ)(VH)(AJ)(VQ)(AW)(VE)A (VW)(AQ)(BJ)S (BQ)S (CW)M (CE)(MT)(VT)(AY)(VE)(AW)(VE)A (VW)(AE)(BT)(SY)(BE)(SW)(BE)S (BW)(SE)(NW)(DQ)(NJ)(DG)(NH)D (NG)(DH)(BJ)(SQ)(BW)(SE)(BH)S (BE)(ST)(VT)(AY)(VE)(AW)(VE)A (VW)(AE)(BT)(SY)(BE)(SW)(BE)S (BW)(SE)(NW)(DQ)(NJ)(DG)(NH)D (NG)(DH)(BJ)(SQ)(BW)(SE)(BH)S (BE)(ST)(VT)(AY)(VE)(AW)(VE)A (VW)(AE)(BT)(SY)(BE)(SW)(BE)S (BW)(SE)(NW)(DQ)(NJ)(DG)(NH)D (NG)(DH)(BJ)(SQ)(BW)(SE)(BH)S (BE)(ST)(VT)(AY)(VE)(AW)(VE)A (VW)(AE)(BT)(SY)(BE)(SW)(BE)S (BY)(SU)(NQ)(DU)(NY)(DT)(NE)D (NW)(DE)(BW)(SQ)(BJ)(SG)(BH)S (BE)T(VT)Y EWE WE (BT)Y EWE WE(NW)Q JGH GH (BJ)Q WEH ET(VT)Y EWE WE (BT)Y EWE WE(NW)Q JGH GH (BJ)Q WEH ET(VT)Y EWE WE (BT)Y EWE WE(NW)Q JGH GH (BJ)Q WEH ET(VT)Y EWE WE (BT)Y EWE YU(NQ)U YTE WE (BW)Q JGHC N CNBN C N CNBNC N CNBN C NA(CS) ASC N CNBN C N CNBNC N CNBN (CS) AS (CA) NAC N CNBN C N CNBNC N CNBN C NA(CS) ASC N CNBN C N CNBNC N CNBN (CN)(CN)(CN)(CN)"
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
[object Object]
|
||||
@@ -7,6 +7,7 @@
|
||||
QueueMusicOnce: 2, // 队列单次执行
|
||||
QueueMusicRepeat: 3, // 队列循环执行
|
||||
};
|
||||
let DEBUG = false;
|
||||
/**
|
||||
* -------- 工具函数 --------
|
||||
*/
|
||||
@@ -40,6 +41,7 @@
|
||||
* @property {Number} queueInterval - 乐曲队列间隔时间,单位为秒
|
||||
* @property {Number} repeatTimes - 循环执行次数
|
||||
* @property {Number} repeatInterval - 循环间隔时间,单位为秒
|
||||
* @property {Boolean} debug - 是否启用调试模式
|
||||
*
|
||||
*/
|
||||
function get_settings() {
|
||||
@@ -49,7 +51,8 @@
|
||||
musicQueue: [],
|
||||
queueInterval: 0,
|
||||
repeatTimes: 1,
|
||||
repeatInterval: 0
|
||||
repeatInterval: 0,
|
||||
debug: false
|
||||
}
|
||||
|
||||
|
||||
@@ -106,15 +109,19 @@
|
||||
Settings.musicQueue.push((typeof (settings.music_selector) === 'undefined') ? (undefined) : (settings.music_selector));
|
||||
}
|
||||
else {
|
||||
let musicIndex = (typeof (settings.music_queue) === 'undefined') ? (undefined) : (settings.music_queue);
|
||||
musicIndex = Array.from(new Set(musicIndex.split(' ').filter(item => item !== ""))); // 去重
|
||||
let music_queue = (typeof (settings.music_queue) === 'undefined') ? (undefined) : (settings.music_queue);
|
||||
if (music_queue === undefined) throw new Error("队列执行无序号");
|
||||
let musicIndex = Array.from(new Set(music_queue.split(' ').filter(item => item !== ""))); // 去重
|
||||
musicList().forEach(music => {
|
||||
if (music.includes(musicIndex[0])) {
|
||||
Settings.musicQueue.push(music);
|
||||
musicIndex.shift();
|
||||
for (let index = 0; index < musicIndex.length; index += 1) {
|
||||
if (music.includes(musicIndex[index])) {
|
||||
Settings.musicQueue.push(music);
|
||||
musicIndex.splice(index, 1);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
Settings.debug = (typeof (settings.debug) === 'undefined') ? (false) : (settings.debug === "启用");
|
||||
return Settings;
|
||||
|
||||
} catch (error) {
|
||||
@@ -204,6 +211,7 @@
|
||||
|
||||
return MusicInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 执行单音
|
||||
@@ -257,7 +265,7 @@
|
||||
await sleep(Math.floor(time * gap));
|
||||
keyUp(key);
|
||||
}
|
||||
log.info(`总计 ${bar_list.length} 小节, 预计演奏时长 ${bar_list.length * gap * 4 / 1000}秒`);
|
||||
log.info(`总计 ${bar_list.length} 小节, 预计演奏时长 ${(bar_list.length * gap * bar_list[0][0] / 1000).toFixed(2)}秒`);
|
||||
for (let i = 0; i < bar_list.length; i++) {
|
||||
let bar = bar_list[i];
|
||||
let barTime = bar[0];
|
||||
@@ -266,9 +274,12 @@
|
||||
let note = notes[j];
|
||||
notePlay(note, gap); // 启动音符异步函数
|
||||
}
|
||||
await sleep(barTime * gap); // 等待小节结束
|
||||
if (DEBUG) {
|
||||
log.info(`${i} / ${bar_list.length} ${(i / bar_list.length * 100).toFixed(2)}%`)
|
||||
}
|
||||
await sleep(Math.floor(barTime * gap)); // 等待小节结束
|
||||
}
|
||||
await sleep(gap * 8); // 额外等待
|
||||
await sleep(Math.floor(gap * 8)); // 额外等待
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -605,6 +616,7 @@
|
||||
// 如果是midi转换的乐谱
|
||||
if (Object.keys(sheet_list[0]).length === 3) {
|
||||
for (let i = 0; i < sheet_list.length; i++) {
|
||||
log.info(`时长:${sheet_list[i]["time"]}`)
|
||||
await sleep(Math.round(sheet_list[i]["time"]));
|
||||
if (sheet_list[i]["type"] === "on") {
|
||||
keyDown(sheet_list[i]["note"]);
|
||||
@@ -625,7 +637,9 @@
|
||||
// test 需要额外计算装饰音时值的影响
|
||||
for (let i = 0; i < sheet_list.length; i++) {
|
||||
// 显示正在演奏的音符
|
||||
log.info(`${sheet_list[i]["note"]}[${sheet_list[i]["type"]}-${sheet_list[i]["spl"]}]`);
|
||||
if (DEBUG) {
|
||||
log.info(`${sheet_list[i]["note"]}[${sheet_list[i]["type"]}-${sheet_list[i]["spl"]}]`);
|
||||
}
|
||||
if (sheet_list[i]["spl"] === 'none') { // 单音、休止符或和弦
|
||||
if (sheet_list[i]["chord"]) {
|
||||
await play_chord(sheet_list[i]["note"]); // 和弦
|
||||
@@ -718,7 +732,6 @@
|
||||
if (now.getTime() >= targetTimeStamp) return;
|
||||
log.info(`等待至目标时间: ${new Date(targetTimeStamp).toLocaleString()}`);
|
||||
if ((targetTimeStamp - now.getTime()) > 100) {
|
||||
log.info(`${Math.floor((targetTimeStamp - now.getTime()) / 1000)}秒后开始`);
|
||||
await sleep(targetTimeStamp - now.getTime() - 100);
|
||||
}
|
||||
while (Date.now() < targetTimeStamp) {
|
||||
@@ -779,8 +792,8 @@
|
||||
if (!checkSheetFile()) return;
|
||||
|
||||
let settings_msg = get_settings();
|
||||
DEBUG = settings_msg.debug;
|
||||
console.log(`${settings_msg}`)
|
||||
file.writeTextSync("last_settings.json", `${settings_msg}`);
|
||||
|
||||
const music_infos = [];
|
||||
for (const music_name of settings_msg.musicQueue) {
|
||||
@@ -795,26 +808,44 @@
|
||||
|
||||
const alwaysRepeat = ((settings_msg.playType === PlayType.SingleMusicRepeat || settings_msg.playType === PlayType.QueueMusicRepeat) && (settings_msg.repeatTimes === 0));
|
||||
await waitTargetTime(settings_msg.startTime);
|
||||
do {
|
||||
for (const music_info of music_infos) {
|
||||
log.info(`开始演奏: ${music_info.name} - ${music_info.author}`);
|
||||
switch (music_info.type) {
|
||||
case "yuanqin":
|
||||
await play_sheet(music_info.notes, music_info.bpm, music_info.time_signature);
|
||||
break;
|
||||
case "midi":
|
||||
await play_sheet(music_info.notes, music_info.bpm, music_info.time_signature);
|
||||
break;
|
||||
case "keyboard":
|
||||
await listNotePlay(music_info.notes, (60000 / music_info.bpm));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
try {
|
||||
do {
|
||||
for (const music_info of music_infos) {
|
||||
log.info(`开始演奏: ${music_info.name} - ${music_info.author}`);
|
||||
switch (music_info.type) {
|
||||
case "yuanqin":
|
||||
await play_sheet(music_info.notes, music_info.bpm, music_info.time_signature);
|
||||
break;
|
||||
case "midi":
|
||||
await play_sheet(music_info.notes, music_info.bpm, music_info.time_signature);
|
||||
break;
|
||||
case "keyboard":
|
||||
if (DEBUG) {
|
||||
log.info(`乐曲已打印至${music_info.name}.json`)
|
||||
let info = []
|
||||
music_info.notes.forEach((note, index) => {
|
||||
info.push([index, ...note]);
|
||||
});
|
||||
file.writeTextSync(`${music_info.name}.json`, `${JSON.stringify(info)}`);
|
||||
}
|
||||
await listNotePlay(music_info.notes, (60000 / music_info.bpm));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (settings_msg.queueInterval > 0) await sleep(settings_msg.queueInterval * 1000);
|
||||
}
|
||||
if (settings_msg.queueInterval > 0) await sleep(settings_msg.queueInterval * 1000);
|
||||
if (settings_msg.repeatInterval > 0) await sleep(settings_msg.repeatInterval * 1000);
|
||||
} while (alwaysRepeat || --settings_msg.repeatTimes > 0);
|
||||
} catch (error) {
|
||||
if (DEBUG) {
|
||||
log.error(`脚本执行错误 ${error} erron.txt 已打印`)
|
||||
file.writeTextSync("erron.txt", `${error.stack}`);
|
||||
}
|
||||
if (settings_msg.repeatInterval > 0) await sleep(settings_msg.repeatInterval * 1000);
|
||||
} while (alwaysRepeat || --settings_msg.repeatTimes > 0);
|
||||
else {
|
||||
log.error(`脚本执行错误 ${error}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
await main();
|
||||
})();
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "原琴·五线谱版",
|
||||
"version": "3.1.0",
|
||||
"name": "原琴·乐曲转换、自动演奏",
|
||||
"version": "3.1.1",
|
||||
"bgi_version": "0.43.1",
|
||||
"description": "功能描述:功能及其强大的原琴脚本\n核心功能------------------------------>\n1.轻松实现根据五线谱翻版琴谱,支持单音、和弦\n2.曲谱支持录入BPM、拍号\n3.特殊音符支持休止符、浮点音符、(三/六)连音、(三/六)连音标记线、装饰音·倚音\n4.含有制谱器,方便制作曲谱\n注意事项------------------------------>\n1.使用前请装备原琴\n2.音域只有3个八度,受原琴音域限制,本脚本的上限取决于翻谱的大佬(卑微\n3.实际上装饰音·倚音的时长视为基础时值单位(比如拍号2/4的基础时值单位就是4分音符)的1/16\n4.制铺说明:曲谱JSON文件的notes必须保证为一行且不能包括空白符(换行符除外);小节之间用|隔开,|不是必要的,作用是方便曲谱维护\n---------------------------------------->\n作者:提瓦特钓鱼玳师\n脚本反馈邮箱:hijiwos@hotmail.com",
|
||||
"authors": [
|
||||
|
||||
@@ -30,7 +30,10 @@
|
||||
"0008.春よ、来い(春天,来吧)",
|
||||
"0009.One Last Kiss",
|
||||
"0010.卡农(MIDI转谱)",
|
||||
"0011.圆号卡农"
|
||||
"0011.圆号卡农",
|
||||
"0012.悠可琴千本樱",
|
||||
"0013.Counting Stars",
|
||||
"0014.Bad Apple"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -52,5 +55,14 @@
|
||||
"name": "repeat_interval",
|
||||
"type": "input-text",
|
||||
"label": "循环间隔时间(单位:s, 循环模式下生效,默认:0s)"
|
||||
},
|
||||
{
|
||||
"name": "debug_mode",
|
||||
"type": "select",
|
||||
"label": "调试模式(默认:禁用)",
|
||||
"options": [
|
||||
"禁用",
|
||||
"启用"
|
||||
]
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user