0

私はPythonでのいくつかのサウンドニーズについてPyOpenALを見ています(明らかに)。ドキュメントはまばらです(変更されていない状態では機能しないデモスクリプトで構成されています)が、私が知る限り、2つの層があります。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()

そのまま、「1つのソースが削除されていない、1つのバッファが削除されていない」というメッセージが端末に出力されます。しかし、これらのオブジェクトでネイティブのOpenAL呼び出しを使用することはできないと想定しているので、正しくクリーンアップするにはどうすればよいですか?

編集:

私は最終的にpyopenalを捨てて、OpenALとalureの上に小さなctypesラッパーを書きました(pyopenalはまっすぐなOpenAL関数を公開しますが、私はSIGFPEを取得し続けました)。私がここで何をすべきかについてはまだ興味があります。

4

1 に答える 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()するので、自分で呼び出す必要はありません。

于 2009-08-17T11:05:42.880 に答える