【问题标题】:scipy.io.wavfile.read cannot read 24-bits .wav filesscipy.io.wavfile.read 无法读取 24 位 .wav 文件
【发布时间】:2013-11-13 20:00:35
【问题描述】:

scipy.io.wavfile.read 似乎无法读取 24 位 .wav 文件。 你知道如何处理它们吗?

【问题讨论】:

  • 它将它们读入 32 位整数,它不能将它们写回 24 位。
  • Jaime,不,它不读。当我尝试将 read 用于 24 位文件时,出现错误 (Traceback ... ValueError: total size of new array must be unchanged)
  • @Jaime:读取具有单通道和 9 帧(使用 wave 模块创建)的 24 位 wav 文件时出现错误。相反,如果有 8 帧(因此字节数是 4 的倍数),scipy.wavfile.read 会读取文件,但数据最终会出现在长度为 6 的 int32 类型数组中。数组中的第一个值包含三个第一个样本的字节和第二个样本的一个字节等)
  • @WarrenWeckesser 涉及 numpy 的一些不良行为,其中 dtype 设置为 'i3' 并返回 int32,而不是引发错误。有时行星对齐,它给你的数据被破坏了,有时它会惨遭失败。将所有内容读入int8s 看起来并不难,做一些重塑魔法,然后转换为下一个最大的 int 类型,但它需要返回数据的位数,这不能不再从 dtype 中推断出来。唯一不需要重新考虑用户界面的简单解决方法是引发错误......
  • @Jaime:好的,我只是指出,虽然在某些情况下它可能不会引发错误,但它并没有真正以任何有用的方式“工作”。您的第一条评论似乎暗示它可能有效并且只是向上转换为 32 位,这令人惊讶,因为我知道您已经对此进行了调查并评论了其他问题中的行为。附言我刚刚创建了一个可以 使用wave 模块读取未压缩的wav 文件的函数。我会把它作为一个要点添加到关于这个的 scipy 问题中。

标签: python audio scipy wav


【解决方案1】:

如果你的wav文件没有被压缩,你可以在这里试试readwav函数:https://gist.github.com/WarrenWeckesser/7461781


更新

我将该要点转换为 python 包:https://pypi.python.org/pypi/wavio

源码在github上:https://github.com/WarrenWeckesser/wavio

【讨论】:

  • 太棒了!有用 !你也有writewav吗? ;)
  • +1 但是您可能希望返回文件的位深度以及速率和数据,因为现在无法判断您读取的是 32 位文件还是 24 位文件。只是为了让事情变得可怕,apparently PCM supports 4, 12 and 20 bit depths...
  • @JosBas:我更新了要点。它有一个新的文件名 (wavio.py) 和一个函数 writewav24 用于编写 24 位 wav 文件。同样,没有彻底测试过,所以请谨慎购买。
  • @Jaime:好主意。我更新了要点; readwav 现在返回 rate, sampwidth, array。
  • 感谢 Jaime 和 Warren 的想法和要点,太棒了!最后一件事(不是 100% 与主题相关,但是......):我也想读/写 .wav 中包含的标记元数据,你知道我该怎么做吗?
【解决方案2】:

这里是scipy.io.wavfile 的更新版本,增加了很多东西:

  • 24位.wav文件支持读/写,
  • 访问提示标记,
  • 提示标记标签,
  • 其他一些元数据,如音高(如果已定义)等。

wavfile.py (enhanced)

欢迎分享!

【讨论】:

  • 在使用方面,与 Scipy.io 中的 wavfile.read 相比,有一个额外的参数(位)Fs, data, bits = wavfile.read('input.wav')
【解决方案3】:

scipy.io.wavfile.read 从 1.6 版开始可以读取 24 位 .wav 文件: https://docs.scipy.org/doc/scipy-1.6.0/reference/release.1.6.0.html#scipy-io-improvements

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 2022-01-23
    • 2019-06-15
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    相关资源
    最近更新 更多