如何使用 JavaScript 转调音乐和弦?

2024-04-21

我想知道如何创建一个 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#sus7/A# + 1 = Gsus7/B

我想这应该就是全部了,除非我忘记了什么。

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

Example:

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#”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 JavaScript 转调音乐和弦? 的相关文章

随机推荐