python中的wave库:2个通道和2个样本宽度
Posted
技术标签:
【中文标题】python中的wave库:2个通道和2个样本宽度【英文标题】:wave library in python: 2 channels and sample width of 2 【发布时间】:2020-12-11 19:43:40 【问题描述】:我正在尝试将 .wav 文件转换为 numpy 数组。我在 python 中使用 wave 库使用 readframes() 将 .wav 文件转换为字节对象,然后使用 np.frombuffer() 将字节对象转换为 numpy 数组。
我的 .wav 文件具有以下属性:
频道数:2 样品宽度:2 帧率:44100 帧数:4692480 压缩类型:无 压缩类型(人类可读的名称):未压缩
当我将其转换为 np 数组并检查形状时,我得到的形状为 18769920,是预期的 4 倍 (4692480)。我怀疑这是因为通道数(2)和样本宽度(2)。
我在下面包含了我的代码:
wave_read = wave.open('sample_jazz.wav', mode='rb')
frames = wave_read.readframes(wave_read.getnframes())
sound_arr = np.frombuffer(frames, dtype=np.uint8)
这里是问题(它们彼此非常相关)。
如何一次阅读一个频道? 我如何一次读取 2 个字节而不是 1 个字节?我只是将 dtype 更改为 np.uint16 吗?原因是我不确定字节对象中的字节是如何排序的。也许它有通道 1,帧 1,字节 1,然后是通道 2,帧 1,字节 1,然后是通道 1,帧 1,字节 2,然后是通道 2,帧 1,字节 2,我不能只解释两个连续字节作为 uint16,因为通道是散布的,我最终只是将来自不同通道的两个字节 1 解释为 16 位 int。【问题讨论】:
【参考方案1】:我最终使用了非常方便的 scipy.io.wavfile。
【讨论】:
以上是关于python中的wave库:2个通道和2个样本宽度的主要内容,如果未能解决你的问题,请参考以下文章