我想为神经科学研究提供一系列特定频率和持续时间的音频提示。经过一番谷歌搜索后,我发现了一个名为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中分析了信号。有些脉冲持续时间长达180毫秒,一些短脉冲持续时间仅80毫秒,而理论上它们应全部持续100毫秒。

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

最佳答案

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

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

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

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

关于python - Pygame.mixer.sound的声音持续时间不够准确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38275859/

10-12 01:11