当使用带有paInt16
的pyaudio录制音频时,它会给我16位整数,表示为两个字节。经过一些研究,我得出结论,它一定在-32768到32767之间。
我将音频保存为wav文件,并用librosa.core.load
将其加载回。我确实检索了浮点值*32767,看看它是否生成了原始的16位整数,但它根本不匹配。
我的问题是
- 这种不匹配是从哪里来的
- 原始的16位整数数据表示频率吗
- librosa-doc声明加载函数返回
floating point time series
。如何从原来的16位整数中计算出这个值
在研究和探索了librosa代码之后,以下是我的发现。
-
不匹配的原因是wav字节数组是小端
-
这种表示被称为脉冲编码调制(PCM(。每个样本(单个整数(表示按比例缩放到预先指定的比特范围(通常为16比特(的音频幅度。有关的详细信息,请参阅音频位深度
-
给定PCM是16位表示,每个样本的范围为[-3276832767]。librosa只需将16位转换为有符号短,然后除以32768(而不是32767!(,就可以缩小到[-1,1]范围。请参考我的样本代码以获得准确的转换