【发布时间】:2017-03-03 01:16:56
【问题描述】:
当我使用 PyGame 每 0.5 秒播放一次声音时:
import pygame, time
pygame.mixer.init()
s = pygame.mixer.Sound("2.wav")
for i in range(8):
pygame.mixer.Channel(i).play(s)
time.sleep(0.5)
它根本不正确地尊重时间。
好像有0.2秒的停顿比0.7秒又0.2秒,很不规律。
注意事项:
我知道
time.sleep()不是世界上最准确的,但即使有更准确的解决方案from here,问题仍然存在在树莓派上测试
如果我播放许多不同的文件
s[i].play(),问题仍然存在,其中 i 的范围很大。所以问题不在于它试图重播同一个文件这一事实
【问题讨论】:
-
"暂停 0.2 秒比 0.7 秒然后又是 0.2 秒,非常不规则。"这对我来说听起来不是很不规律,它听起来是周期性的。声音持续多久?特别是因为
0.7 == (sleep_time + 0.2) -
@roganjosh 为什么会有这样的循环?
s.play()是非阻塞的,应该继续代码 -
@roganjosh 我修改了代码以利用通道,因此播放的每个声音都不应干扰另一个声音。问题仍然存在...
-
你试过没有停顿会有什么效果吗?我猜 0.7 是基于你的暂停是 0.5 秒的事实,所以基本上没有每 0.2 的暂停就会播放一个声音?你的音频文件有多长? (如果是 0.2 秒,也许它实际上是某种相关的)
-
几乎用
pygame.mixer.init(frequency=44100, size=-16, channels=2, buffer=512)解决了,但节奏还是有点笨拙。我无法获得完美的“节拍器”节拍。