PCM文件

PCM文件

PCM(Pulse -code-modulation):是模拟信号以固定采样率转换成数字信号后的表现形式。

参数

  • Sample Rate:Hz
  • Sign:音频数据是否是有符号,通常情况下都是有符号的。若将有符号的数据当做无符号数据处理将会使声音听起来很刺。
  • Sample Size:表示每一个采样数据的大小,通常为16bits
  • Byte Ordering:little-endian/big-endian,通常是little-endian模式,即数据的低子节保存在低地址端。
  • Number of Channels:标识单声道(mono, 1 channel)还是立体声(stereo,2channels)

通过以上5个数据就可以描述一个PCM数据,播放PCM数据需要的就是以上五个数据。

PCM数据流

mono单声道:数据依次排列

PCM文件_第1张图片

stereo双声道:左右声道交叉存放。

PCM文件_第2张图片

操作PCM数据

将PCM读入一个C语言数组

FILE *pcmfile;
int16_t *pcmdata;
pcmfile = fopen("/xxx.pcm");
pcmdata = malloc(size of the file);
fread(pcmdata, sizeof(int16_t), size of file, sizeof(int16_t), pcmfile);
  • 如果将这些数据送入声卡,我们就可以听到声音,当然我们需要告诉声卡这些数据的采样率,如果我们告知声卡的采样率大于数据本身的采样率,那么播放声音的速度就会高于其原始的速度,就是快放功能。

  • 如果要增加PCM数据的音量,只需要将每一个采样的数据乘以一个系数就行了。(但数值范围必须要在其比特位限制的范围之间)并且采样点数据乘以2并不代表将声音的音量扩大了两倍,声音音量的增益系数与音量的关系图。

    PCM文件_第3张图片

下采样

eg.48kHz下采样到8kHz:将PCM数据中的6*n的点保留,其余舍弃。

参考网页:PCM音频数据格式介绍

PCM与RAW文件区别

  • PCM:非线性脉冲编码调制,是本机解码完成后输出给下一个设备。要是播放机本身强大就选这个。PCM中有时会使用相应的技术降低数字信号源的数据率,便于存储和数据传输方便。
  • RAW:本设备不解码直接输出到下一个设备,让下一个设备解码。

你可能感兴趣的:(语音/音频信号处理)