2015-09-06 42 views
0

我在視頻設置(逐幀)中使用opencv,並且我有一小部分需要播放音頻文件,如最後的鈴聲,它可以是任何格式。什麼是最快的Python聲音模塊?

我目前正在使用pygame,但播放聲音時程序滯後一點。鑑於我試圖儘可能快地執行1幀,這個延遲很麻煩。

import pygame 
sound=pygame.mixer.Sound('beep.wav') 
sound.play() 

什麼是最快的模塊可以播放聲音文件? 最好是我可以移植到Windows電腦的東西。

回答

0

Pygame可能是您音頻的最佳選擇。在the documentation for the mixer module中,您可以看到以下說明:

注意:不要減小聲音的滯後性,請使用較小的緩衝區大小。默認設置是爲了減少某些計算機上出現磨擦聲的機會。您可以通過調用pygame.mixer.pre_init()預設mixer init參數來更改默認緩衝區,方法是在pygame.mixer.init()初始化混頻器模塊或pygame.init()初始化所有導入的pygame模塊被調用。例如:pygame.mixer.pre_init(44100,-16,2,1024)在pygame 1.8中,默認大小從1024更改爲3072。

我有一個應用程序,使用Pygame的聲音,我遇到了同樣的問題,你看到。我將緩衝區大小更改爲512,用mixer.init(buffer=512)初始化mixer

+1

正如說明所述,某些計算機需要較大的緩衝區或有問題。在我測試過我的應用程序的少數計算機上,我看到較小的緩衝區沒有音頻質量問題 - 只有較少的延遲。我想知道Pygame開發者多久經歷一次這種發癢的聲音,這使得他們增加了默認緩衝區,並且引入了Pygame音頻_的延遲。也許它應該顛倒過來,有一個小的默認緩衝區和一個關於在必要時增加它的註釋。 – TigerhawkT3

1

如果您在需要聲音時運行上面的代碼,那麼您並不奇怪,您會落後。在與進口的,其餘的文件的頂部,使用

from pygame.mixer import Sound 

所以你只需要導入你需要什麼,而不是整個pygame模塊。然後,你之前也需要的聲音,跑

sound = Sound("beep.wav") 

所以它已經準備好去。然後,當你需要播放時,只需運行

sound.play() 

並且應該有最小的延遲。

+0

我假設OP已經這樣做了,但肯定有可能他們不是。 – TigerhawkT3

+0

是的,我已經這樣做了,但是爲具有類似問題的人添加內容很有幫助 – azazelspeaks

0

我沒有比較這些延遲,但您可以嘗試一些基於PortAudio的內容,例如, python-sounddevice

在那裏你可以玩blocksizelatency選項,以獲得系統的最小可能延遲。在Windows上,您還應該確保使用實際上能夠延遲較低的後端(我認爲您應該嘗試使用WDM/KS,WASAPI或ASIO)。

相關問題