文本,基于字符串的和弦识别算法?

Lyd*_*Lyd 6 algorithm music-notation

我正在寻找将字符串表示的音符作为输入的算法,并将和弦的名称作为输出.

例如:

chordName("C", "E", "G")
>>> "C major"
chordName("C", "E", "G", "B")
>>> "C major 7"
chordName("A", "C", "E")
>>> "A minor"
Run Code Online (Sandbox Code Playgroud)

Mic*_*ert 4

我自己的喇叭(即,我是该库的首席开发人员,当然有偏见),但使用 music21 ( http://web.mit.edu/music21/ ),你可以这样做:

>>> from music21 import chord
>>> chord.Chord(['C','E','G']).pitchedCommonName
'C-major triad'    
>>> chord.Chord(['C','E','G','B']).pitchedCommonName
'C-major seventh chord'
Run Code Online (Sandbox Code Playgroud)

或者更晦涩难懂的东西...

>>> chord.Chord(['C','C#','D','E','F#']).pitchedCommonName
'D-tritone-expanding pentachord'
Run Code Online (Sandbox Code Playgroud)

Chord 的完整文档(http://web.mit.edu/music21/doc/moduleReference/moduleChord.html)将帮助您弄清楚如何以您想要的格式获得文本输出。

  • 我记不清我们在哪里获得了名称列表(我认为它在带有确认的代码文档中),但我们将所有和弦减少为其正常形式(chord.Chord().normalForm),然后使与存储的列表进行比较。然后我们根据那里的函数找到和弦的根音——对于标准和弦来说,找到根音并不难。对于非常复杂的和弦,我们使用自己的算法,可能不正确,但似乎效果很好。 (2认同)
  • 哦,请查看这里 http://music.stackexchange.com/questions/12425/looking-for-a-list-of-common-4-note-chords 了解更多信息。 (2认同)