代码之家  ›  专栏  ›  技术社区  ›  Bernard

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

  •  0
  • Bernard  · 技术社区  · 15 年前

    我正在查看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 回复  |  直到 15 年前
        1
  •  1
  •   sth Alien    15 年前
    #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() 在退出之前,这样你就不需要自己打电话了。