2015-05-16 2 views
1

Рассмотрите следующий тестовый код.Почему музыка21 использует атрибуты тангажа неожиданным образом?

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 

Существует часто разница между моим ручным вычислением частотой соответственно. пространство основного тона и значение music21. Обратите внимание, что иногда это различие может быть примерно на октаву (например, первые две частоты заметок C), но в основном это примерно один тон. Еще одна странность в том, что для третьей частоты тестирования значения тангажа одинаковы, а частоты нет.

Что может быть неправильным в отношении моих формул?

ответ

1

Таким образом, кажется, что в то время как отклонение октавы было ошибкой, другие отклонения представляют собой поведение. См. https://github.com/cuthbertLab/music21/issues/96 для подробного объяснения.

Смежные вопросы