JS脚本:原琴·五线谱版【更新】 (#412)

* JS脚本:原琴·五线谱版【更新】

* 压缩了教程图片的大小

压缩率0.2

* 修复了文件读取的BUG

* 修复了队列演奏报错的BUG
This commit is contained in:
提瓦特钓鱼玳师
2025-03-08 23:44:09 +08:00
committed by GitHub
parent 43cc8d1f35
commit a0ab049419
21 changed files with 275 additions and 99 deletions

View File

@@ -4,24 +4,24 @@
重要即使制作了曲谱的JSON文件放到了正确的路径下在调度器的JS脚本配置里也不会出现你制作的曲谱上传方法如下
## 上传方法
1.上传到BetterGI脚本仓库的repo\js\AutoLyre\assets路径下根据已存在的曲谱在你的文件名前添加序号(例如 10.曲名.json)完成后请联系BetterGI v7群主更新JS脚本
1.上传到BetterGI脚本仓库的repo\js\AutoLyre\assets\score_file路径下,根据已存在的曲谱在你的文件名前添加序号(例如 10.曲名.json)完成后请联系BetterGI v7群主更新JS脚本
2.联系BetterGI v71029539994群主帮你更新到仓库
3.发送邮件到hijiwos@hotmail.com并说明你的谱子将会在一段时间内更新到仓库
## 曲谱制作问题
\assets\五线谱注解.png包含了五线谱高音区和低音区对应的4组键盘键位相邻的红蓝大写字母为一组每组音域为三个八度
\assets/tutorial_file/五线谱注解.png包含了五线谱高音区和低音区对应的4组键盘键位相邻的红蓝大写字母为一组每组音域为三个八度
有不懂的地方请在\assets\example.json内找这个谱子内包含了该脚本的五线谱相关的所有功能
有不懂的地方请在\assets/tutorial_file/example.json内找这个谱子内包含了该脚本的五线谱相关的所有功能
## 曲谱文件位置
所有的曲谱文件应放置于 AutoLyre\assets 目录下,并在文件名前添加正确的序号
所有的曲谱文件应放置于 AutoLyre\assets\score_file 路径下,并在文件名前添加正确的序号
## 文件结构
一个标准的曲谱.json文件的基本结构如下
{
一个标准的曲谱.json文件的基本结构如下
```json
{
"name": "",
"author": "",
"description": "",
@@ -31,66 +31,140 @@
"arranger": "",
"notes": ""
}
```
**注意**:以上代码中仅 : 右侧的**双引号内**的部分可以更改,具体的曲谱格式请参考 \assets\tutorial_file 路径下的 example.json
注意:仅: 右侧的双引号内的部分可以更改具体的曲谱格式请参考assets文件夹下的example.json
## 字段说明
name: 曲谱名,必填。
**name**: 曲谱名,必填。
author: 录谱人,制作这个.json曲谱的作者名。
**author**: 录谱人,制作这个.json曲谱的作者名。
description: 描述,可以随意填写关于该曲谱的附加信息
**description**: 描述,可以随意填写关于该曲谱的附加信息
bpm: 曲谱的BPMBeats Per Minute必填。
**bpm**: 曲谱的BPMBeats Per Minute必填。
time_signature: 拍号,必填,例如 3/4 代表 以四分音符为一拍每小节三拍被设为一拍的音符仅支持2的幂
**time_signature**: 拍号,必填,例如 3/4 代表 以四分音符为一拍每小节三拍被设为一拍的音符仅支持2的幂
composer: 曲师,选填。
**composer**: 曲师,选填。
arranger: 谱师,选填。
**arranger**: 谱师,选填。
notes: 曲谱内容,必填,具体格式请参考以下解析规则。
**notes**: 曲谱内容,必填,具体格式请参考以下解析规则。
## Notes 解析规则(重要)
notes 字段中包含的是乐谱内容。音符-必须使用-大写字母,乐谱内容使用字符串表示,小节之间用 | 隔开。单个小节的解析规则如下:
notes 字段中包含的是乐谱内容。音符**必须**使用**大写字母**,乐谱内容使用字符串表示,小节之间用 | 隔开。单个小节的解析规则如下:
A[4]: 表示按下A键A键视作四分音符。
### A[4]
表示按下A键A键视作四分音符。
<div align="center">
<img src="https://github.com/babalae/bettergi-scripts-list/tree/main/repo/js/AutoYuanQin/assets/tutorial_file/四分音符示例.png"/>
<p>四分音符示例</p>
</div>
(ASD)[4-#]: 表示装饰音·倚音
### F[16-#]D[16-#]S[16-#]
表示**装饰音·倚音**
<div align="center">
<img src="https://github.com/babalae/bettergi-scripts-list/tree/main/repo/js/AutoYuanQin/assets/tutorial_file/装饰音·倚音示例.png"/>
<p>装饰音·倚音示例</p>
</div>
同时按下ASD键这个和弦视作四分音符的装饰音装饰音的时值固定为拍号中的标准时值(3/4的标准时值为四分音符的时值)的1/16
以上每个装饰音的时值固定为拍号中的标准时值(3/4的标准时值为四分音符的时值)的1/16,也就是说以上示例中的**16没有意义但是必须要写**
A[4-8.3](AS)[4-8.3](ASD)[4-8.&]: 表示一个三连音六连音用法与此相似仅需将3改成6
### Z[4-8.3]C[4-8.3]B[4-8.$]
表示一个**三连音**六连音用法与此相似仅需将3改成6**其它类型的连音**也请使用3或6(即使是5连音)
另外,连音内支持和弦
<div align="center">
<img src="https://github.com/babalae/bettergi-scripts-list/tree/main/repo/js/AutoYuanQin/assets/tutorial_file/三连音示例.png"/>
<p>三连音示例</p>
</div>
A[4-8.3]: 4表示该三连音的总时值相当于四分音符8表示当前音符在乐谱上显示的时值相当于八分音符的时值3表示这是一个三连音的音符
* Z[4-8.3]
4表示该三连音的总时值相当于四分音符8表示当前音符在乐谱上显示的时值相当于八分音符的时值3表示这是一个三连音的音符
(AS)[4-8.3]: 同上,只不过这里举的例子是和弦
* C[4-8.3]
同上
(ASD)[4-8.&]: $表示这是当前连音的最后一个音符
* B[4-8.$]
H[4-4.3]G[4-8.&]: 表示一个三连音连音线(与三连音用法相同,区别于三连音,三连音连音线允许连线内出现不同类型的音符
$表示这是当前连音的最后一个音符
H[4-4.3]: 第一个4表示整个三连音的总时值为一个四分音符第二个4表示当前音符在乐谱上显示的时值相当于四分音符的时值3表示这是一个三连音的音符
### D[4-16.3]G[4-16.3]H[4-16.3]W[4-16.3]R[4-16.$]
表示一个**五连音**,同理也可以是**N连音**
<div align="center">
<img src="https://github.com/babalae/bettergi-scripts-list/tree/main/repo/js/AutoYuanQin/assets/tutorial_file/五连音示例.png"/>
<p>五连音示例</p>
</div>
* D[4-16.3]
4表示该连音的总时值相当于四分音符16表示当前音符在乐谱上显示的时值相当于十六分音符的时值3表示这个音符是一个连音的一部分
* R[4-16.$]
$表示这是当前连音的最后一个音符
### (BG)[4-4.3]\(VF\)[4-8.$]
表示一个**三连音连音线**(与三连音用法相同,但是三连音连音线允许连线内出现不同类型的音符)
<div align="center">
<img src="https://github.com/babalae/bettergi-scripts-list/tree/main/repo/js/AutoYuanQin/assets/tutorial_file/三连音连音线示例.png"/>
<p>三连音连音线示例</p>
</div>
* (BG)[4-4.3]
第一个4表示整个三连音的总时值为一个四分音符第二个4表示当前音符在乐谱上显示的时值相当于四分音符的时值3表示这是一个三连音的音符
G[4-8.&]: 4表示整个三连音的总时值为一个四分音符8表示这是一个八分音符$表示这是当前连音的最后一个音符
* (VF)[4-8.$]
@[2-8.6](AF)[2-16.6]N[2-16.6](AF)[2-16.6]N[2-16.6](AF)[2-16.6]N[2-16.6](AF)[2-16.6]N[2-16.6](AF)[2-16.6]N[2-16.$]: 表示一个六连音连音线乐谱上表示为一个六连音连音线内包含1个八分休止符和10个十六分音符区别于三连音六连音的.后面的数字是6
4表示整个三连音的总时值为一个四分音符8表示这是一个八分音符$表示这是当前连音的最后一个音符
@[2-8.6]: 2表示该六连音的总时值相当于一个二分音符8表示当前音符在乐谱上显示的时值相当于八分音符的时值6表示这是一个六连音
### @[2-8.6]\(AF\)[2-16.6]N[2-16.6]\(AF\)[2-16.6]N[2-16.6]\(AF\)[2-16.6]N[2-16.6]\(AF\)[2-16.6]N[2-16.6]\(AF\)[2-16.6]N[2-16.$]
表示一个**六连音连音线**乐谱上表示为一个六连音连音线内包含1个八分休止符和10个十六分音符区别于三连音六连音的.后面的数字是6
<div align="center">
<img src="https://github.com/babalae/bettergi-scripts-list/tree/main/repo/js/AutoYuanQin/assets/tutorial_file/六连音连音线示例.png"/>
<p>六连音连音线示例</p>
</div>
* @[2-8.6]
2表示该六连音的总时值相当于一个二分音符8表示当前音符在乐谱上显示的时值相当于八分音符的时值6表示这是一个六连音
N[2-16.$]: 16表示当前音符在乐谱上显示的时值相当于十六分音符的时值$表示这是当前连音的最后一个音符
* N[2-16.$]
@[4]: 表示一个休止
16表示当前音符在乐谱上显示的时值相当于十六分音符的时值$表示这是当前连音的最后一个音
中括号内标明这是几分休止符,例如这里表示四分休止符。
### @[4]
表示一个**休止符**
<div align="center">
<img src="https://github.com/babalae/bettergi-scripts-list/tree/main/repo/js/AutoYuanQin/assets/tutorial_file/四分休止符示例.png"/>
<p>四分休止符示例</p>
</div>
A[4-*]: 表示一个附点四分音符
中括号内表明这是几分休止符,例如这里表示四分休止符。
表示按下A键A键视作附点四分音符。
### (SH)[4-*]
表示一个**附点四分音符**
<div align="center">
<img src="https://github.com/babalae/bettergi-scripts-list/tree/main/repo/js/AutoYuanQin/assets/tutorial_file/附点四分音符示例.png"/>
<p>附点四分音符示例</p>
</div>
表示按下S和H键(和弦),这个和弦视作附点四分音符。
## 代码美化
曲谱JSON文件的"notes"的值视作一个字符串,在这个字符串内可以使用空格和换行符美化代码notes内的换行符不会被读取执行
曲谱JSON文件的"notes"的值视作一个字符串,在这个字符串内可以使用**换行符**美化代码,通过这种方法可以使用记事本等软件从.json文件中获取带有换行的曲谱代码**notes内的换行符不会被读取执行**
### 格式
每一小节的末尾加|\n
每一行的末尾加|\n\n
曲谱的末尾无需加|和\n
例如:
```json
{
"name": "示例曲谱",
"author": "录谱人A",
@@ -99,34 +173,49 @@ A[4-*]: 表示一个附点四分音符
"time_signature": "4/4",
"composer": "曲师B",
"arranger": "谱师C",
"notes": "A[4](ASD)[8]Y[8-#]F[8-#](DFG)[8]R[4-*]T[8]|\n@[4](DFG)[8](CVB)[8]D[4]A[4]|\nA[4](ASD)[8]Y[8-#]F[8-#](DFG)[8]R[4]T[4]|\n@[4](DFG)[8](CVB)[8]D[4]A[4]"
"notes": "A[4](ASD)[8]Y[8-#]F[8-#](DFG)[8]R[4-*]T[8]|\n@[4](DFG)[8](CVB)[8]D[4]A[4]|\n\nA[4](ASD)[8]Y[8-#]F[8-#](DFG)[8]R[4]T[4]|\n@[4](DFG)[8](CVB)[8]D[4]A[4]"
}
```
## 附:
中括号 []- 前表示音符类型,- 后用于区分特殊音符)
[4] 表示四分音符。
* [4]
[16] 表示十六分音符。
表示四分音符。
[-#] 表示装饰音。
* [16]
[-3] 表示三连音(使用时必须保证是三个连续的三连音)。
表示十六分音符。
例如:[16-#] 表示十六分音符的装饰音A[4-3]S[4-3]D[4-3] 表示一个时值为4分音符的三连音。
* [-#]
表示装饰音。
* [-n.3]
表示连音(使用时必须保证连音的最后一个音的标记为.$)。
* [-n.$]
表示当前连音的结束
例如:[16-#] 表示十六分音符的装饰音A[4-8.3]S[4-8.3]D[4-8.$] 表示一个总时值为4分音符的三连音。
## 示例
一个完整的曲谱.json文件示例如下仅包含个小节):
一个完整的曲谱.json文件示例如下供示例,仅包含个小节):
文件名: 示例曲谱.json
```json
{
"name": "示例曲谱",
"author": "录谱人A",
"author": "录谱人",
"bpm": "120",
"description": "曲谱信息",
"time_signature": "4/4",
"composer": "曲师B",
"arranger": "谱师C",
"notes": "A[4](ASD)[8]Y[8-#]F[8-#](DFG)[8]R[4-*]T[8]|\n@[4](DFG)[8](CVB)[8]D[4]A[4]|\nA[4](ASD)[8]Y[8-#]F[8-#](DFG)[8]R[4]T[4]|\n@[4](DFG)[8](CVB)[8]D[4]A[4]"
}
"composer": "曲师",
"arranger": "谱师",
"notes": "N[8-#]A[8-#](VS)[1]|\n(NF)[2-*](AG)[4]|\n(SH)[2-*](SH)[8](AG)[8]|\n(FW)[4](VF)[4](BG)[4](NH)[4]|\n\nB[8]N[8]X[16]Z[16]X[16]Z[16]B[8]N[8]X[16]Z[16]X[16]Z[16]|\nB[8]N[8]X[16]Z[16]X[16]Z[16]V[8]C[8]X[8]Z[8]"
}
```

View File

@@ -0,0 +1,9 @@
{
"name": "小星星",
"author": "提瓦特钓鱼玳师",
"bpm": "80",
"time_signature": "4/4",
"composer": "none",
"arranger": "none",
"notes": "Z[4]Z[4]B[4]B[4]|N[4]N[4]B[2]|V[4]V[4]C[4]C[4]|X[4]X[4]Z[2]|B[4]B[4]V[4]V[4]|C[4]C[4]X[2]|B[4]B[4]V[4]V[4]|C[4]C[4]X[2]|Z[4]Z[4]B[4]B[4]|N[4]N[4]B[2]|V[4]V[4]C[4]C[4]|X[4]X[4]Z[2]|"
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,10 @@
{
"name": "铃芽之旅[Suzume]",
"author": "提瓦特钓鱼玳师",
"description": "五线谱网址https://musescore.com/user/35362468/scores/7642952",
"bpm": "78",
"time_signature": "4/4",
"composer": "野田洋次郎",
"arranger": "JenaV",
"notes": "S[4]H[8-*]H[16]F[16]D[16]S[8]A[8]N[16]A[16]|\nS[8]D[16]F[16]G[16]F[16]D[8]A[2]|\nS[4]H[8-*]H[16]F[16]D[16]S[8]A[8]N[16]A[16]|\n\nS[8]D[16]F[16]G[16]F[16]D[8]S[2]|\nS[4]H[8-*]H[16]F[16]D[16]S[8]A[8]N[16]A[16]|\nS[8]D[16]F[16]G[16]F[16]D[8]A[2]|\n\nS[4]H[8-*]H[16]F[16]D[16]S[8]A[8]N[16]A[16]|\nS[8]D[16]F[16]G[16]F[16]D[8]S[2]|\nH[4]Q[8-*]H[16]G[4]H[4]|\n\nF[4]G[8-*]F[16]D[4]A[4]|\nH[4]Q[8-*]H[16]G[4]H[4]|\nF[4]G[4]D[4]F[4]|\n\nS[4]H[8-*]H[16]F[16]D[16]S[8]A[8]N[16]A[16]|\nS[8]D[16]F[16]G[8]F[16]D[16]S[2]|\nS[4]H[8-*]H[16]F[16]D[16]S[8]A[8]N[16]A[16]|\n\nS[8]D[16]F[16]G[8]F[16]D[16]S[2]|\nS[4]H[8-*]H[16]F[16]D[16]S[8]A[8]N[16]A[16]|\nS[8]D[16]F[16]G[8]F[16]D[16]A[2]|\n\nS[4]H[8-*]H[16]F[16]D[16]S[8]A[8]N[16]A[16]|\nS[8]D[16]F[16]G[8]F[16]D[16]S[4]@[8]F[16]G[16]|\nH[8-*]G[16]F[16]G[16]H[8]H[4]F[8]G[8]|\n\nH[8-*]G[16]F[16]G[16]H[8]H[4]F[8]G[8]|\nH[8-*]G[16]F[16]G[16]H[8]H[4]F[8]G[8]|\nH[8-*]G[16]F[16]G[16]H[8]H[2]|\n\nW[16]Q[16]Q[16]Q[16]Q[16]H[16]H[16]H[16]H[16]G[16]G[16]G[16]G[16]F[16]F[16]G[16]|\nG[8]H[4-*]F[16]G[16]H[16]G[16]G[16]F[16]F[8]|\n\nW[16]Q[16]Q[16]Q[16]Q[16]H[16]H[16]H[16]H[16]G[16]G[16]G[16]G[16]F[16]F[16]G[16]|\nG[8]H[4-*]F[16]G[16]H[16]G[16]G[16]F[16]F[16]A[16]|\nS[8]F[8]D[8]A[16]S[16]S[4]@[16]A[16]S[16]A[16]|\n\nS[8]F[8]F[8]G[16]H[16]H[2]|\nW[16]Q[16]Q[16]Q[16]Q[16]H[16]H[16]H[16]H[16]G[16]G[16]G[16]G[16]F[16]F[16]G[16]|\nG[8]H[4]@[16]F[16]F[16]G[16]H[16]G[16]G[16]F[16]F[8]|\n\nW[16]Q[16]Q[16]Q[16]Q[16]H[16]H[16]H[16]H[16]G[16]G[16]G[16]G[16]F[16]F[16]G[16]|\nG[8]H[4]@[16]F[16]F[16]G[16]H[16]G[16]G[16]F[16]F[16]A[16]|\nS[8]F[8]D[8]A[16]S[16]S[4]@[8-*]A[16]|\n\nS[8]F[8]F[8]G[16]H[16]H[4-*]@[16]A[16]|\nS[8]F[8]D[8]A[16]S[16]S[8]F[8]F[8]G[16]G[16]|\nG[4]@[16]F[16]F[16]G[16]H[8-*]G[16]G[8-*]F[16]|\n\n(FH)[8]Q[8]H[8]G[8]F[4]G[4]|\n(FH)[2-*](AD)[4]|\nH[8]Q[8]W[8]Q[8]H[4]G[4]|\n\n(SF)[2-*]@[8]F[16]G[16]|\nH[8]G[16]G[16]G[16]F[16]S[8]S[4]@[8]S[16]A[16]|\nS[8]F[16]F[16]F[16]G[16]H[8]H[4]@[8]F[16]G[16]|\n\nH[8]G[16]G[16]G[16]F[16]S[8]S[4]@[8]S[16]A[16]|\nS[16]F[16]F[16]F[16]F[16]H[16]G[8]G[4]@[8]H[16]G[16]|\nH[8-*]H[16]H[16]W[16]Q[8]Q[4]@[8]F[16]S[16]|\n\nF[8-*]F[16]F[16]G[16]H[8]H[4-*]S[16]A[16]|\nS[8]F[16]F[16]F[16]G[16]H[8]@[8]H[8]G[16]F[16]D[8]|\nS[8]S[16]A[16]A[16]S[16]S[8]S[4]@[8]H[16]G[16]|\n\nH[8-*]H[16]H[16]W[16]Q[8]Q[4]@[8]F[16]S[16]|\nF[8-*]F[16]F[16]G[16]H[8]H[4]@[8]S[16]A[16]|\nS[8]F[16]F[16]F[16]G[16]H[8]H[8]H[8]G[16]F[16]D[8]|\n\nS[8]S[16]A[16]A[16]S[16]S[8]S[4]@[8]H[8]|\nG[8-*]F[16]F[16]D[16]S[8]S[2]|\nH[16]S[16]F[16]H[16]G[16]A[16]D[16]N[16]N[4]@[16]A[16]D[16]G[16]|\n\nH[16]S[16]F[16]H[16]G[16]A[16]D[16]N[16]N[4]@[16]A[16]D[16]G[16]|\nH[16]S[16]F[16]H[16]G[16]A[16]D[16]N[16]N[4]@[16]Q[16]E[16]T[16]|\n\nY[16]W[16]R[16]Y[16]T[16]Q[16]E[16]H[16]E[16]Q[16]F[32]G[32]H[32]J[32]Q[32]W[32]E[32]R[32]T[32]Y[32]U[32]U[32]|\nU[2]|\n\nW[16]Q[16]Q[16]Q[16]Q[16]H[16]H[16]H[16]H[16]G[16]G[16]G[16]G[16]F[16]F[16]G[16]|\nG[8]H[4-*]F[16]G[16]H[16]G[16]G[16]F[16]F[8]|\n\nW[16]Q[16]Q[16]Q[16]Q[16]H[16]H[16]H[16]H[16]G[16]G[16]G[16]G[16]F[16]F[16]G[16]|\nG[8]H[4-*]F[16]G[16]H[16]G[16]G[16]F[16]F[16]A[16]|\nS[8]F[8]D[8]A[16]S[16]S[4]@[16]A[16]S[16]A[16]|\n\nS[8]F[8]F[8]G[16]H[16]H[2]|\nW[16]Q[16]Q[16]Q[16]Q[16]H[16]H[16]H[16]H[16]G[16]G[16]G[16]G[16]F[16]F[16]G[16]|\nG[8]H[4]@[16]F[16]F[16]G[16]H[16]G[16]G[16]F[16]F[8]|\n\nW[16]Q[16]Q[16]Q[16]Q[16]H[16]H[16]H[16]H[16]G[16]G[16]G[16]G[16]F[16]F[16]G[16]|\nG[8]H[4]@[16]F[16]F[16]G[16]H[16]G[16]G[16]F[16]F[16]A[16]|\n\nS[8]F[8]D[8]A[16]S[16]S[4]@[8-*]A[16]|\nS[8]F[8]F[8]G[16]H[16]H[4-*]@[16]A[16]|\nS[8]F[8]D[8]A[16]S[16]S[8]F[8]F[8]G[16]G[16]|\n\nG[4]@[16]F[16]F[16]G[16]H[8-*]G[16]G[8-*]F[16]|\nH[8]Q[8]H[8]G[8]F[4]A[4]|\n(AFH)[2](NMA)[2]"
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,10 @@
{
"name": "起风了",
"author": "提瓦特钓鱼玳师",
"description": "五线谱网址https://musescore.com/user/28484959/scores/5403434",
"bpm": "80",
"time_signature": "4/4",
"composer": "堀辰雄",
"arranger": "Earisty",
"notes": "C[16]V[16]B[16]N[8]Z[16]A[16]N[2]@[16]|\nC[16]V[16]B[16]N[8]Z[16]A[16]N[16]B[16]N[16]V[16]B[16]C[16]V[16]Z[8]|\nC[16]V[16]B[16]N[8]Z[16]A[16]N[2]@[16]|\n\nC[16]V[16]B[16]N[8]Z[16]A[16]N[16]B[16]N[16]V[16]B[16]C[16]V[16]Z[8]|\nD[16]F[16]G[16]H[8]A[16]Q[16]H[2]@[16]|\nD[16]F[16]G[16]H[8]A[16]Q[16]H[16]G[16]H[16]F[16]G[16]D[16]F[16]A[8]|\n\nD[16]F[16]G[16]H[8]A[16]Q[16]H[2]@[16]|\n(XB)[2](XV)[2]|\nB[8-*]V[16]B[8-*]V[16]B[8]N[8]A[8]N[8]|\nB[8-*]V[16]B[8-*]V[16]B[8]N[8]B[8]V[8]Z[4]|\n\nB[8-*]V[16]B[8-*]V[16]B[8]N[8]A[8]N[8]|\nB[8-*]N[16]B[8]V[8]B[2]|\nB[8-*]V[16]B[8-*]V[16]B[8]N[8]A[8]N[8]|\nB[8-*]N[16]B[8]V[8]X[4]N[16]B[16]V[16]B[16]|\n\nV[4]N[16]B[16]V[16]B[16]V[8-*]Z[16]N[16]B[16]V[16]B[16]|\nV[2]V[8]B[8]N[8]V[8]|\nS[8]A[16]S[8-*]@[16]V[16]D[8]S[16]D[4]@[16]|\n\nD[8]S[16]D[8-*]N[8]F[16]G[16]F[16]D[16]S[8]A[8]|\nS[8]A[16]S[8]A[16]S[16]A[16]S[8]A[16]B[8]A[8-*]|\nN[2]V[8]B[8]N[8]V[8]|\n\nS[8]A[16]S[8-*]@[16]V[16]D[8]S[16]D[4]@[16]|\n(NAD)[8]S[16]D[8-*]N[8]F[16]G[16]F[16]D[16]S[8]A[8]|\nS[8]H[16]H[8-*]A[8]S[8]H[16]H[8]A[8]S[16]|\n\nS[2-*]F[8]G[8]|\nH[8]W[16]Q[8-*]W[16]Q[8-*]W[16]Q[8-*]F[16]H[16]|\nH[8]W[16]Q[8-*]W[16]Q[8-*]W[16]Q[8-*]H[8-*]|\n\nG[8]F[16]S[8]F[8]S[16]G[8]F[16]S[8]F[8-*]|\nH[4]H[16]J[16]H[8]G[4]F[8]G[8]|\nH[8]W[16]Q[8-*]W[16]Q[8-*]W[16]Q[8-*]G[4]|\n\nH[8]W[16]Q[8-*]W[16]Q[8-*]W[16]Q[8-*]H[8-*]|\nG[8]F[16]S[8]H[8-*]G[8]F[16]S[8]F[8-*]|\nF[2-*]S[16]H[8-*]|\n\nG[8]F[16]S[8]H[8-*]G[8]F[16]S[8]F[8-*]|\n(CDF)[16](VF)[16](BG)[16](NH)[8](ZA)[16](AQ)[16](NH)[2]@[16]|\n(CD)[16](VF)[16](BG)[16](NH)[8](ZA)[16](AQ)[16](NH)[16](BG)[16](NH)[16](VF)[16](BG)[16](CD)[16](VF)[16](ZA)[8]|\n\n(CD)[16](VF)[16](BG)[16](NH)[8](ZA)[16](AQ)[16](NH)[2]@[16]|\n(XB)[2](XV)[2]|\nB[8-*]V[16]B[8-*]V[16]B[8]N[8]A[8]N[8]|\nB[8-*]V[16]B[8-*]V[16]B[16]N[16]B[16]V[16]Z[4]|\n\nB[8-*]V[16]B[8-*]V[16]B[8]N[8]A[8]N[8]|\nB[8-*]N[16]B[8]V[8]B[2]|\nB[8-*]V[16]B[8-*]V[16]B[8]N[8]A[8]N[8]|\nB[8-*]N[16]B[8]V[8]X[4]N[16]B[16]V[16]B[16]|\n\nV[4]N[16]B[16]V[16]B[16]V[8-*]Z[16]N[16]B[16]V[16]B[16]|\nV[2]V[8]B[8]N[8]V[8]|\nS[8]A[16]S[8-*]@[16]V[16]D[8]S[16]D[4]@[16]|\n\nD[8]S[16]D[8-*]N[8]F[16]G[16]F[16]D[16]S[8]A[8]|\nS[8]A[16]S[8]A[16]S[16]A[16]S[8]A[16]B[8]A[8-*]|\nN[2]V[8]B[8]N[8]V[8]|\n\nS[8]A[16]S[8-*]@[16]V[16]D[8]S[16]D[4]@[16]|\n(NAD)[8]S[16]D[8-*]N[8]F[16]G[16]F[16]D[16]S[8]A[8]|\nS[8]H[16]H[8-*]A[8]S[8]H[16]H[8]A[8]S[16]|\n\nS[2-*]F[8]G[8]|\nH[8]W[16]Q[8-*]W[16]Q[8-*]W[16]Q[8-*]G[16]H[16]|\nH[8]W[16]Q[8-*]W[16]Q[8-*]W[16]Q[8]H[8-*]|\n\nG[8]F[16]S[8]F[8]S[16]G[8]F[16]S[8]F[8-*]|\nH[4]H[16]J[16]H[8]G[4]F[8]G[8]|\nH[8]W[16]Q[8-*]W[16]Q[8-*]W[16]Q[8-*]G[8]|\n\nH[8]W[16]Q[8-*]W[16]Q[8-*]W[16]Q[8]H[8-*]|\nG[8]F[16]S[8]H[8-*]G[8]F[16]S[8]F[8-*]|\nF[2-*]S[16]H[8-*]|\n\nG[8]F[16]S[8]H[8-*]G[8]F[16]S[8]F[8-*]|\nF[1]|\nC[16]V[16]B[16]N[8]Z[16]A[16]N[2]@[16]|\nC[16]V[16]B[16]N[8]Z[16]A[16]N[16]B[16]N[16]V[16]B[16]C[16]V[16]Z[8]|\n\nC[16]V[16]B[16]N[8]Z[16]A[16]N[2]@[16]|\n(XB)[2](XV)[2]"
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -6,9 +6,11 @@
"2.小星星变奏曲",
"3.Unknown Mother Goose [アンノウン・マザーグース]",
"4.铃芽之旅[Suzume]",
"5.Flower Dance"
"5.Flower Dance",
"6.起风了",
"7.千本樱 (Eric Chen)"
]
const base_path = "assets/"
const base_path = "assets/score_file/"
/**
*
@@ -118,31 +120,31 @@
// 读取队列间隔时间
let music_interval = typeof(settings.music_interval) === 'undefined' ? 0 : parseInt(settings.music_interval, 10);
let local_music_dic = {}; // 存储本地乐曲对照字典
// 写入本地乐曲对照字典
for (const each of music_list) {
if (each !== "example") {
// 从文件名提取编号
let temp_num = each.split(".")[0];
local_music_dic[temp_num] = each;
}
}
if (music_queue === 0 || music_queue === "") { // 单曲执行
if (music_single !== 0) {
return {
"type": "single",
"repeat": music_repeat,
"repeat_interval": repeat_interval,
"music": music_single,
"music": local_music_dic[music_single.split(".")[0]]
};
} else {
log.error(`错误JS脚本配置有误单曲未选择`);
return null;
}
} else { // 队列执行
let local_music_dic = {}; // 存储本地乐曲对照字典
let temp_music_list = []; // 存储乐曲名
// 写入本地乐曲对照字典
for (const each of music_list) {
if (each !== "example") {
// 从文件名提取编号
let temp_num = each.split(".")[0];
local_music_dic[temp_num] = each;
}
}
// 读取乐曲队列配置
for (const num of music_queue.split(" ")) {
if (Object.keys(local_music_dic).includes(num)) {
@@ -421,54 +423,58 @@
if (settings_msg == null) {
return null
}
if (settings_msg["type"] === "single") { // 单曲
// 读取乐谱
const music_msg = await get_music_msg(settings_msg["music"]);
const music_sheet = parseMusicSheet(music_msg["notes"]);
for (let i = 0; i < settings_msg["repeat"]; i++) {
await play_sheet(music_sheet, music_msg["bpm"], music_msg["time_signature"]);
// 单曲循环间隔
if (settings_msg["repeat"] !== 1 && i !== settings_msg["repeat"] - 1) {
await sleep(settings_msg["repeat_interval"] * 1000);
}
}
} else { // 队列
// 存储读取的乐谱
let music_msg_list = [];
// 读取乐谱
for (const music_name of settings_msg["music"]) {
try {
if (settings_msg["type"] === "single") { // 单曲
// 读取乐谱
const music_msg = await get_music_msg(settings_msg["music"]);
const music_sheet = parseMusicSheet(music_msg["notes"]);
music_msg_list.push([music_name, music_msg, music_sheet]);
}
let repeat_queue = settings_msg["repeat_mode"] === "队列循环" ? settings_msg["repeat"] : 1;
for (let i = 0; i < settings_msg["repeat"]; i++) {
await play_sheet(music_sheet, music_msg["bpm"], music_msg["time_signature"]);
for (let r = 0; r < repeat_queue; r++) {
for (const music_msg of Object.entries(music_msg_list)) {
let repeat_single = settings_msg["repeat_mode"] !== "队列循环" ? repeat_single = settings_msg["repeat"] : 1;
// 单曲循环间隔
if (settings_msg["repeat"] !== 1 && i !== settings_msg["repeat"] - 1) {
await sleep(settings_msg["repeat_interval"] * 1000);
}
}
} else { // 队列
// 存储读取的乐谱
let music_msg_list = [];
// 读取乐谱
for (let i = 0; i < settings_msg["music"].length; i++) {
const music_msg = await get_music_msg(settings_msg["music"][i]);
const music_sheet = parseMusicSheet(music_msg["notes"]);
for (let i = 0; i < repeat_single; i++) {
await play_sheet(music_msg[2], music_msg[1]["bpm"], music_msg[1]["time_signature"]);
log.info(`曲目: ${music_msg[0]} 演奏完成`);
if (repeat_single !== 1) {
await sleep(settings_msg["repeat_interval"] * 1000); // 单曲循环间隔
music_msg_list.push([settings_msg["music"][i], music_msg, music_sheet]);
}
let repeat_queue = settings_msg["repeat_mode"] === "队列循环" ? settings_msg["repeat"] : 1;
let repeat_single = settings_msg["repeat_mode"] !== "队列循环" ? settings_msg["repeat"] : 1;
for (let r = 0; r < repeat_queue; r++) {
for (let j = 0; j < music_msg_list.length; j++) {
for (let i = 0; i < repeat_single; i++) {
await play_sheet(music_msg_list[j][2], music_msg_list[j][1]["bpm"], music_msg_list[j][1]["time_signature"]);
log.info(`曲目: ${music_msg_list[j][0]} 演奏完成`);
if (repeat_single !== 1) {
await sleep(settings_msg["repeat_interval"] * 1000); // 单曲循环间隔
}
}
// 队列内间隔
if (music_msg_list.indexOf(music_msg_list[j]) !== music_msg_list.length - 1) {
await sleep(settings_msg["interval"] * 1000);
}
}
// 队列间隔
if (music_msg_list.indexOf(music_msg) !== music_msg_list.length - 1) {
await sleep(settings_msg["interval"] * 1000);
// 队列循环间隔
if (repeat_queue !== 1 && r !== repeat_queue - 1) {
await sleep(settings_msg["repeat_interval"] * 1000);
}
}
// 队列循环间隔
if (repeat_queue !== 1 && r !== repeat_queue - 1) {
await sleep(settings_msg["repeat_interval"] * 1000);
}
}
} catch (error) {
log.error(`出现错误: ${error}`);
}
}
await main();

View File

@@ -1,7 +1,7 @@
{
"manifest_version": 1,
"name": "原琴·五线谱版",
"version": "1.1",
"version": "2.0",
"bgi_version": "0.42.5",
"description": "功能描述:功能及其强大的原琴脚本\n核心功能------------------------------>\n1.轻松实现根据五线谱翻版琴谱,支持单音、和弦\n2.曲谱支持录入BPM、拍号\n3.特殊音符支持休止符、浮点音符、(三/六)连音、(三/六)连音标记线、装饰音·倚音\n注意事项------------------------------>\n1.使用前请装备原琴\n2.音域只有3个八度受原琴音域限制本脚本的上限取决于翻谱的大佬卑微\n3.实际上装饰音·倚音的时长视为基础时值单位(比如拍号2/4的基础时值单位就是4分音符)的1/16\n4.制铺说明曲谱JSON文件的notes必须保证为一行且不能包括空白符换行符除外小节之间用|隔开,|不是必要的,作用是方便曲谱维护\n---------------------------------------->\n作者提瓦特钓鱼玳师\n脚本反馈邮箱hijiwos@hotmail.com",
"authors": [

View File

@@ -8,7 +8,9 @@
"2.小星星变奏曲-[7:57]",
"3.Unknown Mother Goose [アンノウン・マザーグース]-[4:08]",
"4.铃芽之旅[Suzume]-[3:52]",
"5.Flower Dance-[5:20]"
"5.Flower Dance-[5:20]",
"6.起风了-[3:22]",
"7.千本樱 Eric Chen-[4:03]"
]
},
{