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



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

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

我的问题是

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

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

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

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

  3. 给定PCM是16位表示,每个样本的范围为[-3276832767]。librosa只需将16位转换为有符号短,然后除以32768(而不是32767!(,就可以缩小到[-1,1]范围。请参考我的样本代码以获得准确的转换

最新更新