Python 和准确的时间

Python and accurate timing

我正在尝试编写一些代码来使用 python 播放声音。具体来说,我有一些教堂钟声的录音,我正试图以特定的顺序播放它们以重现教堂钟声的声音。目前我正在使用 pygame 来处理计时和播放,如下所示:

import pygame.mixer as mx
import pygame.time as tm

mx.init()

sounds = [mx.Sound('./data/bell-{0}.wav'.format(i)) for i in range(1,9)]

def round():
    for i in range(8):
        sounds[i].play()
        tm.delay(250)            

for i in range(3):
    round()
    round()
    tm.wait(250)

mx.quit()

这应该演奏类似 'ringing rounds' 的东西,一个常规演奏的音阶,每个铃声间隔 250 毫秒,每个音阶之后有 250 毫秒的额外间隔。

但是我得到的东西很不平衡,即使我运行python和nice -n -19 python rounds.py一样。时间的变化有点难以估计,但我猜它经常超过 100 毫秒,偶尔超过 200 毫秒。

如果我将声音文件导入 Audacity 并且 space 它们相隔 250 毫秒,我会得到一个漂亮、均匀的比例,所以问题不仅仅是声音文件编辑不均匀。

我怎样才能改善这个时间安排?在我看来,准确的计时在游戏库中应该非常重要,尤其是当负载很轻时(如本例)。

pygame.mixer.pre_init(44100, -16, 1, 512) 放在 mx.init() 之前。