2015-02-23 74 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