【问题标题】:pyaudio bytes data to librosa floating point time seriespyaudio 字节数据到 librosa 浮点时间序列
【发布时间】:2019-04-26 23:22:04
【问题描述】:

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

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

我的问题是

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

【问题讨论】:

  • 你如何比较数据?默认情况下,librosa 重新采样为 22050Hz,因此如果您比较帧的原始值,它们将根本不匹配。
  • 通过除以 32767 来缩放 int16 数据应该使其符合 librosa 的预期格式。但是注意samplerate,传入pyaudio给你的值

标签: audio wav pyaudio librosa


【解决方案1】:

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

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

  2. 表示称为Pulse-code modulation(PCM)。每个样本(单个整数)表示缩放到预先指定的位范围(通常为 16 位)的音频幅度。详情请参考audio bit depth

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-01
    • 2011-02-26
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    相关资源
    最近更新 更多