【问题标题】:Opening 1GB wave file leads to memory error [duplicate]打开 1GB 波形文件会导致内存错误 [重复]
【发布时间】:2017-10-24 22:46:27
【问题描述】:

你好 stackoverflow 用户,
目前我面临以下问题,我有一个打开 .wav 文件的功能,它返回采样率、长度和样本。我已经尝试过使用小文件,它运行良好,现在我正在尝试加载 1GB wav 文件,它返回“MemoryError 未被用户代码处理”窗口。 这是我的功能:

def OpenWavFile(fileName):
    waveFile = wave.open(fileName, 'r')
    sampFreq = waveFile.getframerate()
    length = waveFile.getnframes()

    byteList = np.fromstring(waveFile.readframes(length), dtype = np.int16)

    return sampFreq, length, byteList

我用断点尝试过,我注意到长度变量的值是 472289280,它适合 int 范围。我在dtype = np.int16这个位置试过这个功能,有不同的类型。

numpy 有限制吗?或者问题出在哪里?

我的笔记本电脑的 RAM 大小为 8Gb。

【问题讨论】:

  • 你试过with open(fileName, 'r') as wavefile: ...这个语法吗?
  • 你发现异常并检查了吗? docs.python.org/2/library/…
  • 您如何在内部存储音频样本?如果它们不以原始二进制格式存储,则会大大增加使用的成员数量。
  • "什么适合 int 范围" 你是什么意思? Python 可变大小是可扩展的。
  • 数据至少在内存中重复。它从readframes 返回,byteList 需要分配才能再次释放。应该仍然适合内存,但谁知道fromstring.. 中还发生了什么(你可能在运行 32 位 Python 吗?)。如果scipy.io.wavfile.read 适合你,你可以试试。如果您不想将文件完全放在内存中,它甚至支持内存映射。

标签: python numpy wave


【解决方案1】:

所以根据上面的建议,我检查了 Python 的版本,它是 32 位的,我将它更改为 64,它现在可以工作了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多