使用PyOpenAL时清理的正确方法是什么?

时间:2009-04-24 23:45:18

标签: python openal

我正在用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)。仍然很好奇我应该在这里做什么。

1 个答案:

答案 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()所以你不需要自己调用它。