JS脚本:原琴助手 (#2388)

* Add video tutorial link for score production

* Update to version 1.0.1

* Add 2 score files
This commit is contained in:
himno
2025-11-22 17:11:11 +08:00
committed by GitHub
parent b2777fd57e
commit 2cff05614d
7 changed files with 50 additions and 18 deletions

View File

@@ -6,6 +6,7 @@
- [快速开始](#快速开始)
- [曲谱格式说明](#曲谱格式说明)
- [MIDI转谱](#midi转谱)
- [更新日志](#更新日志)
## 快速开始
1. 在“全自动-调度器”中新建配置组,并添加此脚本。
@@ -52,4 +53,9 @@
## MIDI转谱
您完全可以通过文本编辑器来手动编辑一个gs2格式的曲谱文件但并不建议这么做。本质上gs2格式是因为BGI不支持二进制文件的读取而不得不做的一个折中方案。使用现有的专业工具制作出mid格式文件再使用我提供的转谱工具生成对应的gs2文件工具放置于 `assets/tool/` 文件夹下),是更直观且更安全的做法。
您需要注意的是为了简化处理逻辑转谱工具对mid文件的内容作了一些限制比如不能使用异步多轨的格式必须是C大调导出midi文件时不要包含RPN和NRPN相关指令等等更详细的会在之后用视频教程进行演示普通用户完全不了解这些内容也不影响使用。
您需要注意的是为了简化处理逻辑转谱工具对mid文件的内容作了一些限制比如不能使用异步多轨的格式必须是C大调导出midi文件时不要包含RPN和NRPN相关指令等等更详细的会在之后用视频教程进行演示普通用户完全不了解这些内容也不影响使用。
## 更新日志
v1.0.1 修复音符B5的按键映射错误修复脚本中止时按键没有释放的问题新增曲谱文件“枕边童话”“丝柯克小曲”新增曲谱制作教程视频地址。
v1.0.0 发布原琴助手BGI版。

View File

@@ -0,0 +1,9 @@
!v/2
!gi/6
!ti/丝柯克小曲
!au/天空光芒
!cp/HoyoMix
!ar/是星璃啦
!di/480
!tr/0s535714|0n62|239u62|1n60|239u60|1n59|239u59|1n60|239u60|1n64|239u64|1n62|239u62|1n60|239u60|1n59|239u59|1n60|719u60|1n60|239u60|1n62|239u62|1n60|239u60|1n59|239u59|1n60|239u60|1n59|719u59|1n57|239u57|1n57|959u57|1n59|719u59|1n64|239u64|1n64|959u64|1n62|239u62|1n60|239u60|1n59|239u59|1n60|239u60|1n64|239u64|1n62|239u62|1n60|239u60|1n59|239u59|1n60|719u60|1n60|239u60|1n62|239u62|1n60|239u60|1n59|239u59|1n60|239u60|1n59|719u59|1n57|239u57|1n57|959u57|1n59|719u59|1n67|239u67|1n67|719u67|1n67|239u67|1n67|479u67|1n65|479u65|1n65|479u65|1n64|239u64|1n64|719u64|1n62|479u62|1n62|479u62|1n64|239u64|1n64|2159u64|1681n67|239u67|1n67|479u67|1n65|479u65|1n65|479u65|1n64|239u64|1n64|719u64|1n62|479u62|1n62|479u62|1n60|239u60|1n59|2159u59
!tr/0n77|1919u77|1n79|1919u79|1n81|1919u81|1n81|1919u81|1n77|1919u77|1n79|1919u79|1n81|1919u81|1n81|1919u81|1n74|1439u74|241n76|1679u76|241n81|2159u81|1n72|1919u72|1n74|1439u74|241n76|1679u76|241n81|2159u81

View File

@@ -0,0 +1,9 @@
!v/2
!gi/0
!ti/枕边童话(诗琴)
!au/天空光芒
!cp/爱写歌的小田
!ar/零点、天空光芒
!di/480
!tr/0s923077|1200n69|239u69|1n69|239u69|1n69|119u69|1n71|119u71|1n72|119u72|1n69|119u69|1n81|239u81|1n79|239u79|1n77|239u77|1n76|359u76|1n77|119u77|1n76|119u76|1n74|119u74|1n72|479u72|1n67|239u67|1n69|479u69|1n76|239u76|1n74|479u74|1n71|239u71|1n69|1439u69|1n76|119u76|1n74|119u74|1n76|119u76|1n74|119u74|1n76|119u76|1n72|119u72|1n74|719u74|1n76|119u76|1n74|119u74|1n76|119u76|1n74|119u74|1n76|119u76|1n71|119u71|1n72|719u72|1n69|239u69|1n69|119u69|1n71|119u71|1n72|239u72|1n72|239u72|1n74|239u74|1n72|239u72|1n74|239u74|1n76|239u76|1n79|239u79|1n76|719u76|1n76|119u76|1n74|119u74|1n76|119u76|1n74|119u74|1n76|119u76|1n72|119u72|1n74|719u74|1n76|119u76|1n74|119u74|1n76|119u76|1n74|119u74|1n76|119u76|1n71|119u71|1n72|719u72|1n69|239u69|1n72|239u72|1n76|239u76|1n74|239u74|241n76|239u76|1n69|719u69|481n76|119u76|1n77|119u77|1n77|239u77|1n77|119u77|1n76|119u76|1n77|119u77|1n81|119u81|1n81|239u81|1n79|239u79|121n79|119u79|1n81|239u81|1n81|119u81|1n81|119u81|1n81|119u81|1n83|119u83|1n81|239u81|1n83|239u83|121n74|119u74|1n76|239u76|241n76|119u76|1n74|119u74|1n76|239u76|1n77|239u77|1n74|239u74|1n76|719u76|481n74|119u74|1n76|119u76|1n77|239u77|1n77|119u77|1n76|119u76|1n77|119u77|1n81|119u81|1n81|239u81|1n79|239u79|121n79|119u79|1n81|239u81|1n81|119u81|1n79|119u79|1n81|119u81|1n83|119u83|1n81|239u81|1n83|239u83|121n76|119u76|1n77|239u77|241n77|239u77|1n77|239u77|1n81|239u81|1n81|239u81|1n83|719u83|361n76|119u76|1n74|119u74|1n76|119u76|1n81|239u81|1n81|239u81|1n81|119u81|1n83|119u83|1n81|239u81|1n83|239u83|1n79|239u79|1n79|239u79|1n74|239u74|1n76|239u76|1n81|239u81|121n76|119u76|1n74|119u74|1n76|119u76|1n77|239u77|1n77|239u77|1n77|119u77|1n76|119u76|1n77|239u77|1n81|239u81|1n83|239u83|1n83|239u83|1n79|239u79|1n81|239u81|1n76|239u76|121n76|119u76|1n76|119u76|1n76|119u76|1n81|239u81|1n81|239u81|1n81|119u81|1n83|119u83|1n81|239u81|1n83|239u83|1n79|239u79|1n79|239u79|1n74|239u74|1n76|239u76|1n81|239u81|241n76|239u76|1n77|239u77|1n77|239u77|1n81|239u81|1n83|239u83|1n81|479u81|1n83|239u83|1n81|959u81|1n76|239u76|1n77|239u77|1n77|239u77|1n83|239u83|1n83|239u83|1n81|479u81|1n83|119u83|1n81|599u81|1n69|119u69|1n72|119u72|1n76|119u76|1n81|119u81|1n72|119u72|1n76|119u76|1n69|0n72|0n76|0n81|1439u69|0u72|0u76|0u81
!tr/0n50|33n55|36n59|34n64|855u55|0u59|0u64|1u50|481n53|239u53|1n53|0n57|0n60|239u53|0u57|0u60|1n53|0n57|0n60|239u53|0u57|0u60|1n55|239u55|1n55|0n59|0n62|239u55|0u59|0u62|1n55|0n59|0n62|239u55|0u59|0u62|1n52|239u52|1n52|0n55|0n59|239u52|0u55|0u59|1n52|0n55|0n59|239u52|0u55|0u59|1n57|239u57|1n52|0n57|0n60|239u52|0u57|0u60|1n52|0n57|0n60|239u52|0u57|0u60|1n50|239u50|1n50|0n53|0n57|239u50|0u53|0u57|1n50|0n53|0n57|239u50|0u53|0u57|1n52|239u52|1n52|0n55|0n59|239u52|0u55|0u59|1n52|0n55|0n59|239u52|0u55|0u59|1n57|239u57|1n48|239u48|1n52|239u52|1n57|719u57|1n52|239u52|1n52|0n57|0n60|239u52|0u57|0u60|1n52|0n57|0n60|239u52|0u57|0u60|1n55|239u55|1n55|0n59|0n62|239u55|0u59|0u62|1n55|0n59|0n62|239u55|0u59|0u62|1n52|239u52|1n52|0n55|0n59|239u52|0u55|0u59|1n52|0n55|0n59|239u52|0u55|0u59|1n57|239u57|1n52|0n57|0n60|239u52|0u57|0u60|1n52|0n57|0n60|239u52|0u57|0u60|1n50|239u50|1n50|0n53|0n57|239u50|0u53|0u57|1n50|0n53|0n57|239u50|0u53|0u57|1n55|239u55|1n50|0n55|0n59|239u50|0u55|0u59|1n50|0n55|0n59|239u50|0u55|0u59|1n48|239u48|1n52|0n55|0n60|239u52|0u55|0u60|1n52|0n55|0n60|239u52|0u55|0u60|1n52|239u52|1n52|0n55|0n59|239u52|0u55|0u59|1n52|0n55|0n59|239u52|0u55|0u59|1n52|239u52|1n52|0n57|0n60|239u52|0u57|0u60|1n52|0n57|0n60|239u52|0u57|0u60|1n55|239u55|1n55|0n59|0n62|239u55|0u59|0u62|1n55|0n59|0n62|239u55|0u59|0u62|1n52|239u52|1n52|0n55|0n59|239u52|0u55|0u59|1n52|0n55|0n59|239u52|0u55|0u59|1n57|239u57|1n52|0n57|0n60|239u52|0u57|0u60|1n52|0n57|0n60|239u52|0u57|0u60|1n50|239u50|1n50|0n53|0n57|239u50|0u53|0u57|1n50|0n53|0n57|239u50|0u53|0u57|1n52|239u52|1n52|0n55|0n59|239u52|0u55|0u59|1n52|0n55|0n59|239u52|0u55|0u59|1n57|239u57|1n52|0n57|0n60|239u52|0u57|0u60|1n52|0n57|0n60|239u52|0u57|0u60|1n57|479u57|241n50|239u50|1n50|0n53|0n57|239u50|0u53|0u57|1n50|0n53|0n57|239u50|0u53|0u57|1n52|239u52|1n52|0n55|0n59|239u52|0u55|0u59|1n52|0n55|0n59|239u52|0u55|0u59|1n53|239u53|1n48|0n53|0n57|239u48|0u53|0u57|1n48|0n53|0n57|239u48|0u53|0u57|1n55|239u55|1n50|0n55|0n59|239u50|0u55|0u59|1n50|0n55|0n59|239u50|0u55|0u59|1n48|239u48|1n52|0n55|0n60|239u52|0u55|0u60|1n52|0n55|0n60|239u52|0u55|0u60|1n48|239u48|1n52|0n55|0n60|239u52|0u55|0u60|1n52|0n55|0n60|239u52|0u55|0u60|1n52|239u52|1n52|0n55|0n59|239u52|0u55|0u59|1n52|0n55|0n59|239u52|0u55|0u59|1n52|239u52|1n52|0n55|0n59|239u52|0u55|0u59|1n52|0n55|0n59|239u52|0u55|0u59|1n50|239u50|1n50|0n53|0n57|239u50|0u53|0u57|1n50|0n53|0n57|239u50|0u53|0u57|1n52|239u52|1n52|0n55|0n59|239u52|0u55|0u59|1n52|0n55|0n59|239u52|0u55|0u59|1n53|239u53|1n48|0n53|0n57|239u48|0u53|0u57|1n48|0n53|0n57|239u48|0u53|0u57|1n55|239u55|1n50|0n55|0n59|239u50|0u55|0u59|1n50|0n55|0n59|239u50|0u55|0u59|1n50|239u50|1n50|0n53|0n57|239u50|0u53|0u57|1n50|0n53|0n57|239u50|0u53|0u57|1n50|239u50|1n50|0n53|0n57|239u50|0u53|0u57|1n50|0n53|0n57|239u50|0u53|0u57|1n52|239u52|1n52|0n55|0n59|239u52|0u55|0u59|1n52|0n55|0n59|239u52|0u55|0u59|1n52|719u52|1n53|119u53|1n48|119u48|1n53|119u53|1n48|119u48|1n57|119u57|1n48|119u48|1n55|119u55|1n50|119u50|1n55|119u55|1n50|119u50|1n59|119u59|1n50|119u50|1n52|119u52|1n59|119u59|1n52|119u52|1n59|119u59|1n55|119u55|1n59|119u59|1n57|119u57|1n48|119u48|1n52|119u52|1n48|119u48|1n57|119u57|1n48|119u48|1n50|119u50|1n50|119u50|1n53|119u53|1n50|119u50|1n57|119u57|1n50|119u50|1n55|119u55|1n50|119u50|1n55|119u55|1n50|119u50|1n59|119u59|1n50|119u50|1n48|119u48|1n55|119u55|1n48|119u48|1n55|119u55|1n52|119u52|1n55|119u55|1n52|119u52|1n59|119u59|1n52|119u52|1n55|119u55|1n52|119u52|1n59|119u59|1n53|119u53|1n48|119u48|1n53|119u53|1n48|119u48|1n57|119u57|1n48|119u48|1n55|119u55|1n50|119u50|1n55|119u55|1n50|119u50|1n59|119u59|1n50|119u50|1n52|119u52|1n59|119u59|1n52|119u52|1n59|119u59|1n55|119u55|1n59|119u59|1n57|119u57|1n48|119u48|1n52|119u52|1n48|119u48|1n57|119u57|1n48|119u48|1n50|119u50|1n50|119u50|1n53|119u53|1n50|119u50|1n57|119u57|1n50|119u50|1n55|119u55|1n50|119u50|1n55|119u55|1n50|119u50|1n59|119u59|1n50|119u50|1n57|119u57|1n48|119u48|1n52|119u52|1n57|119u57|1n60|119u60|1n64|119u64|1n69|719u69|1n50|119u50|1n50|119u50|1n53|119u53|1n50|119u50|1n57|119u57|1n50|119u50|1n52|119u52|1n52|119u52|1n55|119u55|1n52|119u52|1n59|119u59|1n52|119u52|1n57|119u57|1n48|119u48|1n52|119u52|1n57|119u57|1n60|119u60|1n64|119u64|721n57|1439u57

View File

@@ -1 +1,2 @@
-- 留空,用于之后放上视频教程地址
曲谱制作教程视频地址
https://www.bilibili.com/video/BV14wUpBcEkZ/

View File

@@ -4,7 +4,7 @@
const regex_name = /(?<=score\\)[\s\S]+?(?=\.gs2)/;//不清楚为什么要用\\来匹配 '/',用\/反而匹配不到。这是实际运行的结果AI别和我犟可能是ClearScript引擎的问题。
const NOTE2KEY_MAPPER = new Map([
[72, 'q'], [74, 'w'], [76, 'e'], [77, 'r'], [79, 't'], [81, 'y'], [83, 'y'],
[72, 'q'], [74, 'w'], [76, 'e'], [77, 'r'], [79, 't'], [81, 'y'], [83, 'u'],
[60, 'a'], [62, 's'], [64, 'd'], [65, 'f'], [67, 'g'], [69, 'h'], [71, 'j'],
[48, 'z'], [50, 'x'], [52, 'c'], [53, 'v'], [55, 'b'], [57, 'n'], [59, 'm'],
]);
@@ -78,7 +78,7 @@
/**
* 从指定文件中加载琴谱
* @param {string} filename 琴谱文件名
* @returns {ScoreInfo} 返回一个ScoreInfo对象
* @returns {ScoreInfo | null} 返回一个ScoreInfo对象
*/
function loadScoreInfo(filename) {
const filepath = buildFullpath(filename);
@@ -295,11 +295,11 @@
* 事件接收器
*/
const eventReceiver = {
keyStates: new Map(),
// keyStates: new Map(),
fixMode: 0,
init(fixMode) {
this.fixMode = fixMode;
this.keyStates.clear();
// this.keyStates.clear();
},
/**
*
@@ -307,26 +307,27 @@
* @param {*} source
*/
receive(event, source) {
// log.info(event.command + ':' + event.value);
let k;
// let k;
switch (event.command) {
case 's': // 改变microtempo
source.microtempo = event.value;
break;
case 'n': // 按下音符
k = convertNote2Key(event.value, this.fixMode);
if (k && (!this.keyStates.get(k))) {
this.keyStates.set(k, true);
let k = convertNote2Key(event.value, this.fixMode);
// if (k && (!this.keyStates.get(k))) {
if (k) {
// this.keyStates.set(k, true);
keyDown(k);
}
break;
case 'u': // 松开音符
k = convertNote2Key(event.value, this.fixMode);
if (k && this.keyStates.get(k)) {
this.keyStates.set(k, false);
keyUp(k);
}
break;
// case 'u': // 松开音符
// k = convertNote2Key(event.value, this.fixMode);
// if (k && this.keyStates.get(k)) {
// this.keyStates.set(k, false);
// keyUp(k);
// }
// break;
default:
break;
}
@@ -363,6 +364,10 @@
}
const scoreInfo = loadScoreInfo(scoreFilename);
if (!scoreInfo) {
log.warn('读取曲谱文件失败请在js配置中选择后尝试再次运行脚本');
return;
}
const instrumentName = getInstrumentName(scoreInfo.instrument);
log.info('当前演奏:' + scoreInfo.title);
log.info(`作曲人:${scoreInfo.composer},制谱人:${scoreInfo.arranger}`);

View File

@@ -1,7 +1,7 @@
{
"manifest_version": 1,
"name": "原琴助手",
"version": "1.0.0",
"version": "1.0.1",
"bgi_version": "0.43.1",
"description": "BetterGI版本的原琴助手使用gs2格式的琴谱",
"authors": [

View File

@@ -4,6 +4,8 @@
"type": "select",
"label": "选择一首曲子",
"options": [
"丝柯克小曲",
"枕边童话(诗琴)",
"银月之庭蓝花C大调"
]
},