我正在使用python
和scipy.io.wavfile
来读取24位wav文件。我知道wavfile
有关于24位的问题,我手动整合了Warren在该问题中提出的解决方案。实际上,代码中的更新包括将字节3-by-3分组并计算24位整数(以下代码改编自Warren Weckesser):
if bit_depth not in (8, 16, 32, 64, 96, 128):
# first read byte per byte
data = numpy.fromfile(fid, dtype='u1')
for i in range(len(data) % 3):
data = numpy.delete(data, len(data) - 1)
# or data = numpy.delete(data, 0)?
a = numpy.empty((int(len(data)/3), 4), dtype='u1')
#print(data.shape)
a[:, :3] = data.reshape((-1, 3))
a[:, 3:] = (a[:, 3 - 1:3] >> 7) * 255
data = a.view('<i4').reshape(a.shape[:-1])
某些wav样本报告24位深度,但实际数据不是3的倍数(例如,2138890字节)。这让我感到困惑:是否存在wavfile没有跳过的元数据?我应该从数组中删除一些字节吗?从它的开始还是从结束?有人遇到同样的问题吗?
提前谢谢!