私は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を取得し続けました)。私がここで何をすべきかについてはまだ興味があります。