Как правильно очищать при использовании PyOpenAL? - PullRequest
0 голосов
/ 25 апреля 2009

Я смотрю на PyOpenAL для некоторых нужд звука с Python (очевидно). Документация скудная (состоит из демонстрационного скрипта, который не работает без изменений), но, насколько я могу судить, существует два уровня. Прямая упаковка вызовов OpenAL и облегченная «питоническая» оболочка - это последнее, что меня интересует. В частности, как вы правильно убираете? Если мы возьмем небольшой пример:

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 с этими объектами, так как я могу правильно очистить?

EDIT:

В конце концов я просто отказался от pyopenal и написал небольшую оболочку ctypes поверх OpenAL и alure (pyopenal предоставляет прямые функции OpenAL, но я продолжал получать SIGFPE). Все еще любопытно, что я должен был делать здесь.

1 Ответ

1 голос
/ 17 августа 2009
#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() перед выходом, поэтому вам не нужно вызывать его самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...