2015-02-23 95 views
1

在Mac笔记本电脑上(OS 10.9.5),当播放来自python程序的声音时,我会在声音播放之前得到0.5 s的初始启动延迟。如果我在最后一分钟左右播放声音,则没有这种延迟。我已经看到在线传递对这种事物的引用,但没有太多的见解(例如,http://music.columbia.edu/pipermail/portaudio/2014-November/016364.html)。我寻找一种Apple API的方式来禁用它(比如屏幕保护程序),但没有看到任何明显的东西。这个问题可能特定于笔记本电脑,例如作为省电功能。它不仅发生在电池电量上,而且还发生在插入电源时。如何避免Mac上的音频初始0.5s延迟?

问题:从OSX上的python,如何告诉Mac做任何需要做的事情来避免第一次播放声音时的0.5秒延迟?

约束:通过子进程调用一些像pmset这样的命令是可以接受的,除非它需要root(sudo)priv的;即只有普通的用户空间命令是可以接受的。也是不可接受的:它每隔30秒左右就可以轻松地编写一段简短的无声音,但这会增加程序和使用资源的复杂性 - 必须有更好的方法来实现它。

+0

这将是有用的,如果你能有一个最小的例子,这样的人可以尝试瑞普你的问题的渲染。 – jaket 2015-02-23 19:48:41

+0

好主意,@jaket,最简单的例子都很棒。我用pyaudio嘲笑了一个,并没有得到0.5s的延迟,这非常有趣。它很难提供我的案例的一个最小例子,这是一个名为PsychoPy的桌面应用程序播放声音,它使用pyo来播放声音。当使用pysoundcard/pysoundfile而不是pyo时,我也会看到延迟,也是0.5s。我希望这是可以用mac系统设置修复的东西,但这似乎不太可能。 – jrgray 2015-02-23 21:09:22

回答

0

延迟可能是由于试图播放巨大的声音文件?在此请求呈现之前,媒体文件是否先前已加载到内存中?

尝试在音频媒体加载到缓冲区,然后在播放信号进行直接由缓冲区

+0

不错的主意,但这绝对不是问题。是的,媒体文件被预先加载到内存中,或者是已经在内存中生成的数据,这没有什么区别。而且它只有在你第一次播放它发生的声音时,而不是随后(如果有最近的声音)。它的小声音,1秒长,没什么大的。 – jrgray 2015-02-23 18:51:39

+0

python可能会对音频库进行延迟加载,直到它们被调用...尽管除非系统由于可用内存不足而出现抖动/交换,一旦音频呈现出来,似乎很难接受超出初始渲染的后续延迟。 。你可以通过看看是否有一台具有大量免费RAM的机器来解决这个问题。 – 2015-02-23 19:29:21

+0

不要这么想......如果我播放声音,那么让该python进程等待60秒,然后播放第二个声音,第二个声音的起始延迟为0.5s。但是如果介入时间间隔为30秒,则不存在这种延迟。据推测,蟒蛇不是在前一种情况下(60秒)卸载音频库,而是后者(30秒)。 – jrgray 2015-02-23 19:41:01