我正在用PyOpenAL查看Python的声音需求(显然)。文档很稀疏(由一个演示脚本组成,不能不修改)但据我所知,有两层。直接包装OpenAL调用和一个轻量级的“pythonic”包装器 - 后者是我关心的。具体来说,你如何正确清理?如果我们举一个小例子:
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,并在OpenAL和alure上编写了一个小的ctypes包装器(pyopenal暴露了直接的OpenAL函数,但我一直得到SIGFPE)。仍然很好奇我应该在这里做什么。
答案 0 :(得分: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()
可能de pytrunal的析构函数在退出之前调用quit()
所以你不需要自己调用它。