python 中的波形库:2 个通道和 2 个样本宽度
wave library in python: 2 channels and sample width of 2
我正在尝试将 .wav 文件转换为 numpy 数组。我使用 python 中的 wave 库使用 readframes() 将 .wav 文件转换为字节对象,然后使用 np.frombuffer().
将字节对象转换为 numpy 数组
我的 .wav 文件具有以下属性:
通道数:2
样品宽度:2
帧率:44100
帧数:4692480
压缩类型:NONE
压缩类型(人类可读的名称):未压缩
当我将它转换为 np 数组并检查形状时,我得到的形状为 18769920,是预期值 (4692480) 的 4 倍。我怀疑这是因为通道数(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。
我最终使用了scipy.io.wavfile,使用起来非常方便。
我正在尝试将 .wav 文件转换为 numpy 数组。我使用 python 中的 wave 库使用 readframes() 将 .wav 文件转换为字节对象,然后使用 np.frombuffer().
将字节对象转换为 numpy 数组我的 .wav 文件具有以下属性:
通道数:2 样品宽度:2 帧率:44100 帧数:4692480 压缩类型:NONE 压缩类型(人类可读的名称):未压缩
当我将它转换为 np 数组并检查形状时,我得到的形状为 18769920,是预期值 (4692480) 的 4 倍。我怀疑这是因为通道数(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。
我最终使用了scipy.io.wavfile,使用起来非常方便。