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

Python 使用PyOpenAL时,正确的清理方法是什么?,python,openal,Python,Openal,我正在研究PyOpenAL,以了解Python的一些声音需求(显然)。文档很少(由一个演示脚本组成,未经修改无法工作),但据我所知,有两层。直接包装OpenAL调用和一个轻量级的“pythonic”包装器——我关心的是后者。具体来说,如何正确清理?举个小例子: import time import pyopenal pyopenal.init(None) l = pyopenal.Listener(22050) b = pyopenal.WaveBuffer("somefile.wav"

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

#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()
,这样您就不需要自己调用它了。

很有意义。我没有安装PyOpenAL自动取款机,所以我相信你的话。