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

时间:2018-11-24 20:24:54

标签: audio wav pyaudio librosa

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

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

我的问题是

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

1 个答案:

答案 0 :(得分: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进行准确转换