使用PyOpenAL时正确的清理方法是什么?
我在用Python做一些声音相关的事情,正在研究PyOpenAL。可惜的是,文档不太丰富,只有一个示例脚本,但这个脚本不改动就不能用。根据我的理解,PyOpenAL有两个层次:一个是直接调用OpenAL的接口,另一个是一个轻量级的“Python风格”的封装,我主要关注的是后者。具体来说,我想知道怎么正确地清理资源?我们来看一个简单的例子:
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 个回答
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()
,所以你不需要自己去调用它。