我在python中设计一个软件来帮助我构图并在我玩的时候提出有用的建议。目前,密钥的定义方式如下:
noteDict = {"R":"C", #root
"m2":"Db", #minor 2nd
"M2":"D", #major 2nd
"m3":"Eb", #etc
"M3":"E",
"P4":"F",
"A4":"F#",
"D5":"Gb",
"P5":"G",
"A5":"G#",
"m6", "Ab",
"M6", "A",
"m7", "Bb",
"M7", "B"}
#stores noteDict, and adds entries for notes in a different format:
#ex: knows that a m6 is the same as a b13 and a D5 is the same as a b5
C = key(noteDict)
这可以按预期工作,但是能够拥有一组规则来定义一个键的构造而不是手工编码就很好。存在明显的规则,例如"增强的第4个是具有尖锐"的完美第4个,但是我仍然需要一种方法来产生基本尺度(即在C大调:R M2 M3 P4 ... - CDE F ...)然后将修改应用于基本比例。
这样做的一个显而易见的方法是维护一个基于半音的间隔表,所以如果你被告知一个根(例如C),你可以向根添加3个半音以达到次要的第三个(C - > ; Db - > D - > Eb)。
在处理诸如Cb major之类的键时会出现此方法的问题。找到Cb正确拼写的小三分之一将添加三个半音并吐出D而不是正确的Ebb。如何为任意键生成拼写正确的noteDict?