1

次のテスト コードを検討してください。

from music21 import pitch

C0 = 16.35

for f in [261, 130, 653, 64, 865]:
    p = pitch.Pitch()
    p.frequency = f

    # Compare manual frequency with music21 frequency
    f1 = p.frequency
    f2 = C0 * pow(2, p.octave) * pow(2, p.pitchClass / 12) * pow(2, p.microtone.cents / 1200)
    print(f, f1, f2)

    # Compare manual pitchspace with music21 pitchspace
    ps1 = p.ps
    ps2 = 12 * (p.octave + 1) + p.pitchClass + p.microtone.cents / 100
    print(ps1, ps2)
    print()

これの出力は

261 260.99999402174154 521.9489797003519
59.958555 71.95855499999999

130 129.99999854289362 259.974590631057
47.892097 59.892097

653 653.0000144741496 652.9362051837928
75.834954 75.834954

64 63.999998381902046 65.86890433005668
35.623683 36.123683

865 864.9999846113213 890.2594167561009
80.702359 81.202359

多くの場合、周波数 resp の手動計算には違いがあります。ピッチスペースとmusic21値。この違いは 1 オクターブ程度になることもありますが (最初の 2 つの C ノートの周波数のように)、ほとんどの場合は 1 トーン程度です。もう 1 つの奇妙な点は、3 番目のテスト周波数では、ピッチスペースの値は同じですが、周波数は同じではないということです。

手動式のどこが間違っている可能性がありますか?

4

1 に答える 1

1

したがって、オクターブのずれはバグでしたが、他のずれは意図された動作です。詳細な説明については、 https://github.com/cuthbertLab/music21/issues/96を参照してください。

于 2015-05-18T14:49:00.990 に答える