1

我一直在尝试使用 Python 模块 Music21 尝试从一组和弦中获取键,但无论我放入什么,它似乎总是返回c minor。任何想法我做错了什么?

我尝试了各种输入字符串,打印语句吐出所有正确的和弦名称,但结果键始终是 c 小调!

我在带有 VSCode 的 Windows 上使用 Python 3.7.4。

string = 'D, Em, F#m, G, A, Bm'

s = stream.Stream()

for c in string.split(','):
    print(harmony.ChordSymbol(c).pitchedCommonName)
    s.append(harmony.ChordSymbol(c))

key = s.analyze('key')

print(key)
4

2 回答 2

0

如果你给ChordSymbol一些时间,它会起作用。分析按时间对分量进行加权,因此时间为零(ChordSymbols 的默认值)会给您带来废话。

    d = harmony.ChordSymbol('D')
    d.quarterLength = 2
    s = stream.Stream([d])
    s.analyze('key')
于 2021-03-13T02:32:11.067 回答
0

看起来music21 Analyze 不适用于ChordSymbol。

作为替代方案,您可以手动设置所有和弦的音符,并对其进行分析。编码:

string = 'D, Em, F#m, G, A, Bm'
 s = stream.Stream()

for d in string.split(','):
    print(harmony.ChordSymbol(d).pitchedCommonName)
    for p in harmony.ChordSymbol(d).pitches:
        n = note.Note()
        n.pitch = p 
        s.append(n)
key = s.analyze('key')
print(key)

正如预期的那样,返回 D 大调。

于 2019-11-30T17:43:18.963 回答