我试图在给定的旋律中获得音高之间的过渡速率(只是名字,没有八度)。
例如,如果我的旋律音高是(按顺序)C D E D F C B C,我应该知道C-D过渡发生的速率为0.5,B-C的速率为1,依此类推。

我应该能够用Python编写一个函数来执行此操作(可能使用很多elifs ...),但是看起来music21也必须能够轻松地做到这一点。我在这里查看了文档,Google以及其他问题……我找不到方法,但是我怀疑我缺少一个可能对我真正有用的工具包。

最佳答案

我建议做这样的事情:

from music21.ext.more_itertools import windowed
from collections import Counter
# assuming s is your Stream
nameTuples = []
for n1, n2 in windowed(s.recurse().notes, 2):
    nameTuples.append((n1.name, n2.name))
c = Counter(nameTuples)
totalNotes = len(s.recurse().notes) # py2 cast to float
{k : v / totalNotes for k, v in c.items()}


窗口化的好处在于,创建Trigrams等非常容易。

10-07 16:50