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

Bra*_*Lee 5 audio wav pyaudio librosa

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

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

我的问题是

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

Bra*_*Lee 8

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

  1. 不匹配来自 wav 字节数组是小端的事实

  2. 这种表示称为脉冲编码调制(PCM)。每个样本(单个整数)表示缩放到预定位范围(通常为 16 位)范围内的音频幅度。有关详细信息,请参阅音频位深度

  3. 鉴于 PCM 是 16 位表示,每个样本的范围为 [-32768, 32767]。librosa 简单地将 16 位转换为有符号短整型并除以 32768(不是 32767!)以缩小到 [-1, 1] 范围。请参考我的示例代码进行精确转换