music21 - 将流转置为给定的键

music21 - Transpose streams to a given key

是否有将流转置为给定键的函数或简便方法?

我想在循环中使用它,例如,取一组主要流并将所有流转为 C 大调(这样我就可以对它们进行一些统计工作)。

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

如果 sStream(例如 ScorePart),则 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-minor -> F-major)或在 k.alternativeInterpretations 中找到最佳大调分析。或者如果是未成年人就转为未成年人等等