gpt4 book ai didi

python-3.x - python 3 : Convert wave data (byte array) to numpy array of floating point values

转载 作者:行者123 更新时间:2023-12-05 04:52:59 25 4
gpt4 key购买 nike

我的目标是将 wave 数据(使用 wave 模块从 .wav 文件中读取)转换为 numpy 数组。

数据当前被格式化为字节数组。这意味着字节数组的每个元素都是 8 位宽。 wav 文件是单声道的,因此只包含 1 个 channel 。然而,大多数 wav 文件是立体声的,因此数据被格式化为左右声道交织的样本序列。

样本为 16 位,因此数组中的每一对连续字节都是 1 个“16 位”样本。一些音频文件是每个样本 24 位。每个样本的位数可以从

len(bytearray) // (wave.getnframes() *  wave.getnchannels())

所以我需要以某种方式

  • 将字节分组为字节对(样本)
  • 以“步幅”将字节对复制到一些新存储。对于单步幅 = 0?对于立体声,步幅大概是 1? (这取决于 python 在内存中的计数方式)
  • 将新存储转换为 numpy 数组
  • 在某个时候将 16 位有符号整数格式转换为浮点格式,这可以在过程的任何阶段完成

我可以使用 for 循环和索引实现 C++ 风格的解决方案。我认为这在 python 中会非常慢。

我的猜测是 Python(可能)包含一些函数

  • int 和 float/double 格式之间的转换(可能作为 numpy 数组或可能在上述过程中的其他地方)
  • “去隔行扫描”数据(从字节数组中分离出左/右声道数据)
  • 将指定格式的字节数组转换为指定类型的numpy数组

但是,我不知道这些可能是什么或它们可能采用什么形式。(内置?库/模块?)

这似乎是一个应该很容易“duckduckgoable”的问题 - 但我没有运气。现在使用 wav 格式数据可能有点小众应用?

即使是简单的答案以及要输入 duckduckgo 的内容列表也会受到赞赏。我可以阅读/找出文档,但我不知道要搜索什么。

最佳答案

我通常用 scipy.io.wavfile.read 这样做, 它将解析 wave 文件头并以 numpy 数组的形式为您提供数据以及从头中获得的采样频率。

如果你真的想从字节开始,你可以使用 numpy.frombuffer

data_s16 = np.frombuffer(bytes, dtype=np.int16, count=len(bytes)//2, offset=0)
float_data = data_s16 * 0.5**15

关于python-3.x - python 3 : Convert wave data (byte array) to numpy array of floating point values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66296066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com