scipy.io.wavfile.read
以整数形式返回数据。要进行音频处理,我想将它们转换为浮点数。我想在输入文件中允许任意位深度,所以我需要知道用于规范化整数数据的正确数字。例如,对于16位wav
文件,我将整数数组除以( 2**15 - 1 )
。但对于8位音频,我必须除以( 2**7 - 1 )
有没有一种简单的方法来获得这种深度,所以我可以将所有这些文件转换为可比较的浮点数据?我觉得这很基本,但我似乎无法找到它。
由于一些原因,我至少在目前没有安装更多功能更强的软件包,例如scikits
。
答案 0 :(得分:1)
您可以使用numpy.iinfo
获取有关整数数据类型的信息。例如,这里是一个16位有符号整数数组:
In [338]: data = np.array([10, 20, -30], dtype=np.int16)
In [339]: ii = np.iinfo(data.dtype)
In [340]: ii.max
Out[340]: 32767
In [341]: ii.min
Out[341]: -32768
In [342]: ii.bits
Out[342]: 16
这是一个8位无符号整数数组:
In [350]: data = np.array([10, 20, 200, 5], dtype=np.uint8)
In [351]: ii = np.iinfo(data.dtype)
In [352]: ii.max
Out[352]: 255
In [353]: ii.min
Out[353]: 0
In [354]: ii.bits
Out[354]: 8
答案 1 :(得分:0)
我已经写了一个tutorial和一个名为pcm2float()的帮助函数,可以做你想要的。
给定NumPy数组sig
中的信号和目标数据类型dtype
,它只是这样做:
sig.astype(dtype) / dtype.type(-np.iinfo(sig.dtype).min)