2009-04-24 105 views
0

我正在看Python的PyOpenAL的一些聲音需求(顯然)。文檔是稀疏的(包括一個演示腳本,它不能不改變),但據我所知,有兩層。直接包裝OpenAL調用和一個輕量級的'pythonic'包裝 - 這是我關心的後者。具體來說,你如何正確清理?如果我們取一個小例子:使用PyOpenAL時清理的正確方法是什麼?

import time 

import pyopenal 

pyopenal.init(None) 

l = pyopenal.Listener(22050) 

b = pyopenal.WaveBuffer("somefile.wav") 
s = pyopenal.Source() 
s.buffer = b 
s.looping = False 

s.play() 

while s.get_state() == pyopenal.AL_PLAYING: 
    time.sleep(1) 

pyopenal.quit() 

因爲它是,被印刷在沿着「沒有被刪除,一個緩衝器不刪除一個源」的線的終端的消息。但是我假設我們不能使用這些對象的本地OpenAL調用,那麼如何正確清理?

編輯:

我最終只是拋棄pyopenal並寫了一個小的ctypes包裝器上的OpenAL和alure(pyopenal公開直OpenAL的功能,但我一直得到SIGFPE)。仍然好奇我在這裏應該做什麼。

回答

1
#relese reference to l b and s 
del l 
del b 
del s 
#now the WaveBuffer and Source should be destroyed, so we could: 
pyopenal.quit() 

pyopenal的可能去析構函數退出前調用quit()所以你不需要自己調用它。

+0

有道理。我沒有安裝PyOpenAL ATM,所以我會接受你的話。 – Bernard 2009-08-18 14:13:48

相關問題