1
有没有一个函数或简单的方法转移流给定的键?我想在一个循环中使用它,例如,采取一组主流并将所有主要流转置为C大调(这样我就可以对它们进行一些统计工作)。music21 - 转置流给定的键
我看到的所有转置工具都使用音调的间隔或数量,而不是固定键。它不应该这么难写我的功能,但我想,它必须已经完成...谢谢
有没有一个函数或简单的方法转移流给定的键?我想在一个循环中使用它,例如,采取一组主流并将所有主要流转置为C大调(这样我就可以对它们进行一些统计工作)。music21 - 转置流给定的键
我看到的所有转置工具都使用音调的间隔或数量,而不是固定键。它不应该这么难写我的功能,但我想,它必须已经完成...谢谢
如果s
是Stream
(如Score
或Part
),然后将s.transpose('P4')
它动起来一个完美的第四等,如果你知道s
作为k
专业的钥匙,那么i = interval.Interval(k, 'C')
会让你做s.transpose(i)
从k
转移到C.如果你不知道s
的关键,那么k = s.analyze('key')
将做一个相当不错的工作(使用Krumhansl探测音法)。把它放在一起。
from music21 import *
for fn in filenameList:
s = converter.parse(fn)
k = s.analyze('key')
i = interval.Interval(k.tonic, pitch.Pitch('C'))
sNew = s.transpose(i)
# do something with sNew
这假设你的作品很可能是主要的。如果不是,您可以将其视为并行专业(f-小调 - > F专业)或在k.alternativeInterpretations
中查找最佳主要关键分析。或者如果它很小,则将其转置为未成年人等。
谢谢迈克尔。我前几天写了自己的代码(但它不能正常工作,所以也许我应该试试这个)。关于主要/次要问题,我在转换前使用“分析”,因此我只保留主要或次要流 –
只是一点改进:代码不起作用,因为'k'和'C'不是注释对象。一个正确的方法可能是用笔记替换'C'。注意('C')并从k得到一个笔记对象。例如:tonic = note.Note(pitch = k.pitchFromDegree(1)),并在区间中使用'tonic'而不是'k'。 –
谢谢!固定(在这个例子中) –