【问题标题】:PyGame has huge delay with playing soundsPyGame 播放声音有很大的延迟
【发布时间】:2019-03-12 23:27:09
【问题描述】:

我正在构建一个像鼓机一样播放节奏的 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)

【问题讨论】:

  • 1) 可能是解释器本身的延迟?试试raw_input();s.play(loops=0, maxtime=0, fade_ms=0),然后再按回车。 2) 军鼓是否从声音文件的最开头开始?如果您在 Audacity 中打开文件,从开始到实际声音之间有多少时间?
  • 1) 没有区别。 2) 实际声音确实在波形文件中立即开始。我也尝试过使用其他波形文件。
  • 你能发一个声音文件的链接吗,我想用我的机器测试一下
  • 这是去年的一个学校项目,我们甚至没有完成这个项目。我什至不记得哪个声音文件,所以我不能发送它,但我相信任何声音文件都是这样的!不,这不是因为文件开头有一个“空白”部分,我们确定了这一点。

标签: audio pygame


【解决方案1】:

一种可能的解决方案是减小缓冲区大小(示例 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)

【讨论】:

    【解决方案2】:

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

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

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

    这应该可行 :) 祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多