PCM音频

1,PCM16LE双声道数据中左声道和右声道的采样值是间隔存储的。每个采样值占用2Byte空间;

注:采样格式16LE,“16”代表采样位数是16bit。由于1Byte=8bit,所以一个声道的一个采样值占用2Byte。 “LE”代表Little Endian,代表2Byte采样值的存储方式为高位存在高地址中。

2,PCM16LE双声道音频采样数据转换为PCM8音频采样数据.
PCM16LE格式的采样数据的取值范围是-32768到32767,而PCM8格式的采样数据的取值范围是0到255。 所以PCM16LE转换到PCM8需要经过两个步骤: 1,第一步是将-32768到32767的16bit有符号数值转换为-128到127的8bit有符号数值; 2,,第二步是将-128到127的8bit有符号数值转换为0到255的8bit无符号数值。

【PCM音频】3,PCM16LE双声道音频采样数据转换为WAVE格式音频数据。
WAVE格式音频(扩展名为“.wav”)是Windows系统中最常见的一种音频。该格式的实质就是在PCM文件的前面加了一个文件头。 本程序的函数就可以通过在PCM文件前面加一个WAVE文件头从而封装为WAVE格式音频。

WAVE文件是一种RIFF格式的文件。其基本块名称是“WAVE”,其中包含了两个子块“fmt”和“data”。从编程的角度简单说来就是由WAVE_HEADER、WAVE_FMT、WAVE_DATA、采样数据共4个部分组成。它的结构如下所示。
WAVE文件构成 |
---|---
WAVE_HEADER |
WAVE_FMT |
WAVE_DATA |
PCM数据 |
其中前3部分的结构如下所示。在写入WAVE文件头的时候给其中的每个字段赋上合适的值就可以了。但是有一点需要注意:WAVE_HEADER和WAVE_DATA中包含了一个文件长度信息的dwSize字段,该字段的值必须在写入完音频采样数据之后才能获得。因此这两个结构体最后才写入WAVE文件中。
————————————————
参考链接

    推荐阅读