是否有将流转换为给定键的函数或简单方法?
我想在循环中使用它,例如,获取一组主要流并将所有流转置为 C 大调(这样我就可以对它们进行一些统计工作)。
我看到的所有移调工具都使用音程或音调数量,而不是固定键。编写我的函数应该不难,但我想它必须已经完成...谢谢
最佳答案
如果 s
是一个 Stream
(例如 Score
或 Part
),那么 s .transpose('P4')
会将其上移纯四度等。如果您知道 s
的调为 k
大调,则 i = interval.Interval(k, 'C')
会让你执行 s.transpose(i)
从 k
移动到 C。如果你不如果不知道 s
的 key ,那么 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-minor -> F-major)或在 k.alternativeInterpretations
中找到最佳大调分析。或者如果是未成年人,则将其转为未成年人,等等。
关于python - music21 - 将流转置为给定的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37494229/