2009-04-24 3 views
0

私は、PythonでいくつかのサウンドニーズにPyOpenALを見ています(明らかに)。ドキュメンテーションはまばらです(デモスクリプトで構成されていますが、変更されていない場合は動作しません)が、私が知る限り、2つのレイヤーがあります。 OpenAL呼び出しと軽量のPythonのラッパーの直接ラッピング - それは私が心配している後者です。具体的には、どのように正しくクリーンアップしますか?我々は小さな例取る場合:そのままPyOpenALを使用しているときにクリーンアップする正しい方法は何ですか?

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つのソースは削除されず、一つのバッファ削除されない」の線に沿って端末に上に印刷されています。しかし、私はこれらのオブジェクトでネイティブのOpenAL呼び出しを使用できないと仮定しています。どうすれば正しくクリーンアップできますか?

EDIT:

私は最終的にはちょうどpyopenal不時着し、(pyopenalがストレートOpenALの機能を公開し、私はSIGFPEを取得保管)OpenALのとalureかけて少量のctypesラッパーを書きました。私がここでやろうとしていたことについて、まだ興味があります。あなたはそれを自分で呼び出す必要がいけないのでpyopenalの

答えて

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() 

おそらくデ・デストラクタが終了する前quit()呼び出します。

+0

意味があります。私はPyOpenALにATMをインストールしていないので、あなたの言葉を取っておきます。 – Bernard

関連する問題