gpt4 book ai didi

javascript - 如何使用 JavaScript 移调音乐和弦?

转载 作者:可可西里 更新时间:2023-11-01 02:21:50 25 4
gpt4 key购买 nike

我想知道如何创建一个用于移调音乐和弦的 javascript 函数。

因为我不希望这里的每个人都是音乐家,所以我将尝试解释它在音乐理论中的运作方式。我希望我没有忘记什么。如果是,请音乐家们指正。

1) 简单的和弦

简单的和弦几乎和字母表一样简单,它是这样的:

C, C#, D, D#, E, F, F#, G, G#, A, A# B

从 B 再次循环到 C。因此,如果原始和弦是 E 并且我们想要移调 +1,则生成的和弦是 F。如果我们转置 +4,得到的和弦是 G#

2) 扩展和弦

它们几乎像简单的和弦一样工作,但包含更多的字符,在移调时可以安全地忽略这些字符。例如:

Cmi, C#7, Dsus7, Emi, Fsus4, F#mi, G ...

再一次,与简单的和弦一样,如果我们转置 Dsus7 + 3 = Fsus7

3) 无根低音

当低音演奏的音调与和弦根音不同时,就会出现问题。这在和弦后用斜线标记,也需要移调。示例:

C/G, Dmi/A, F#sus7/A#

与示例1和示例2一样,一切都是一样的,但是斜杠后面的部分也需要转置,因此:

C/G + 5 = F/C

F#su​​s7/A# + 1 = Gsus7/B

我想应该就这些了,除非我忘记了什么。

基本上,假设您有一个名为 chord 的 javascript 变量和转置值 transpose。什么代码可以移调和弦?

例子:

var chord = 'F#sus7/C#';
var transpose = 3; // remember this value also may be negative, like "-4"
... code here ...
var result; // expected result = 'Asus7/E';

最佳答案

像这样的小东西怎么样:

function transposeChord(chord, amount) {
var scale = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
return chord.replace(/[CDEFGAB]#?/g,
function(match) {
var i = (scale.indexOf(match) + amount) % scale.length;
return scale[ i < 0 ? i + scale.length : i ];
});
}

alert(transposeChord("Dm7/G", 2)); // gives "Em7/A"
alert(transposeChord("Fmaj9#11", -23)); // gives "F#maj9#11"

请注意,我加入“F#maj9#11”示例只是为了让您更多地思考什么构成了一个有效的和弦名称:您可能会发现一个“#”尖锐的符号没有跟在后面一封信(在本例中它属于“11”)。

而且,显然,我的函数只理解升号,不理解降号,并且不理解键,因此,例如,transposeChord("C/E", 1) 将给出“C#/F "而实际上应该是 "C#/E#"。

关于javascript - 如何使用 JavaScript 移调音乐和弦?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7936843/

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