6

私のアプリには、それ自体が BASS ライブラリを使用するカスタム オーディオ ライブラリがあります。

プログラム全体で BASS ストリーム オブジェクトを作成および破棄します。

プログラムがランダムに終了すると (パターンはまだわかりません)、コンソールに次の通知が表示されます。

Exception TypeError: "'NoneType' object is not callable" in <bound method stream.__del__ of <audio.audio_player.stream object at 0xaeda2f0>> ignored

私のオーディオ ライブラリ (audio/audio_player.py [class Stream]) には、BASS ストリーム オブジェクトを作成し、コードでそれを操作できるようにするクラスが含まれています。クラスが ( delルーチンで) 破棄されると、BASS_StreamFree を呼び出して、BASS が割り当てた可能性のあるすべてのリソースをクリアします。

(audio_player.py)

from pybass import *
from ctypes import pointer, c_float, c_long, c_ulong, c_buffer
import os.path, time, threading

# initialize the BASS engine
BASS_Init(-1, 44100, 0, 0, None)

class stream(object):
    """Represents a single audio stream"""
    def __init__(self, file):
        # check for file existence
        if (os.path.isfile(file) == False):
            raise ValueError("File %s not found." % file)
        # initialize a bass channel
        self.cAddress = BASS_StreamCreateFile(False, file, 0, 0, 0)
    def __del__(self):
        BASS_StreamFree(self.cAddress)
    def play(self):
        BASS_ChannelPlay(self.cAddress, True)
        while (self.playing == False):
            pass
    ..more code..

このメッセージに基づく私の最初の傾向は、私のコードのどこかで、ストリーム クラスのインスタンスが孤立しており (変数に割り当てられていない) 、アプリが閉じたときにPython がまだそのdel関数を呼び出そうとしていることです。オブジェクトが消えようとします。

このアプリは wxWidgets を使用しているため、スレッド化が必要です。実際の変数名が与えられていないという事実は、前の段落で述べたことを信じるように導きます。

これをデバッグするためにどのコードが関連するのか正確にはわかりません。メッセージは無害に見えますが、最終的な製品コードで「無視された」例外という考えは好きではありません。

これをデバッグするためのヒントはありますか?

4

1 に答える 1