我正在玩建立一个像鼓机一样播放节奏的蟒蛇脚本。我用过PyGame来处理音频。但是,我在呼叫播放和听到实际音频之间遇到了重大/不可接受的延迟。
我将以下代码粘贴到交互式解释器中,然后一次又一次地执行最后一行:
import pygame
pygame.mixer.init(frequency=22050, size=-16, channels=2, buffer=4096)
s = pygame.mixer.Sound('snare.wav')
s.play(loops=0, maxtime=0, fade_ms=0)
按下输入和听到音频之间的时间是我最好的猜测大约400毫秒,确实明显和不可接受。延迟与我单击VLC中的播放按钮并等待播放音频的情况大致相同。
我在Windows和Ubuntu上都试过这个结果。我的电脑有点旧,英特尔酷睿i3,2.53GHz,但我认为这应该不是问题。
我该怎么办?
循环播放:
此代码演示了相同的延迟。
for i in range(10):
print i
s.play(loops=0, maxtime=0, fade_ms=0)
sleep(2)
答案 0 :(得分:8)
一种可能的解决方案是减小缓冲区大小(例子512):
import pygame
pygame.mixer.init(frequency=22050, size=-16, channels=2, buffer=512)
s = pygame.mixer.Sound('snare.wav')
s.play(loops=0, maxtime=0, fade_ms=0)
答案 1 :(得分:1)
几分钟前我遇到了同样的问题,并且This other thread
有一个适合我的解决方案它看起来像一个初始化问题,如果你首先启动pygame(或者XD),pygame不能很好地获得缓冲区。首先初始化混合器init()和pre_init(),然后从那里进行实验:
pygame.mixer.pre_init(44100, -16, 2, 512)
pygame.mixer.init()
pygame.init()
那应该有效:)祝你好运!