0
我正在將我爲Android編寫的節拍器翻譯成經典桌面機器的Python。提前輸入stream.write()
在Android下,緩衝區是2s長,並且始終填滿,這意味着它是2s-lag-proof。 Python和Pyaudio,我做這樣的事情(酒吧,4次):
bar = 0
while self.isRunning:
stream.write(beat[bar])
print("beat {} was read".format(bar)
bar += 1
bar %= 4
而看
*sound of beat[0] is played*
beat 0 was read
*sound of beat[1] is played*
beat 1 was read
...
PyAudio正在等待他的緩衝區來恢復之前得到空。據我所知,「阻塞」的方式。
相反,我希望看到(如在Android設備)
*sound of beat[0] is played*
beat 0 was read
beat 1 was read
beat 2 was read
*sound of beat[1] is played*
beat 3 was read
*sound of beat[2] is played*
beat 3 was read
隨着120 BPM這意味着流總是準備好被讀出的2秒緩衝區。
我的問題:是否有任何飼料緩衝區在同一時間它被讀取? 當我嘗試我的節拍器在蹩腳的硬件主機上的虛擬機,第一次跳動是滯後極其擔心我...
我不確定回調方法將允許,因爲我需要播放特定的聲音取決於我在結構中(我的節拍器處理複雜結構)和酒吧,這將是很痛苦的實施。
隊列模塊看起來很完美。我會試試看。我已經在使用線程,所以GUI不會凍結,但正如已經提到的,我看不到如何回調方法可以適合程序(我必須發揮不同的聲音,取決於嵌套循環中的迭代。) – funkygoby
I猜你可以在你的情況下使用一個(阻塞或回調)。只要使用你更舒適的任何東西。不管是哪種情況,都不要忘記檢查緩衝區溢出/溢出。 – Matthias
我嘗試了回調方法,但正如文檔中提到的那樣,只要回調函數返回一些東西,pyaudio就會反饋它並播放緩衝區,即使最後一次播放仍在進行中。因此,我沒有聽到明顯的'點擊',而是留下了'Bbbrrrrrrrrrr'。我沒有設法用我的bytearray()提供一個Queue實例。我想阻止方法會做... – funkygoby