我会这样做:
表 1 半音顺序映射到音符:
0 -> C
1 -> C#
2 -> D
3 -> D#
4 -> E
5 -> F
6 -> F#
etc.
表 2 和弦名称映射到多个半音间隔:
Major -> 0
Major -> 4
Major -> 8
Minor -> 0
Minor -> 3
Minor -> 8
etc
现在您拥有构建和识别和弦所需的一切。
示例:查找 D 大调的音符
1)在表1中查找D的索引开始,即2
2) 找出表 2 中主弦的所有区间,即 0、4 和 8。
3) 通过将表 2 中找到的区间添加到起始索引中,找到表 1 中的注释。
像这样:
2 + 0 = 2 => D,
2 + 4 = 6 => F#,
2 + 8 = 10 => A
当加 3 的结果高于 11 时,您需要减去 12 才能得到正确的音符,高一个八度。当您的绳索跨越超过一个八度音阶时,您要么需要在表 1 中有两个八度音阶,要么对于 23 以上的数字减去 24。
这不处理何时使用 # 或 b 表示半音。
如果您需要直观地构造手指放在指板上的位置,而不是表 1 中只有一个八度音阶的音符,将所有音符存储在指板上,并在表 2 中存储六弦上所有音品的所有索引举行。在这种情况下,您需要为所有琴弦使用不同的琴弦标识符,即 A 大调、A# 大调等。