0

私は wav ファイルを処理し、python の wave モジュールを使用してそれぞれのエネルギー レベルをチェックしています。すべてが数十のファイルに対してうまく機能しますが、突然、この MemoryError 例外が発生し始めます。その間、例外を無視してチェックを続行しますが、例外で失敗することもあれば、答えが得られることもあります。

ファイルをチェックする方法は次のようになります (私のコードは機能しますが、現時点ではアクセスできないため、基本を書き直すことにしたので、MemoryError 例外に注目してください):

import wave,os,glob

def wavCheck(filepath):
    with open(filepath,'rb') as w:
        handle = wave.open(w)
        data = handle.readframes()
        nframes = handle.getnframes()
        channels = [[] for x in handle.getchannels()]
        for i in nframes:
            bucket = i%2
            channels[bucket].append(data[i])
        for channel in channels:
            # calculate which frame is silent and do something
        handle.close()
        del handle
        del nframes
        del channels
    return results

if __name__ == "__main__":
    while os.path.exists(someDirectoryWhichContainWaves):
        for filepath in glob.glob(someDirectoryWhichContainWaves+'\*.wav')
            results = wavCheck(filepath)
            # Do something with results

ファイルの読み取りが正常に行われ、すべてが期待どおりに進み、もちろん wave ファイルがすべて正常であると仮定すると、なぜ MemoryError 例外が発生するのでしょうか?

その他の詳細 -

  1. Wave ファイルは 3MBytes から 10MBytes の間です
  2. 数回の反復ごとにガベージ コレクターをカスタマイズして収集しようとしましたが、うまくいきませんでした。GC についていくつか読んだ後、収集するガベージがあるかどうかを確認するのが最善の方法であると判断しました。だから私はしました。これもうまくいきませんでした。

お願いします-ここに何かアイデアはありますか?

乾杯。

4

0 に答える 0