脚本分享:为歌词添加或去除简谱符号
synthesizerv吧
全部回复
仅看楼主
level 9
ly50247 楼主
https://www.vsqx.top/project/vn12524
选择音符运行:以所选的第一个音符为 1 为当前音轨所有歌词添加简谱符号
不选音符运行:去除当前音轨所有歌词中的简谱符号
扒谱时,我们可能想知道当前调式下的音阶,但对钢琴键盘不熟悉的话很麻烦。这个脚本可以辅助做到这一点。
选择一个音符并且运行该脚本,会以该音符为 1 为当前音轨所有歌词添加简谱符号。
运行前:
运行后:
添加的简谱符号不会影响发音(- + br 等特殊符号不会添加)。
如果想去除已经添加的简谱符号,不选任何音符再运行一次就可以。
运行前不需要确定当前歌曲的 1 在哪,可以随便找一个运行,结果依然可以参考(看哪些音带升号,可能扒错了)。
另外如果需要扒的歌曲有简谱,那根据简谱找到 1 运行即可,还可以根据简谱快速扒谱(先正常提取音符,选择 1 的音符运行该脚本,然后根据简谱调整错误的音符)。
2025年02月25日 14点02分 1
level 9
ly50247 楼主
不方便登录的话也可以直接复制以下内容并保存为“为歌词添加或去除简谱符号.js”:
function getClientInfo() {
return {
"name" : "为歌词添加或去除简谱符号",
"author" : "陌辞寒([email protected])",
"versionNumber" : 1,
"minEditorVersion" : 65537
};
}
// 选择音符运行:以所选的第一个音符为 1 为当前音轨所有歌词添加简谱符号
// 不选音符运行:去除当前音轨所有歌词中的简谱符号
function main() {
var specialNotes = ["-", "+", "", " ", ".cl", "br", "'"];
var notations = ["1", "1
#", "2", "2#
", "3", "4", "4
#", "5", "5#
", "6", "6#", "7"];
var selectedNotes = SV.getMainEditor().getSelection().getSelectedNotes();
var group = SV.getMainEditor().getCurrentGroup().getTarget();
if (selectedNotes.length == 0) {
for (var i = 0; i < group.getNumNotes(); i++) {
var note = group.getNote(i);
note.setLyrics(note.getLyrics().replace(/ [1-7]#?$/, ""));
}
SV.finish();
return;
}
var basePitch = selectedNotes[0].getPitch();
for (var i = 0; i < group.getNumNotes(); i++) {
var note = group.getNote(i);
var lyrics = note.getLyrics();
if (specialNotes.indexOf(lyrics) >= 0) {
continue;
}
lyrics = lyrics.replace(/ [1-7]#?$/, "");
note.setLyrics(lyrics + " " + notations[(120 + note.getPitch() - basePitch) % 12]);
}
SV.finish();
}
2025年02月25日 14点02分 2
level 9
ly50247 楼主
我又添加了个脚本:为歌词添加或去除简谱符号(自动版).js
功能类似,但可以自动确定为 1 的音符并为当前音轨所有歌词添加简谱符号(在非自然大小调的情况结果可能是错的)。
比如:
---
不方便登录的话也可以直接复制以下内容并保存为“为歌词添加或去除简谱符号(自动版).js”:
function getClientInfo() {
return {
"name" : "为歌词添加或去除简谱符号(自动版)",
"author" : "陌辞寒([email protected])",
"versionNumber" : 1,
"minEditorVersion" : 65537
};
}
// 选择音符运行:自动确定为 1 的音符并为当前音轨所有歌词添加简谱符号
// 不选音符运行:去除当前音轨所有歌词中的简谱符号
function main() {
var specialNotes = ["-", "+", "", " ", ".cl", "br", "'"];
var notations = ["1", "1
#", "2", "2#
", "3", "4", "4
#", "5", "5#
", "6", "6#", "7"];
var selectedNotes = SV.getMainEditor().getSelection().getSelectedNotes();
var group = SV.getMainEditor().getCurrentGroup().getTarget();
if (selectedNotes.length == 0) {
for (var i = 0; i < group.getNumNotes(); i++) {
var note = group.getNote(i);
note.setLyrics(note.getLyrics().replace(/ [1-7]#?$/, ""));
}
SV.finish();
return;
}
var pitches = new Array(12);
for (var i = 0; i < pitches.length; i++) {
pitches[i] = 0;
}
for (var i = 0; i < group.getNumNotes(); i++) {
pitches[group.getNote(i).getPitch() % 12]++;
}
var basePitch = 0;
var maxHits = 0;
for (var i = 0; i < 12; i++) {
// 只考虑自然大小调,其他情况结果可能是错的
var hits = pitches[i] +
pitches[(i + 2) % 12] + pitches[(i + 4) % 12] + pitches[(i + 5) % 12] +
pitches[(i + 7) % 12] + pitches[(i + 9) % 12] + pitches[(i + 11) % 12];
if (maxHits < hits) {
maxHits = hits;
basePitch = i;
}
}
for (var i = 0; i < group.getNumNotes(); i++) {
var note = group.getNote(i);
var lyrics = note.getLyrics();
if (specialNotes.indexOf(lyrics) >= 0) {
continue;
}
lyrics = lyrics.replace(/ [1-7]#?$/, "");
note.setLyrics(lyrics + " " + notations[(120 + note.getPitch() - basePitch) % 12]);
}
SV.finish();
}
2025年02月26日 05点02分 4
1