mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-06-03 00:45:57 +08:00
AutoYuanQin【更新】、AEscoffier_chef【修复】 (#3242)
* 更新MIDI格式、支持按键长按 * fix * fix * 修复已知问题 * Update README.md
This commit is contained in:
@@ -660,6 +660,10 @@
|
|||||||
- 更新日志
|
- 更新日志
|
||||||
<details>
|
<details>
|
||||||
<summary> 点击展开 </summary>
|
<summary> 点击展开 </summary>
|
||||||
|
|
||||||
|
- ver 2.4.0
|
||||||
|
|
||||||
|
1. 修复了刷满熟料度操作流程中,遇到料理名称过长的料理时会报错的BUG
|
||||||
|
|
||||||
- ver 2.3.10
|
- ver 2.3.10
|
||||||
|
|
||||||
|
|||||||
@@ -746,16 +746,17 @@
|
|||||||
click(493, 1025); // 确认筛选
|
click(493, 1025); // 确认筛选
|
||||||
await sleep(500)
|
await sleep(500)
|
||||||
|
|
||||||
let food_name = await Ocr(116, 243, 125, 30);
|
let food_name_ocr = await Ocr(116, 243, 125, 30);
|
||||||
if (food_name) {
|
if (food_name_ocr) {
|
||||||
food_name.Click();
|
food_name_ocr.Click();
|
||||||
await sleep(500);
|
await sleep(500);
|
||||||
// 寻找对应的料理
|
// 寻找对应的料理
|
||||||
let matchList = [];
|
let matchList = [];
|
||||||
for (let i = 0; i < Object.keys(food_msg).length; i++) {
|
for (let i = 0; i < Object.keys(food_msg).length; i++) {
|
||||||
matchList.push(await deal_string(Object.keys(food_msg)[i]));
|
matchList.push(await deal_string(Object.keys(food_msg)[i]));
|
||||||
}
|
}
|
||||||
food_name = await findClosestMatch(food_name.text, matchList);
|
let food_name = await findClosestMatch(food_name_ocr.text, matchList);
|
||||||
|
food_name = Object.keys(food_msg)[matchList.indexOf(food_name)]; // 使用料理的完整名称
|
||||||
log.info(`当前料理: ${food_name}`);
|
log.info(`当前料理: ${food_name}`);
|
||||||
// let formula_num = Object.keys(food_msg["formula"]).length;
|
// let formula_num = Object.keys(food_msg["formula"]).length;
|
||||||
click(1686, 1018); // 制作
|
click(1686, 1018); // 制作
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 1,
|
"manifest_version": 1,
|
||||||
"name": "一只爱可菲",
|
"name": "一只爱可菲",
|
||||||
"version": "2.3.10",
|
"version": "2.4.0",
|
||||||
"bgi_version": "0.55.0",
|
"bgi_version": "0.55.0",
|
||||||
"description": "专精料理制作的爱可菲(自动烹饪及解锁、特殊料理、食材加工)[内置料理数据已更新至月之六]\n自动烹饪:烹饪精度自定义、一键全解锁、分类选择料理、自动处理食材不足等异常\n特殊料理:支持根据概率计算产出、支持全部的特殊料理\n食材加工:食材持有量检测、可自选制作鱼肉的配方、可选等待加工完成或跳过、矿石加速",
|
"description": "专精料理制作的爱可菲(自动烹饪及解锁、特殊料理、食材加工)[内置料理数据已更新至月之六]\n自动烹饪:烹饪精度自定义、一键全解锁、分类选择料理、自动处理食材不足等异常\n特殊料理:支持根据概率计算产出、支持全部的特殊料理\n食材加工:食材持有量检测、可自选制作鱼肉的配方、可选等待加工完成或跳过、矿石加速",
|
||||||
"tags": [
|
"tags": [
|
||||||
|
|||||||
@@ -248,9 +248,20 @@ notes 字段中包含的是乐谱内容音符**必须**使用**大写字母**,
|
|||||||
## 更新日志
|
## 更新日志
|
||||||
更新日志于3.0开始记录, 往期更新内容都在git的记录中
|
更新日志于3.0开始记录, 往期更新内容都在git的记录中
|
||||||
|
|
||||||
|
- ver 3.4.0
|
||||||
|
|
||||||
|
1. 优化了MIDI制谱器导出的曲谱格式(导出前会重构格式,可能与页面显示的略有差异)
|
||||||
|
1. 更新了本地MIDI曲谱的格式
|
||||||
|
1. 修复了MIDI曲谱在演奏时可能出现的吞音bug
|
||||||
|
1. 五线谱制谱器与简谱制谱器生成的曲谱现在支持按键长按效果
|
||||||
|
|
||||||
|
- ver 3.3.4
|
||||||
|
|
||||||
|
1. 更新了十首单曲《爱你》- 谐律键琴、《如愿》- 谐律键琴、《红色高跟鞋》- 谐律键琴、《这世界有那么多人》- 谐律键琴、《回家的路-原神五周年》- 谐律键琴、《反方向的钟》- 谐律键琴、《最伟大的作品》- 谐律键琴、《七里香》- 谐律键琴、《花海》- 谐律键琴、《蒲公英的约定(修改版)》- 谐律键琴
|
||||||
|
|
||||||
- ver 3.3.3
|
- ver 3.3.3
|
||||||
|
|
||||||
1. 更新了一首单曲《オノマトペメガネ(拟声眼镜)》- 风物之诗琴
|
1. 更新了两首单曲《オノマトペメガネ(拟声眼镜)》- 风物之诗琴、Letter(彼方的她-Aliya)- 风物之诗琴
|
||||||
|
|
||||||
- ver 3.3.2
|
- ver 3.3.2
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,6 @@
|
|||||||
"type": "midi",
|
"type": "midi",
|
||||||
"composer": "曲师",
|
"composer": "曲师",
|
||||||
"arranger": "谱师",
|
"arranger": "谱师",
|
||||||
"notes": "DC0|DH0|DN0|UC120|DA0|UA120|DD0|UD120|UN120|DN0|UN120|DD0|UH120|UD0|DH0|DA0|DQ0|UH120|DN120|UN120|DD0|UD120|DH0|UH120|UA120|UQ0|DC0|DD0|DE0|UC120|DN0|UN120|DA0|UA120|UD120|UE0|DC0|DQ0|DY0|UC240|UQ0|DN0|DW0|UY240|UN0|UW0|DA0|DE0|UA240|UE0|DC0|DQ0|UC240|UQ0|DN0|DW0|UN240|UW0|DD0|DH0|UD240|UH0|DN0|DQ0|UN240|UQ0|DA0|DW0|UA240|UW0|DC0|DE0|UC240|UE0|DN0|DQ0|UN240|UQ0|DA0|DW0|UA240|UW0|DD0|DH0|UD240|UH0|DA0|DC0|DQ0|UA240|UQ0|DD0|DW0|UC240|UD0|UW0|DH0|DZ0|DE0|UH480|UZ0|UE0|DZ0|DQ0|UZ240|UQ0|DB0|DW0|UB240|UW0|DA0|DH0|UA240|UH0|DB0|DQ0|UB240|UQ0|DA0|DW0|UA240|UW0|DD0|DE0|UD240|UE0|DZ0|DQ0|UZ240|UQ0|DB0|DW0|UB240|UW0|DD0|DA0|DH0|UD240|UH0|DB0|DQ0|UB240|UQ0|DD0|DW0|UD240|UW0|DG0|DE0|UA240|UG0|UE0|DS0|DN0|DQ0|US240|UQ0|DD0|DW0|UD240|UW0|DA0|DH0|UN480|UA0|UH0|DV0|DQ0|UQ240|DA0|DW0|UA240|UW0|DG0|DE0|UG240|UE0|DH0|DQ0|UV240|UH0|UQ0|DA0|DW0|UW240|DV0|DH0|UV240|UH0|DF0|DQ0|UF240|UQ0|DN0|DW0|UA240|UN0|UW0|DF0|DV0|DE0|UF240|UE0|DA0|DQ0|UA240|UQ0|DN0|DW0|UN240|UW0|DA0|DH0|UV240|UA0|UH0|DV0|DF0|DQ0|UV240|UQ0|DN0|DW0|UN240|UW0|DA0|DE0|UF480|UA0|UE0|DQ0|DV0|UQ240|UV0|DA0|DW0|UA240|UW0|DH0|DB0|UH240|UB0|DN0|DQ0|UN240|UQ0|DW0|DA0|UW240|UA0|DF0|DE0|UF240|UE0|DQ0|DG0|UQ240|UG0|DF0|DW0|UF240|UW0|DH0|DN0|DV0|UV120|DA0|UH120|UA0|DF0|DQ0|UF120|UN120|UQ0|DW0|DA0|UA120|DF0|UW120|UF0|DH0|DA0|DQ0|DE0|UH120|UQ120|UE0|DQ0|DF0|UF120|DH0|UA120|UQ0|UH0|DN0|DW0|UN120|UW120|DD0|DH0|DE0|DA0|UA120|DN0|UH120|UE0|UN0|DV0|UV120|UD120|DC0|DQ0|DY0|UC240|UQ0|DN0|DW0|UY240|UN0|UW0|DA0|DE0|UA240|UE0|DC0|DQ0|UC240|UQ0|DY0|DN0|DW0|UN240|UW0|DD0|DH0|UY240|UD0|UH0|DN0|DQ0|UN240|UQ0|DA0|DW0|UA240|UW0|DY0|DC0|DE0|UC240|UE0|DN0|DQ0|UY240|UN0|UQ0|DA0|DW0|UA240|UW0|DD0|DH0|UD240|UH0|DY0|DA0|DC0|DQ0|UA240|UQ0|DD0|DW0|UY240|UC0|UD0|UW0|DH0|DZ0|DE0|UH480|UZ0|UE0|DT0|DZ0|DQ0|UZ240|UQ0|DB0|DW0|UT240|UB0|UW0|DA0|DH0|UA240|UH0|DB0|DQ0|UB240|UQ0|DT0|DA0|DW0|UA240|UW0|DD0|DE0|UT240|UD0|UE0|DZ0|DQ0|UZ240|UQ0|DB0|DW0|UB240|UW0|DT0|DD0|DA0|DH0|UD240|UH0|DB0|DQ0|UT240|UB0|UQ0|DD0|DW0|UD240|UW0|DG0|DE0|UA240|UG0|UE0|DT0|DS0|DN0|DQ0|US240|UQ0|DD0|DW0|UT240|UD0|UW0|DA0|DH0|UN480|UA0|UH0|DY0|DR0|DV0|DQ0|UQ240|DA0|DW0|UY240|UR0|UA0|UW0|DG0|DE0|UG240|UE0|DH0|DQ0|UV240|UH0|UQ0|DY0|DR0|DA0|DW0|UW240|DV0|DH0|UY240|UR0|UV0|UH0|DF0|DQ0|UF240|UQ0|DN0|DW0|UA240|UN0|UW0|DY0|DR0|DF0|DV0|DE0|UF240|UE0|DA0|DQ0|UY240|UR0|UA0|UQ0|DN0|DW0|UN240|UW0|DA0|DH0|UV240|UA0|UH0|DY0|DR0|DV0|DF0|DQ0|UV240|UQ0|DW0|DN0|UY240|UR0|UW0|UN0|DA0|DE0|UF480|UA0|UE0|DU0|DV0|DE0|UV240|UE0|DA0|UU240|UA0|DT0|DF0|DQ0|UF240|UQ0|DH0|UT240|UH0|DE0|DA0|DQ0|UA240|UQ0|DF0|DW0|UE240|UF0|UW0|DT0|DN0|DQ0|UN240|UQ0|DE0|DY0|DD0|DA0|DH0|UT240|UE240|UY0|UD720|UA0|UH0",
|
"notes": "DCHN0|UC120|DA0|UA120|DD0|UD120|UN120|DN0|UN120|DD0|UH120|UD0|DHAQ0|UH120|DN120|UN120|DD0|UD120|DH0|UH120|UA120|UQ0|DCDE0|UC120|DN0|UN120|DA0|UA120|UD120|UE0|DCQY0|UC240|UQ0|DNW0|UY240|UNW0|DAE0|UA240|UE0|DCQ0|UC240|UQ0|DNW0|UN240|UW0|DDH0|UD240|UH0|DNQ0|UN240|UQ0|DAW0|UA240|UW0|DCE0|UC240|UE0|DNQ0|UN240|UQ0|DAW0|UA240|UW0|DDH0|UD240|UH0|DACQ0|UA240|UQ0|DDW0|UC240|UDW0|DHZE0|UH480|UZE0|DZQ0|UZ240|UQ0|DBW0|UB240|UW0|DAH0|UA240|UH0|DBQ0|UB240|UQ0|DAW0|UA240|UW0|DDE0|UD240|UE0|DZQ0|UZ240|UQ0|DBW0|UB240|UW0|DDAH0|UD240|UH0|DBQ0|UB240|UQ0|DDW0|UD240|UW0|DGE0|UA240|UGE0|DSNQ0|US240|UQ0|DDW0|UD240|UW0|DAH0|UN480|UAH0|DVQ0|UQ240|DAW0|UA240|UW0|DGE0|UG240|UE0|DHQ0|UV240|UHQ0|DAW0|UW240|DVH0|UV240|UH0|DFQ0|UF240|UQ0|DNW0|UA240|UNW0|DFVE0|UF240|UE0|DAQ0|UA240|UQ0|DNW0|UN240|UW0|DAH0|UV240|UAH0|DVFQ0|UV240|UQ0|DNW0|UN240|UW0|DAE0|UF480|UAE0|DQV0|UQ240|UV0|DAW0|UA240|UW0|DHB0|UH240|UB0|DNQ0|UN240|UQ0|DWA0|UW240|UA0|DFE0|UF240|UE0|DQG0|UQ240|UG0|DFW0|UF240|UW0|DHNV0|UV120|DA0|UH120|UA0|DFQ0|UF120|UN120|UQ0|DWA0|UA120|DF0|UW120|UF0|DHAQE0|UH120|UQ120|UE0|DQF0|UF120|DH0|UA120|UQH0|DNW0|UN120|UW120|DDHEA0|UA120|DN0|UH120|UEN0|DV0|UV120|UD120|DCQY0|UC240|UQ0|DNW0|UY240|UNW0|DAE0|UA240|UE0|DCQ0|UC240|UQ0|DYNW0|UN240|UW0|DDH0|UY240|UDH0|DNQ0|UN240|UQ0|DAW0|UA240|UW0|DYCE0|UC240|UE0|DNQ0|UY240|UNQ0|DAW0|UA240|UW0|DDH0|UD240|UH0|DYACQ0|UA240|UQ0|DDW0|UY240|UCDW0|DHZE0|UH480|UZE0|DTZQ0|UZ240|UQ0|DBW0|UT240|UBW0|DAH0|UA240|UH0|DBQ0|UB240|UQ0|DTAW0|UA240|UW0|DDE0|UT240|UDE0|DZQ0|UZ240|UQ0|DBW0|UB240|UW0|DTDAH0|UD240|UH0|DBQ0|UT240|UBQ0|DDW0|UD240|UW0|DGE0|UA240|UGE0|DTSNQ0|US240|UQ0|DDW0|UT240|UDW0|DAH0|UN480|UAH0|DYRVQ0|UQ240|DAW0|UY240|URAW0|DGE0|UG240|UE0|DHQ0|UV240|UHQ0|DYRAW0|UW240|DVH0|UY240|URVH0|DFQ0|UF240|UQ0|DNW0|UA240|UNW0|DYRFVE0|UF240|UE0|DAQ0|UY240|URAQ0|DNW0|UN240|UW0|DAH0|UV240|UAH0|DYRVFQ0|UV240|UQ0|DWN0|UY240|URWN0|DAE0|UF480|UAE0|DUVE0|UV240|UE0|DA0|UU240|UA0|DTFQ0|UF240|UQ0|DH0|UT240|UH0|DEAQ0|UA240|UQ0|DFW0|UE240|UFW0|DTNQ0|UN240|UQ0|DEYDAH0|UT240|UE240|UY0|UD720|UAH0",
|
||||||
"ticks": 480
|
"ticks": 480
|
||||||
}
|
}
|
||||||
@@ -8,6 +8,6 @@
|
|||||||
"type": "midi",
|
"type": "midi",
|
||||||
"composer": "曲师",
|
"composer": "曲师",
|
||||||
"arranger": "谱师",
|
"arranger": "谱师",
|
||||||
"notes": "DE240|DD0|UE240|UD0|DY0|DH0|UY240|UH0|DU0|DJ0|UU240|UJ0|DY0|DE0|DQ0|DC0|UC240|DN0|UN240|DA0|UA240|DC0|UC240|DN0|UN240|DA0|UY240|UE0|UQ0|UA0|DU0|DJ0|DC0|UC240|DN0|UN240|DA0|UU240|UJ0|UA0|DY0|DH0|DN0|UN240|DA0|UY240|UH0|UA0|DU0|DJ0|DD0|UU120|UJ0|DY0|DH0|UD120|UY0|UH0|DT0|DG0|DC0|UC240|DB0|UB240|DM0|UM240|DC0|UC240|DB0|UB240|DM0|UT240|UG0|UM0|DE0|DD0|DC0|UC240|DB0|UB240|DM0|UE240|UD0|UM0|DT0|DG0|DB0|UB240|DM0|UM240|DD0|UT240|UG0|UD0|DY0|DH0|DZ0|UZ240|DV0|UV240|DN0|UN240|DV0|UV240|DN0|UN240|DA0|UY240|UH0|UA0|DT0|DG0|DX0|UX240|DB0|UB240|DM0|UT240|UG0|UM0|DR0|DF0|DB0|UB240|DM0|UM240|DS0|UR240|UF0|US0|DE0|DD0|DZ0|UZ240|DC0|UC240|DB0|UB240|DC0|UC240|DB0|UB240|DA0|UD240|UA0|DS0|DB0|UB240|DA0|UA240|DB0|US240|UB0|DD0|DC0|UE240|UC0|DW0|DB0|UW240|UB0|DZ0|DE0|UD240|UZ0|UE0|DX0|DR0|DF0|UX240|DV0|UV240|DN0|UN240|DV0|UV240|DN0|UR240|UF0|UN0|DS0|DD0|DE0|UD120|UE0|DF0|DR0|US120|UF0|UR0|DN0|DG0|DT0|UN240|DV0|UG240|UT0|UV0|DX0|DF0|DR0|UF120|UR0|DG0|DT0|UX120|UG0|UT0|DS0|DH0|DY0|US240|DN0|UH240|UY0|UN0|DV0|DG0|DT0|UG120|UT0|DH0|DY0|UV120|UH0|UY0|DC0|DY0|DE0|DQ0|UC240|DN0|UN240|DA0|UA240|DN0|UN240|DA0|UA240|DD0|UY240|UE0|UQ0|UD0|DH0|DJ0|DU0|UH240|DD0|UD240|DA0|UJ240|UU0|UA0|DH0|DY0|DD0|UD240|DA0|UA240|DN0|UH240|UY0|UN0|DC0|DJ0|DU0|UC240|DB0|UB240|DM0|UM240|DB0|UB240|DM0|UM240|DD0|UJ240|UU0|UD0|DC0|DH0|DY0|UC240|DM0|UM240|DB0|UH240|UY0|UB0|DD0|DJ0|DU0|UD240|DG0|UG240|DM0|UJ240|UU0|UM0|DJ0|DB0|DT0|DE0|DG0|DD0|UB240|DC0|UC240|DM0|UD240|UM0|DB0|UB240|DD0|UG240|UD0|DM0|UM240|DB0|UJ240|UB0|DC0|UC240|DJ0|UE240|UJ0|DE0|DD0|DM0|UE240|UD0|UM0|DY0|DH0|DC0|UT240|UY0|UH0|UC0|DM0|DJ0|DU0|UM240|UJ0|UU0|DQ0|DC0|DE0|DY0|UC240|DN0|UN240|DA0|UA240|DN0|UN240|DA0|UA240|DD0|UQ240|UE0|UY0|UD0|DJ0|DU0|DH0|UH240|DD0|UD240|DA0|UJ240|UU0|UA0|DH0|DY0|DD0|UD240|DA0|UH240|UY0|UA0|DN0|DJ0|DU0|UU120|DY0|DH0|UN120|UJ0|UY0|UH0|DC0|DG0|DT0|UC240|DB0|UB240|DM0|UM240|DB0|UB240|DM0|UM240|DD0|UG240|UT0|UD0|DE0|DD0|DG0|UG240|DC0|UC240|DM0|UE240|UD0|UM0|DT0|DG0|DC0|UC240|DM0|UM240|DB0|UT240|UG0|UB0|DH0|DY0|DV0|UV240|DA0|UA240|DF0|UF240|DA0|UH240|UY0|UA0|DY0|DH0|DF0|UF240|DN0|UY240|UH0|UN0|DB0|DJ0|DU0|UB240|DS0|UJ240|UU0|US0|DG0|DJ0|DW0|DT0|UG240|DS0|UJ240|UW0|UT0|US0|DB0|DU0|DW0|DG0|UB240|DM0|UU240|UW0|UG0|UM0|DA0|DG0|DQ0|DT0|DE0|UA240|DB0|UB240|DD0|UD240|DA0|UG240|UA0|DB0|UB240|DD0|UQ240|UD0|DA0|UA240|DD0|UE240|UD0|DG0|UG240|DQ0|UT240|UQ0|DD0|DW0|DH0|UD240|UW0|UH0|DG0|DW0|DE0|UG240|UW0|UE0|DW0|DY0|DE0|UW240|UY0|UE0|DH0|DR0|UH240|UR0|DF0|DY0|DE0|UF240|UY0|UE0|DS0|DR0|DW0|US240|UR0|UW0|DH0|DE0|UH240|UE0|DF0|DR0|DW0|UF240|UR0|UW0|DS0|DW0|DQ0|US240|UW0|UQ0|DN0|DW0|UN240|UW0|DF0|DW0|DQ0|UF240|UW0|UQ0|DU0|DN0|DJ0|UU240|UN0|UJ0|DA0|DQ0|UA240|UQ0|DJ0|DU0|DD0|UJ240|UU0|UD0|DC0|DH0|DY0|UC240|UH0|UY0|DN0|DG0|UN240|UG0|DA0|DH0|DY0|UA240|UH0|UY0|DN0|DJ0|DE0|UN240|UJ0|UE0|DA0|DH0|UA240|UH0|DD0|DJ0|DE0|UD240|UJ0|UE0|DH0|DY0|DQ0|UH240|UY0|UQ0|DD0|DJ0|UD240|UJ0|DA0|DY0|DQ0|UA240|UY0|UQ0|DE0|DD0|DW0|UE240|UD0|UW0|DA0|DQ0|UA240|UQ0|DN0|DE0|DW0|UN240|UE0|UW0|DV0|DQ0|DY0|DE0|UY60|UE0|DU0|DR0|UU60|UR0|DY0|DE0|UY60|UE0|DU0|DR0|UV60|UQ0|UU0|UR0|DA0|DY0|DE0|UA240|DH0|DQ0|UH240|UQ0|DV0|DF0|UV240|UF0|DA0|UA240|DH0|DF0|UH240|UF0|DA0|UA240|DH0|UH240|DF0|UF240|DQ0|UQ240|DH0|UH240|DA0|UY240|UE0|UA0|DD0|DE0|DT0|UE60|UT0|DR0|DY0|UR60|UY0|DE0|DT0|UE60|UT0|DR0|DY0|UD60|UR0|UY0|DG0|DE0|DT0|UG240|DJ0|UJ240|DG0|UG240|DJ0|UJ240|DD0|UD240|DG0|UG240|DD0|UD240|DM0|UM240|DD0|UD240|DG0|UG240|DJ0|UE240|UT0|UJ0|DC0|DD0|DH120|UC120|DN0|DQ0|DE120|UN120|DA0|DY0|UA240|DN0|UN240|DA0|UA240|DD0|UD240|DH0|UH240|DD0|UD240|DQ0|UQ240|DH0|UH240|DE0|UD240|UE0|DQ0|UH120|UQ120|UQ0|DY0|UE120|UY120|UY0",
|
"notes": "DE240|DD0|UE240|UD0|DYH0|UY240|UH0|DUJ0|UU240|UJ0|DYEQC0|UC240|DN0|UN240|DA0|UA240|DC0|UC240|DN0|UN240|DA0|UY240|UEQA0|DUJC0|UC240|DN0|UN240|DA0|UU240|UJA0|DYHN0|UN240|DA0|UY240|UHA0|DUJD0|UU120|UJ0|DYH0|UD120|UYH0|DTGC0|UC240|DB0|UB240|DM0|UM240|DC0|UC240|DB0|UB240|DM0|UT240|UGM0|DEDC0|UC240|DB0|UB240|DM0|UE240|UDM0|DTGB0|UB240|DM0|UM240|DD0|UT240|UGD0|DYHZ0|UZ240|DV0|UV240|DN0|UN240|DV0|UV240|DN0|UN240|DA0|UY240|UHA0|DTGX0|UX240|DB0|UB240|DM0|UT240|UGM0|DRFB0|UB240|DM0|UM240|DS0|UR240|UFS0|DEDZ0|UZ240|DC0|UC240|DB0|UB240|DC0|UC240|DB0|UB240|DA0|UD240|UA0|DSB0|UB240|DA0|UA240|DB0|US240|UB0|DDC0|UE240|UC0|DWB0|UW240|UB0|DZE0|UD240|UZE0|DXRF0|UX240|DV0|UV240|DN0|UN240|DV0|UV240|DN0|UR240|UFN0|DSDE0|UD120|UE0|DFR0|US120|UFR0|DNGT0|UN240|DV0|UG240|UTV0|DXFR0|UF120|UR0|DGT0|UX120|UGT0|DSHY0|US240|DN0|UH240|UYN0|DVGT0|UG120|UT0|DHY0|UV120|UHY0|DCYEQ0|UC240|DN0|UN240|DA0|UA240|DN0|UN240|DA0|UA240|DD0|UY240|UEQD0|DHJU0|UH240|DD0|UD240|DA0|UJ240|UUA0|DHYD0|UD240|DA0|UA240|DN0|UH240|UYN0|DCJU0|UC240|DB0|UB240|DM0|UM240|DB0|UB240|DM0|UM240|DD0|UJ240|UUD0|DCHY0|UC240|DM0|UM240|DB0|UH240|UYB0|DDJU0|UD240|DG0|UG240|DM0|UJ240|UUM0|DJBTEGD0|UB240|DC0|UC240|DM0|UD240|UM0|DB0|UB240|DD0|UG240|UD0|DM0|UM240|DB0|UJ240|UB0|DC0|UC240|DJ0|UE240|UJ0|DEDM0|UE240|UDM0|DYHC0|UT240|UYHC0|DMJU0|UM240|UJU0|DQCEY0|UC240|DN0|UN240|DA0|UA240|DN0|UN240|DA0|UA240|DD0|UQ240|UEYD0|DJUH0|UH240|DD0|UD240|DA0|UJ240|UUA0|DHYD0|UD240|DA0|UH240|UYA0|DNJU0|UU120|DYH0|UN120|UJYH0|DCGT0|UC240|DB0|UB240|DM0|UM240|DB0|UB240|DM0|UM240|DD0|UG240|UTD0|DEDG0|UG240|DC0|UC240|DM0|UE240|UDM0|DTGC0|UC240|DM0|UM240|DB0|UT240|UGB0|DHYV0|UV240|DA0|UA240|DF0|UF240|DA0|UH240|UYA0|DYHF0|UF240|DN0|UY240|UHN0|DBJU0|UB240|DS0|UJ240|UUS0|DGJWT0|UG240|DS0|UJ240|UWTS0|DBUWG0|UB240|DM0|UU240|UWGM0|DAGQTE0|UA240|DB0|UB240|DD0|UD240|DA0|UG240|UA0|DB0|UB240|DD0|UQ240|UD0|DA0|UA240|DD0|UE240|UD0|DG0|UG240|DQ0|UT240|UQ0|DDWH0|UD240|UWH0|DGWE0|UG240|UWE0|DWYE0|UW240|UYE0|DHR0|UH240|UR0|DFYE0|UF240|UYE0|DSRW0|US240|URW0|DHE0|UH240|UE0|DFRW0|UF240|URW0|DSWQ0|US240|UWQ0|DNW0|UN240|UW0|DFWQ0|UF240|UWQ0|DUNJ0|UU240|UNJ0|DAQ0|UA240|UQ0|DJUD0|UJ240|UUD0|DCHY0|UC240|UHY0|DNG0|UN240|UG0|DAHY0|UA240|UHY0|DNJE0|UN240|UJE0|DAH0|UA240|UH0|DDJE0|UD240|UJE0|DHYQ0|UH240|UYQ0|DDJ0|UD240|UJ0|DAYQ0|UA240|UYQ0|DEDW0|UE240|UDW0|DAQ0|UA240|UQ0|DNEW0|UN240|UEW0|DVQYE0|UY60|UE0|DUR0|UU60|UR0|DYE0|UY60|UE0|DUR0|UV60|UQUR0|DAYE0|UA240|DHQ0|UH240|UQ0|DVF0|UV240|UF0|DA0|UA240|DHF0|UH240|UF0|DA0|UA240|DH0|UH240|DF0|UF240|DQ0|UQ240|DH0|UH240|DA0|UY240|UEA0|DDET0|UE60|UT0|DRY0|UR60|UY0|DET0|UE60|UT0|DRY0|UD60|URY0|DGET0|UG240|DJ0|UJ240|DG0|UG240|DJ0|UJ240|DD0|UD240|DG0|UG240|DD0|UD240|DM0|UM240|DD0|UD240|DG0|UG240|DJ0|UE240|UTJ0|DCD0|DH120|UC120|DNQ0|DE120|UN120|DAY0|UA240|DN0|UN240|DA0|UA240|DD0|UD240|DH0|UH240|DD0|UD240|DQ0|UQ240|DH0|UH240|DE0|UD240|UE0|DQ0|UH120|UQ120|UQ0|DY0|UE120|UY120|UY0",
|
||||||
"ticks": 480
|
"ticks": 480
|
||||||
}
|
}
|
||||||
@@ -10,4 +10,4 @@
|
|||||||
"notes": "V[4]A[4]E[2]|\nV[4]A[4]W[2]|\nV[4]A[4]Q[4]J[4]|\nQ[4]J[4]G[4]D[4]|\nV[4]A[4]E[2]|\nV[4]A[4]W[2]|\nV[4]A[4]Q[4]J[4]|\n\nQ[4]T[4]E[2]|\nV[4]A[4](HE)[2]|\nB[4]S[4](JW)[2]|\nN[4]D[4](HQ)[4]J[4]|\nQ[4]J[4]G[4]D[4]|\nV[4]A[4](HE)[2]|\nB[4]S[4](JW)[2]|\nN[4]D[4](QE)[4](JW)[4]|\n\n(HQ)[2]W[4]E[4]|\n(VH)[4]A[4]E[2]|\n(BW)[4]S[4]E[4-#]W[4]H[4]|\nN[4]D[4](HQ)[4]J[4]|\nQ[4]J[4]G[4]D[4]|\n(VH)[4]A[4]E[2]|\n(MW)[4]S[4](ET)[4]E[4]|\nN[4](CD)[4](SH)[4](DJ)[4]|\n\nQ[4]U[4]Y[4]T[4]|\n(VHY)[4]A[4]E[2]|\n(BW)[4]S[4](EY)[4]H[4]|\nN[4]D[4](HQ)[4]J[4]|\nQ[4](JD)[4]G[4]D[4]|\n(VH)[4]A[4]E[2]|\n(MW)[4]S[4]E[4-#]W[4]Y[4]|\n\nN[4]D[4]H[4]J[4]|\nQ[2]W[4]E[4]|\n(HV)[4](ZA)[4](NE)[2]|\n(BW)[4](XS)[4]E[4-#](WM)[4](HA)[4]|\nN[4](CD)[4](NQ)[4]J[4]|\nQ[4]J[4]G[4]D[4]|\n(HV)[4](ZA)[4](NE)[2]|\n\n(BW)[4](XS)[4](MET)[4]E[4]|\nN[4](CD)[4](SH)[4](DJ)[4]|\nQ[4]U[4](SY)[4](DT)[4]|\n(VHY)[4](ZA)[4](NE)[2]|\n(BW)[4](XS)[4](EY)[4](AH)[4]|\nN[4](CD)[4](NQ)[4]J[4]|\nQ[4](JDN)[4](GA)[4]D[4]|\n\n(VH)[4]A[4](NE)[2]|\n(BW)[4]S[4]E[4-#](MW)[4]Y[4]|\nN[4]D[4]H[4]J[4]|\n(NQ)[1]|\nV[4]A[4]E[2]|\nB[4]S[4]W[2]|\nN[4]D[4]Q[4]J[4]|\nQ[4]J[4]G[4]D[4]|\n\nV[4]A[4]E[2]|\nB[4]S[4]W[2]|\nN[4]D[4]H[4]J[4]|\nQ[1]",
|
"notes": "V[4]A[4]E[2]|\nV[4]A[4]W[2]|\nV[4]A[4]Q[4]J[4]|\nQ[4]J[4]G[4]D[4]|\nV[4]A[4]E[2]|\nV[4]A[4]W[2]|\nV[4]A[4]Q[4]J[4]|\n\nQ[4]T[4]E[2]|\nV[4]A[4](HE)[2]|\nB[4]S[4](JW)[2]|\nN[4]D[4](HQ)[4]J[4]|\nQ[4]J[4]G[4]D[4]|\nV[4]A[4](HE)[2]|\nB[4]S[4](JW)[2]|\nN[4]D[4](QE)[4](JW)[4]|\n\n(HQ)[2]W[4]E[4]|\n(VH)[4]A[4]E[2]|\n(BW)[4]S[4]E[4-#]W[4]H[4]|\nN[4]D[4](HQ)[4]J[4]|\nQ[4]J[4]G[4]D[4]|\n(VH)[4]A[4]E[2]|\n(MW)[4]S[4](ET)[4]E[4]|\nN[4](CD)[4](SH)[4](DJ)[4]|\n\nQ[4]U[4]Y[4]T[4]|\n(VHY)[4]A[4]E[2]|\n(BW)[4]S[4](EY)[4]H[4]|\nN[4]D[4](HQ)[4]J[4]|\nQ[4](JD)[4]G[4]D[4]|\n(VH)[4]A[4]E[2]|\n(MW)[4]S[4]E[4-#]W[4]Y[4]|\n\nN[4]D[4]H[4]J[4]|\nQ[2]W[4]E[4]|\n(HV)[4](ZA)[4](NE)[2]|\n(BW)[4](XS)[4]E[4-#](WM)[4](HA)[4]|\nN[4](CD)[4](NQ)[4]J[4]|\nQ[4]J[4]G[4]D[4]|\n(HV)[4](ZA)[4](NE)[2]|\n\n(BW)[4](XS)[4](MET)[4]E[4]|\nN[4](CD)[4](SH)[4](DJ)[4]|\nQ[4]U[4](SY)[4](DT)[4]|\n(VHY)[4](ZA)[4](NE)[2]|\n(BW)[4](XS)[4](EY)[4](AH)[4]|\nN[4](CD)[4](NQ)[4]J[4]|\nQ[4](JDN)[4](GA)[4]D[4]|\n\n(VH)[4]A[4](NE)[2]|\n(BW)[4]S[4]E[4-#](MW)[4]Y[4]|\nN[4]D[4]H[4]J[4]|\n(NQ)[1]|\nV[4]A[4]E[2]|\nB[4]S[4]W[2]|\nN[4]D[4]Q[4]J[4]|\nQ[4]J[4]G[4]D[4]|\n\nV[4]A[4]E[2]|\nB[4]S[4]W[2]|\nN[4]D[4]H[4]J[4]|\nQ[1]",
|
||||||
"type": "yuanqin",
|
"type": "yuanqin",
|
||||||
"ticks": 480
|
"ticks": 480
|
||||||
}
|
}
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "蒲公英的约定",
|
"name": "蒲公英的约定",
|
||||||
"author": "MidiTrans",
|
"author": "MidiTrans",
|
||||||
"instrument": "风物之诗琴",
|
"instrument": "谐律键琴",
|
||||||
"type": "midi",
|
"type": "midi",
|
||||||
"description": "曲谱信息",
|
"description": "曲谱信息",
|
||||||
"time_signature": "4/4",
|
"time_signature": "4/4",
|
||||||
|
|||||||
@@ -1032,13 +1032,58 @@
|
|||||||
jsonOutput.textContent = JSON.stringify(outputJson, null, 2);
|
jsonOutput.textContent = JSON.stringify(outputJson, null, 2);
|
||||||
});
|
});
|
||||||
|
|
||||||
// 下载 JSON
|
// 新增:将给定的notes字符串按照指定规则合并相邻代码项(从Python实现转换而来)
|
||||||
|
function mergeCodes(s) {
|
||||||
|
if (typeof s !== 'string') return s;
|
||||||
|
const pattern = /^([DU])([A-Z]+)(\d+)$/;
|
||||||
|
const codes = s.split('|');
|
||||||
|
const merged = [];
|
||||||
|
|
||||||
|
for (let code of codes) {
|
||||||
|
const m = code.match(pattern);
|
||||||
|
if (!m) {
|
||||||
|
// 非匹配项直接保留原始字符串
|
||||||
|
merged.push({ raw: code });
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const prefix = m[1];
|
||||||
|
const middle = m[2];
|
||||||
|
const numStr = m[3];
|
||||||
|
const num = parseInt(numStr, 10);
|
||||||
|
|
||||||
|
if (merged.length > 0 && merged[merged.length - 1].prefix === prefix) {
|
||||||
|
const last = merged[merged.length - 1];
|
||||||
|
const lastNum = parseInt(last.numStr, 10);
|
||||||
|
if ((lastNum === 0 || lastNum === 1) && (num === 0 || num === 1)) {
|
||||||
|
// 合并:保留首字母(prefix),拼接中间字母,数字取右侧项的数字
|
||||||
|
last.middle = last.middle + middle;
|
||||||
|
last.numStr = numStr;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
merged.push({ prefix: prefix, middle: middle, numStr: numStr });
|
||||||
|
}
|
||||||
|
|
||||||
|
const resultParts = merged.map(item => {
|
||||||
|
if (item.raw !== undefined) return item.raw;
|
||||||
|
return `${item.prefix}${item.middle}${item.numStr}`;
|
||||||
|
});
|
||||||
|
|
||||||
|
return resultParts.join('|');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 下载 JSON(在提供下载前先对notes字段做mergeCodes处理)
|
||||||
downloadBtn.addEventListener('click', () => {
|
downloadBtn.addEventListener('click', () => {
|
||||||
if (!lastGeneratedJson) {
|
if (!lastGeneratedJson) {
|
||||||
alert('请先生成JSON');
|
alert('请先生成JSON');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const jsonStr = JSON.stringify(lastGeneratedJson, null, 2);
|
// 在下载前处理notes字段
|
||||||
|
const processedNotes = mergeCodes(lastGeneratedJson.notes);
|
||||||
|
const jsonObjForDownload = Object.assign({}, lastGeneratedJson, { notes: processedNotes });
|
||||||
|
|
||||||
|
const jsonStr = JSON.stringify(jsonObjForDownload, null, 2);
|
||||||
const blob = new Blob([jsonStr], { type: 'application/json' });
|
const blob = new Blob([jsonStr], { type: 'application/json' });
|
||||||
const url = URL.createObjectURL(blob);
|
const url = URL.createObjectURL(blob);
|
||||||
const a = document.createElement('a');
|
const a = document.createElement('a');
|
||||||
|
|||||||
@@ -509,24 +509,46 @@
|
|||||||
* 执行单音
|
* 执行单音
|
||||||
*
|
*
|
||||||
* @param key {string}
|
* @param key {string}
|
||||||
|
* @param status 按键模式 press down up
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
async function play_note(key) {
|
async function play_note(key, status = "press") {
|
||||||
keyDown(key);
|
if (status === "press") {
|
||||||
keyUp(key);
|
keyDown(key);
|
||||||
|
keyUp(key);
|
||||||
|
} else if (status === "down") {
|
||||||
|
keyDown(key);
|
||||||
|
} else if (status === "up") {
|
||||||
|
keyUp(key);
|
||||||
|
await sleep(4);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* 执行和弦
|
* 执行和弦
|
||||||
*
|
*
|
||||||
* @param keys {Array.string}
|
* @param keys {string}
|
||||||
|
* @param status 按键模式 press down up
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
async function play_chord(keys) {
|
async function play_chord(keys, status = "press") {
|
||||||
for (const key of keys) {
|
if (status === "press") {
|
||||||
play_note(key);
|
for (const key of keys) {
|
||||||
|
play_note(key, status);
|
||||||
|
}
|
||||||
|
} else if (status === "down") {
|
||||||
|
for (const key of keys) {
|
||||||
|
keyDown(key);
|
||||||
|
}
|
||||||
|
} else if (status === "up") {
|
||||||
|
for (const key of keys) {
|
||||||
|
keyUp(key);
|
||||||
|
}
|
||||||
|
await sleep(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -911,16 +933,39 @@
|
|||||||
let play_sheet = sheet_list.split("|");
|
let play_sheet = sheet_list.split("|");
|
||||||
let base_time = 60000 / (bpm * ticks); // second per beat - 每tick多少毫秒
|
let base_time = 60000 / (bpm * ticks); // second per beat - 每tick多少毫秒
|
||||||
for (let i = 0; i < play_sheet.length; i++) {
|
for (let i = 0; i < play_sheet.length; i++) {
|
||||||
let current_note = play_sheet[i];
|
// 正则表达式:首字母(A-Z),中间字母串(A-Z@),数字部分(0-9)
|
||||||
log.debug(`${current_note[0]}-${current_note[1]}-${current_note.slice(2)}`);
|
const regex = /^([A-Z])([A-Z@]+)(\d+)$/;
|
||||||
let current_ticks = Math.round(current_note.slice(2));
|
|
||||||
let wait_time = Math.round(current_ticks * base_time);
|
let current_note = play_sheet[i];
|
||||||
await sleep(wait_time);
|
|
||||||
if (current_note[1] === "@") continue;
|
const match = current_note.match(regex);
|
||||||
if (current_note[0] === "D") {
|
const status = match[1];
|
||||||
keyDown(current_note[1]);
|
const notes = match[2];
|
||||||
|
const ticks = Math.round(match[3]);
|
||||||
|
|
||||||
|
if (settings.debug_mode === "启用") {
|
||||||
|
log.info(`${status}-${notes}-${ticks}`);
|
||||||
|
}
|
||||||
|
let wait_time = Math.round(ticks * base_time);
|
||||||
|
if (wait_time >= 2) {
|
||||||
|
await sleep(wait_time);
|
||||||
|
} else if (status === "D"){
|
||||||
|
await sleep(4);
|
||||||
|
}
|
||||||
|
if (notes === "@") continue;
|
||||||
|
|
||||||
|
if (status === "D") {
|
||||||
|
if (notes.length > 1) {
|
||||||
|
await play_chord(notes, "down");
|
||||||
|
} else {
|
||||||
|
await play_note(notes, "down");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
keyUp(current_note[1]);
|
if (notes.length > 1) {
|
||||||
|
await play_chord(notes, "up");
|
||||||
|
} else {
|
||||||
|
await play_note(notes, "up");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -940,19 +985,25 @@
|
|||||||
log.info(`${sheet_list[i]["note"]}[${sheet_list[i]["type"]}-${sheet_list[i]["spl"]}]`);
|
log.info(`${sheet_list[i]["note"]}[${sheet_list[i]["type"]}-${sheet_list[i]["spl"]}]`);
|
||||||
}
|
}
|
||||||
if (sheet_list[i]["spl"] === 'none') { // 单音、休止符或和弦
|
if (sheet_list[i]["spl"] === 'none') { // 单音、休止符或和弦
|
||||||
|
let sleep_time = cal_time_ornament(sheet_list, symbol_time, symbol, sheet_list[i]["type"], i);
|
||||||
|
|
||||||
if (sheet_list[i]["chord"]) {
|
if (sheet_list[i]["chord"]) {
|
||||||
await play_chord(sheet_list[i]["note"]); // 和弦
|
await play_chord(sheet_list[i]["note"], "down"); // 和弦
|
||||||
|
await sleep(i !== sheet_list.length - 1 ? sleep_time: 0);
|
||||||
|
await play_chord(sheet_list[i]["note"], "up");
|
||||||
} else {
|
} else {
|
||||||
if (sheet_list[i]["note"] === '@') { // 休止符
|
if (sheet_list[i]["note"] === '@') { // 休止符
|
||||||
// pass
|
await sleep(i !== sheet_list.length - 1 ? sleep_time: 0);
|
||||||
} else {
|
} else {
|
||||||
await play_note(sheet_list[i]["note"]); // 单音
|
await play_note(sheet_list[i]["note"], "down"); // 单音
|
||||||
|
await sleep(i !== sheet_list.length - 1 ? sleep_time: 0);
|
||||||
|
await play_note(sheet_list[i]["note"], "up");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i !== sheet_list.length - 1) {
|
// if (i !== sheet_list.length - 1) {
|
||||||
await sleep(cal_time_ornament(sheet_list, symbol_time, symbol, sheet_list[i]["type"], i));
|
// await sleep(cal_time_ornament(sheet_list, symbol_time, symbol, sheet_list[i]["type"], i));
|
||||||
}
|
// }
|
||||||
} else if (sheet_list[i]["spl"] === '#') { // 装饰音(不会包含休止符),时值为symbol的时值的1/16
|
} else if (sheet_list[i]["spl"] === '#') { // 装饰音(不会包含休止符),时值为symbol的时值的1/16
|
||||||
if (sheet_list[i]["chord"]) {
|
if (sheet_list[i]["chord"]) {
|
||||||
await play_chord(sheet_list[i]["note"]); // 和弦
|
await play_chord(sheet_list[i]["note"]); // 和弦
|
||||||
@@ -987,45 +1038,66 @@
|
|||||||
for (let j = 0; j < temp_legato.length; j++) {
|
for (let j = 0; j < temp_legato.length; j++) {
|
||||||
// 当前音符时长
|
// 当前音符时长
|
||||||
let time_current = Math.round(time_legato * (1 / parseInt(temp_legato[j]["spl"].split(/\./)[0], 0)) / time_all);
|
let time_current = Math.round(time_legato * (1 / parseInt(temp_legato[j]["spl"].split(/\./)[0], 0)) / time_all);
|
||||||
|
let sleep_time = 0;
|
||||||
if (temp_legato[j]["chord"]) {
|
|
||||||
await play_chord(temp_legato[j]["note"]); // 和弦
|
|
||||||
} else {
|
|
||||||
if (temp_legato[j]["note"] === '@') { // 休止符
|
|
||||||
// pass
|
|
||||||
} else {
|
|
||||||
await play_note(temp_legato[j]["note"]); // 单音
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (count < temp_legato.length) {
|
if (count < temp_legato.length) {
|
||||||
await sleep(time_current);
|
sleep_time = time_current;
|
||||||
} else if (count === temp_legato.length - 1) {
|
} else if (count === temp_legato.length - 1) {
|
||||||
if (i !== sheet_list.length - 1) {
|
if (i !== sheet_list.length - 1) {
|
||||||
// 计算连音的最后一个音的时值(计算装饰音)
|
// 计算连音的最后一个音的时值(计算装饰音)
|
||||||
await sleep(cal_time_ornament(sheet_list, symbol_time, symbol, sheet_list[i]["type"], i, time_current));
|
sleep_time = cal_time_ornament(sheet_list, symbol_time, symbol, sheet_list[i]["type"], i, time_current);
|
||||||
}
|
}
|
||||||
} else if (i !== sheet_list.length - 1) {
|
} else if (i !== sheet_list.length - 1) {
|
||||||
await sleep(time_current);
|
sleep_time = time_current;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (temp_legato[j]["chord"]) {
|
||||||
|
await play_chord(temp_legato[j]["note"], "down"); // 和弦
|
||||||
|
await sleep(sleep_time);
|
||||||
|
await play_chord(temp_legato[j]["note"], "up");
|
||||||
|
} else {
|
||||||
|
if (temp_legato[j]["note"] === '@') { // 休止符
|
||||||
|
await sleep(sleep_time);
|
||||||
|
} else {
|
||||||
|
await play_note(temp_legato[j]["note"], "down"); // 单音
|
||||||
|
await sleep(sleep_time);
|
||||||
|
await play_note(temp_legato[j]["note"], "up");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// if (count < temp_legato.length) {
|
||||||
|
// await sleep(time_current);
|
||||||
|
// } else if (count === temp_legato.length - 1) {
|
||||||
|
// if (i !== sheet_list.length - 1) {
|
||||||
|
// // 计算连音的最后一个音的时值(计算装饰音)
|
||||||
|
// await sleep(cal_time_ornament(sheet_list, symbol_time, symbol, sheet_list[i]["type"], i, time_current));
|
||||||
|
// }
|
||||||
|
// } else if (i !== sheet_list.length - 1) {
|
||||||
|
// await sleep(time_current);
|
||||||
|
// }
|
||||||
count += 1;
|
count += 1;
|
||||||
}
|
}
|
||||||
// 重置连音缓存区
|
// 重置连音缓存区
|
||||||
temp_legato = [];
|
temp_legato = [];
|
||||||
}
|
}
|
||||||
} else if (sheet_list[i]["spl"] === '*') { // 附点音符
|
} else if (sheet_list[i]["spl"] === '*') { // 附点音符
|
||||||
|
let sleep_time = cal_time_ornament(sheet_list, symbol_time * 1.5, symbol, sheet_list[i]["type"], i);
|
||||||
|
|
||||||
if (sheet_list[i]["chord"]) {
|
if (sheet_list[i]["chord"]) {
|
||||||
await play_chord(sheet_list[i]["note"]); // 和弦
|
await play_chord(sheet_list[i]["note"], "down"); // 和弦
|
||||||
|
await sleep(i !== sheet_list.length - 1 ? sleep_time: 0);
|
||||||
|
await play_chord(sheet_list[i]["note"], "up");
|
||||||
} else {
|
} else {
|
||||||
if (sheet_list[i]["note"] === '@') { // 休止符
|
if (sheet_list[i]["note"] === '@') { // 休止符
|
||||||
// pass
|
await sleep(i !== sheet_list.length - 1 ? sleep_time: 0);
|
||||||
} else {
|
} else {
|
||||||
await play_note(sheet_list[i]["note"]); // 单音
|
await play_note(sheet_list[i]["note"], "down"); // 单音
|
||||||
|
await sleep(i !== sheet_list.length - 1 ? sleep_time: 0);
|
||||||
|
await play_note(sheet_list[i]["note"], "up");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 排除尾音
|
// // 排除尾音
|
||||||
if (i !== sheet_list.length - 1) {
|
// if (i !== sheet_list.length - 1) {
|
||||||
await sleep(cal_time_ornament(sheet_list, symbol_time * 1.5, symbol, sheet_list[i]["type"], i));
|
// await sleep(cal_time_ornament(sheet_list, symbol_time * 1.5, symbol, sheet_list[i]["type"], i));
|
||||||
}
|
// }
|
||||||
} else {
|
} else {
|
||||||
log.info(`错误: ${sheet_list[i]["spl"]}`);
|
log.info(`错误: ${sheet_list[i]["spl"]}`);
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 1,
|
"manifest_version": 1,
|
||||||
"name": "原琴·乐曲转换、自动演奏",
|
"name": "原琴·乐曲转换、自动演奏",
|
||||||
"version": "3.3.4",
|
"version": "3.4.0",
|
||||||
"bgi_version": "0.60.1",
|
"bgi_version": "0.60.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",
|
"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": [
|
"authors": [
|
||||||
|
|||||||
Reference in New Issue
Block a user