2009-04-24 6 views
0

Je regarde PyOpenAL pour certains besoins sonores avec Python (évidemment). La documentation est éparse (composée d'un script de démonstration, qui ne fonctionne pas non modifié) mais pour autant que je sache, il y a deux couches. Enveloppement direct des appels OpenAL et un emballage léger «pythonique» - c'est ce dernier qui me préoccupe. Plus précisément, comment nettoyez-vous correctement? Si nous prenons un petit exemple:Quelle est la bonne façon de nettoyer lorsque vous utilisez 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() 

Comme il est, un message est imprimé à la borne le long des lignes de « une source non supprimée, un tampon non supprimé ». Mais je suppose que nous ne pouvons pas utiliser les appels OpenAL natifs avec ces objets, alors comment nettoyer correctement?

EDIT:

Je finalement juste et écrit pyopenal laissé tomber un petit wrapper ctypes sur OpenAL et alure (pyopenal expose les fonctions OpenAL droites, mais je continué à obtenir SIGFPE). Toujours curieux de savoir ce que je devais faire ici.

Répondre

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

probablement de destructor des appels pyopenal quit() avant la sortie afin que vous ne devez appeler vous-même.

+0

Fait sens. Je n'ai pas d'ATM installé par PyOpenAL, donc je vais prendre votre parole. – Bernard

Questions connexes