mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-03-20 04:10:00 +08:00
JS脚本:原琴助手 (#2388)
* Add video tutorial link for score production * Update to version 1.0.1 * Add 2 score files
This commit is contained in:
@@ -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版。
|
||||
9
repo/js/YuanQinAssistant/assets/score/丝柯克小曲.gs2
Normal file
9
repo/js/YuanQinAssistant/assets/score/丝柯克小曲.gs2
Normal 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
|
||||
9
repo/js/YuanQinAssistant/assets/score/枕边童话(诗琴).gs2
Normal file
9
repo/js/YuanQinAssistant/assets/score/枕边童话(诗琴).gs2
Normal 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
|
||||
@@ -1 +1,2 @@
|
||||
-- 留空,用于之后放上视频教程地址
|
||||
曲谱制作教程视频地址:
|
||||
https://www.bilibili.com/video/BV14wUpBcEkZ/
|
||||
|
||||
@@ -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}`);
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
"type": "select",
|
||||
"label": "选择一首曲子",
|
||||
"options": [
|
||||
"丝柯克小曲",
|
||||
"枕边童话(诗琴)",
|
||||
"银月之庭(蓝花)C大调"
|
||||
]
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user