music21 - 将流转置为给定密钥

时间:2016-05-28 00:58:34

标签: python music21

是否有将流转换为给定密钥的功能或简便方法?

我想在一个循环中使用它,例如,取一组主流并将所有的转置到C大调(这样我就可以用它们做一些统计工作)。

我看到的所有移调工具都使用间隔或音调数,而不是固定键。编写我的函数应该不会那么难,但我想它必须已经完成了...谢谢

1 个答案:

答案 0 :(得分:3)

如果sStream(例如ScorePart),则s.transpose('P4')会将其移至完美四等等。您知道s作为k专业的密钥,然后i = interval.Interval(k, 'C')会让您s.transpose(i)k转移到C. {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-minor - > F-major)或在k.alternativeInterpretations中找到最佳主键分析。如果是未成年人等,可将其转换为未成年人