【发布时间】: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 问题中。