使用Pygame.mixer.sound,声音持续时间不够准确

时间:2016-07-08 21:50:15

标签: python audio pygame

我想为我的神经科学研究生成一系列特定频率和持续时间的音频线索。经过一些谷歌搜索,我发现一个名为Pygame的Python模块似乎能够完成工作。

sound = pygame.sndarray.make_sound(sample_array)   #sample_array is a one-second sine wave I created
sound.play(maxtime = 100)   #play the sample_array for 100ms
pygame.time.delay(1000)     #pause for 1000ms

我在循环中运行这些代码很多次。然而,声音的长度存在微小但明显的差异。我用手机录制了声音,并在Matlab中分析了信号。一些脉冲持续长达180ms,一些短脉冲仅持续80ms,而理论上它们应该持续100ms。

这种变化对我的应用来说太大了。我能做些什么来改善它吗?或者,如果有人能够确认这种精确度超出了Pygame的容量,并且可能建议使用另一个库,那也很棒。

1 个答案:

答案 0 :(得分:0)

看起来这个问题并没有引起太多关注:(

我在这里发布我的解决方法,以防有人想知道。如果我使用sound.play(maxtime = 100)sound.play(-1)然后time.delay(100),则声音的实际持续时间绝不会精确为100毫秒。我的解决方法是预先生成一个wav文件,它具有我需要的长度,然后播放这个wav文件。

sound = pygame.mixer.Sound("foo.wav")
sound.play()

这不是最好的解决办法,但这对我有用。