gpt4 book ai didi

javascript - 正则表达式查询或音乐移调功能

转载 作者:行者123 更新时间:2023-12-02 22:37:16 26 4
gpt4 key购买 nike

我正在创建一个函数,该函数将显示以度为单位的进度来校正音乐和弦。

我有这个功能:

    function transpose(accord, tonOrg, tonDest) {
var scales = {
"GammeDeg": ["I", "II", "III", "IV", "V", "VI", "VII", "#I", "#II", "#III", "#IV", "#V", "#VI", "#VII", "bI", "bII", "bIII", "bIV", "bV", "bVI", "bVII", "*I", "*II", "*III", "*IV", "*V", "*VI", "*VII", "bbI", "bbII", "bbIII", "bbIV", "bbV", "bbVI", "bbVII"],
"GammeC": ["C", "D", "E", "F", "G", "A", "B", "C#", "D#", "E#", "F#", "G#", "A#", "B#", "Cb", "Db", "Eb", "Fb", "Gb", "Ab", "Bb", "C*", "D*", "E*", "F*", "G*", "A*", "B*", "Cbb", "Dbb", "Ebb", "Fbb", "Gbb", "Abb", "Bbb"],
"GammeG": ["G", "A", "B", "C", "D", "E", "F#", "G#", "A#", "B#", "C#", "D#", "E#", "F*", "Gb", "Ab", "Bb", "Cb", "Db", "Eb", "F", "G*", "A*", "B*", "C*", "D*", "E*", "F#*", "Gbb", "Abb", "Bbb", "Cbb", "Dbb", "Ebb", "Fb"],
"GammeD": ["D", "E", "F#", "G", "A", "B", "C#", "D#", "E#", "F*", "G#", "A#", "B#", "C*", "Db", "Eb", "F", "Gb", "Ab", "Bb", "C", "D*", "E*", "F#*", "G*", "A*", "B*", "C#*", "Dbb", "Ebb", "Fb", "Gbb", "Abb", "Bbb", "Cb"],
"GammeA": ["A", "B", "C#", "D", "E", "F#", "G#", "A#", "B#", "C*", "D#", "E#", "F*", "G*", "Ab", "Bb", "C", "Db", "Eb", "F", "G", "A*", "B*", "C#*", "D*", "E*", "F#*", "G#*", "Abb", "Bbb", "Cb", "Dbb", "Ebb", "Fb", "Gb"],
"GammeE": ["E", "F#", "G#", "A", "B", "C#", "D#", "E#", "F*", "G*", "A#", "B#", "C*", "D*", "Eb", "F", "G", "Ab", "Bb", "C", "D", "E*", "F#*", "G#*", "A*", "B*", "C#*", "D#*", "Ebb", "Fb", "Gb", "Abb", "Bbb", "Cb", "Db"],
"GammeB": ["B", "C#", "D#", "E", "F#", "G#", "A#", "B#", "C*", "D*", "E#", "F*", "G*", "A*", "Bb", "C", "D", "Eb", "F", "G", "A", "B*", "C#*", "D#*", "E*", "F#*", "G#*", "A#*", "Bbb", "Cb", "Db", "Ebb", "Fb", "Gb", "Ab"],
"GammeF#": ["F#", "G#", "A#", "B", "C#", "D#", "E#", "F*", "G*", "A*", "B#", "C*", "D*", "E*", "F", "G", "A", "Bb", "C", "D", "E", "F#*", "G#*", "A#*", "B*", "C#*", "D#*", "E#*", "Fb", "Gb", "Ab", "Bbb", "Cb", "Db", "Eb"],
"GammeC#": ["C#", "D#", "E#", "F#", "G#", "A#", "B#", "C*", "D*", "E*", "F*", "G*", "A*", "B*", "C", "D", "E", "F", "G", "A", "B", "C#*", "D#*", "E#*", "F#*", "G#*", "A#*", "B#*", "Cb", "Db", "Eb", "Fb", "Gb", "Ab", "Bb"],
"GammeG#": ["G#", "A#", "B#", "C#", "D#", "E#", "F*", "G*", "A*", "B*", "C*", "D*", "E*", "F#*", "G", "A", "B", "C", "D", "E", "F#", "G#*", "A#*", "B#*", "C#*", "D#*", "E#*", "F**", "Gb", "Ab", "Bb", "Cb", "Db", "Eb", "F"],
"GammeD#": ["D#", "E#", "F*", "G#", "A#", "B#", "C*", "D*", "E*", "F#*", "G*", "A*", "B*", "C#*", "D", "E", "F#", "G", "A", "B", "C#", "D#*", "E#*", "F**", "G#*", "A#*", "B#*", "C**", "Db", "Eb", "F", "Gb", "Ab", "Bb", "C"],
"GammeA#": ["A#", "B#", "C*", "D#", "E#", "F*", "G*", "A*", "B*", "C#*", "D*", "E*", "F#*", "G#*", "A", "B", "C#", "D", "E", "F#", "G#", "A#*", "B#*", "C**", "D#*", "E#*", "F**", "G**", "Ab", "Bb", "C", "D#", "Eb", "F", "G"],
"GammeF": ["F", "G", "A", "Bb", "C", "D", "E", "F#", "G#", "A#", "B", "C#", "D#", "E#", "Fb", "Gb", "Ab", "Bbb", "Cb", "Db", "Eb", "F*", "G*", "A*", "B#", "C*", "D*", "E*", "Fbb", "Gbb", "Abb", "Bbbb", "Cbb", ,"Dbb", ,"Ebb"],
"GammeBb": ["Bb", "C", "D", "Eb", "F", "G", "A", "B", "C#", "D#", "E", "F#", "G#", "A#", "Bbb", "Cb", "Db", "Ebb", "Fb", "Gb", "Ab", "B#", "C*", "D*", "E#", "F*", "G*", "A*", "Bbbb", "Cbb", "Dbb", "Ebbb", "Fbb", "Gbb", "Abb"],
"GammeEb": ["Eb", "F", "G", "Ab", "Bb", "C", "D", "E", "F#", "G#", "A", "B", "C#", "D#", "Ebb", "Fb", "Gb", "Abb", "Bbb", "Cb", "Db", "E#", "F*", "G*", "A#", "B#", "C*", "D*", "Ebbb", "Fbb", "Gbb", "Abbb", "Bbbb", "Cbb", "Dbb"],
"GammeAb": ["Ab", "Bb", "C", "Db", "Eb", "F", "G", "A", "B", "C#", "D", "E", "F#", "G#", "Abb", "Bbb", "Cb", "Dbb", "Ebb", "Fb", "Gb", "A#", "B#", "C*", "D#", "E#", "F*", "G*", "Abbb", "Bbbb", "Cbb", "Dbbb", "Ebbb", "Fbb", "Gbb"],
"GammeDb": ["Db", "Eb", "F", "Gb", "Ab", "Bb", "C", "D", "E", "F#", "G", "A", "B", "C#", "Dbb", "Ebb", "Fb", "Gbb", "Abb", "Bbb", "Cb", "D#", "E#", "F*", "G#", "A#", "B#", "C*", "Dbbb", "Ebbb", "Fbb", "Gbbb", "Abbb", "Bbbb", "Cbb"],
"GammeGb": ["Gb", "Ab", "Bb", "Cb", "Db", "Eb", "F", "G", "A", "B", "C", "D", "E", "F#", "Gbb", "Abb", "Bbb", "Cbb", "Dbb", "Ebb", "Fb", "G#", "A#", "B#", "C#", "D#", "E#", "F*", "Gbbb", "Abbb", "Bbbb", "Cbbb", "Dbbb", "Ebbb", "Fbb"]
};
var tonOrgGamme = scales["Gamme" + tonOrg];
var tonDestGamme = scales["Gamme" + tonDest];
var accordTranpose = accord.replace(/((("I"|"II"|"III"|"IV"|"V"|"VI"|"VII")#\*)|(("I"|"II"|"III"|"IV"|"V"|"VI"|"VII")#)|(("I"|"II"|"III"|"IV"|"V"|"VI"|"VII")b+)|(("I"|"II"|"III"|"IV"|"V"|"VI"|"VII")\**))/g, function(match) {
var i = tonOrgGamme.indexOf(match)
return tonDestGamme[i]
})
return accordTranpose
};

因此,如果我发送要在C中转置的“I”,则函数将返回C。如果我发送“V7”要在C中转置的结果,则结果将为G7。我只希望更改罗马数字的度数,并且以后保持不变,所以我不确定在Regex中写什么。

最佳答案

这不会很难。首先,您需要将用户输入解析为输入中的userKeySignatureuserChordQualityuserNashvilleNumber一部分(您可以这样做)。接下来,找到和弦索引。但是要做到这一点,您首先需要获取键,即纳什维尔数字(罗马数字),以零为基础找出实数。

一旦有了该实数,keys对象/数组结构将使获取所需和弦的根音变得更加容易。

let keys = {
c: ['c', 'd', …]
};

如果您可以将 "C"作为用户选择的键,则可以使用 keys[userSelectedKey.toLowerCase()]
接下来,您需要从纳什维尔编号中找到和弦名称。那有两个问题。首先,纳什维尔数字是罗马数字。第二个问题是它是基于一的,而不是基于零的(数组是基于零的)。但是我们可以通过使用对象或数组来解决此问题。我在这里使用数组。
let nashvilleNumbers = ['I', "II", "III", "IV", "V", "VI", "VII"];

接下来,找到和弦索引:
var chordIndex = nashvilleNumbers.indexOf(userNashvilleNumber);

现在您知道和弦在数组中的位置,您只需要选择键,但是您已经从 userKeySignature解析并检查了它,对吗?
  var selectedKey = keys[userKeySignature];
var selectedRoot = selectedKey[chordIndex];

输出应为 selectedRoot + userChordQuality;

始终验证用户输入。该代码不完整。

关于javascript - 正则表达式查询或音乐移调功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48676113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com