5

我正在玩构建一个像鼓机一样播放节奏的 python 脚本。我使用 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 上都试过这个,结果相同。我的电脑有点旧,Intel Core i3,2.53GHz,但我认为这应该不是问题。

我能做些什么呢?

在一个循环中:

此代码演示了相同的延迟。

for i in range(10):
  print i
  s.play(loops=0, maxtime=0, fade_ms=0)
  sleep(2)
4

2 回答 2

9

一种可能的解决方案是减小缓冲区大小(示例 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)
于 2012-11-13T13:51:53.863 回答
3

几分钟前我遇到了同样的问题,并且在This other thread中有一个适合我的解决方案

它看起来像一个初始化问题,如果你先初始化 pygame(或者 XD),pygame 不能很好地获得缓冲区。首先初始化混音器 init() 和 pre_init(),然后从那里进行实验:

pygame.mixer.pre_init(44100, -16, 2, 512)
pygame.mixer.init()
pygame.init()

那应该工作:)祝你好运!

于 2016-08-11T16:43:16.263 回答