pyaudio 字节数据到 librosa 浮点时间序列

pyaudio bytes data to librosa floating point time series

当使用带有 paInt16 的 pyaudio 录制音频时,它给了我表示为两个字节的 16 位整数。经过一些研究,我得出结论,它必须在 -32768 到 32767 之间。

我将音频保存为 wav 文件并使用 librosa.core.load 加载它。 我确实检索了浮点值 * 32767 并查看它是否生成原始的 16 位整数,但它根本不匹配。

我的问题是

  1. 这种不匹配是从哪里来的?
  2. 原始16位整数数据代表频率吗?
  3. librosa 文档声明加载函数 returns floating point time series。你如何从原始的 16 位整数计算出这个值?

在研究和探索 librosa 代码之后,这是我的发现。

  1. 不匹配是因为 wav 字节数组是小端

  2. 表示称为Pulse-code modulation(PCM). Each sample (single integer) represents the magnitude of audio scaled to the range of prespecified bit range, (usually 16 bits). refer audio bit depth 详情

  3. 给定 PCM 是 16 位表示,每个样本的范围是 [-32768, 32767]。 librosa 只需将 16 位转换为带符号的 short 并除以 32768(不是 32767!)以缩小到 [-1, 1] 范围。具体换算请参考my sample code