本系列文章会陆续更新与ffmpeg相关的知识点。
与音频相关的概念极多,这里把最近学习到的进行总结:
1、编解码算法:目前已知的音频算法比较繁多,比较常见的有PCM、AAC、G711、G723、G726等等。
a、PCM(脉冲编码调制 Pulse-code modulation):PCM又分为DPCM(差分-differencial)、ADPCM(自适应-Adaptive)等。
具体算法可参考如下博主:
LPCM AAPCM G711 G726 AAC 音频采样、编码及帧大小计算_Biao-优快云博客
2、音频格式:其实音频格式可以有两种维度的理解,一种是纯粹的裸码流即其中全是音频数据,即音频编码直接产生的有效数据,即第1点中的算法格式命名;第二种维度为带了一定封装的格式,如mp3、avi等,这也是我们生活中比较常见的格式。
3、采样率:1s钟对声波的采样频率。人耳能听到的音频范围为20HZ-20000HZ,低于或者高于该频率范围的一般人都无法察觉,(与人眼对光波的感光波长范围类似,也分为可见光和非可见光)。根据奈葵斯特采样定理,一般要高于采样频率2倍以上,才能有效恢复原始信号。目前采样频率一般共分为11025Hz、22050Hz、24000Hz、44100Hz、48000Hz五个等级,11025Hz能达到AM调幅广播的声音品质,而22050Hz和24000HZ能达到FM调频广播的声音品质,44100Hz则是理论上的CD音质界限,48000Hz则更加精确。
4、位深(采样精度):单次采样的数据量,常见的8、16、32bit;
5、符号: 采样精度是无符号还是有符号数。
6、存储方式:音频数据在内存中的排列方式,分为packed和planar方式;
7、大小端:与网络编程类似,音频数据在内存中也要考虑大小端,如位深为16、32位的分别有2字节和4字节,那么此时在内存中就有数据的高位在内存中高位内存地址还是低位内存地址。一般音频数据都用小端模式,即高位数据存在高位地址,低位数据存在低位地址 。对于大小端的更深入的理解,请读者自行学习。
8、声道数:常见的有1、2声道,对于高级的立体声,有5+1环绕声道、6+1环绕声道、7+1环绕声道等等。
假设双声道的左右两声道波形相位同样时,没有立体感 ,其效果和单声道一 样。 (也就是说双声道不必一定是立体声咯)
当双声道的左右两声道波形彻底一 样时,人为制造必定的相位差能够创建宽阔的声场,使之具备立体感, 人为制造的相位差是固定的,因此这种立体声称为假立体声。
而真立体声是 两个声道彻底不一样的两个波形,每时每刻拥有着不一样的相位差。
9、音频帧数据量:音频帧跟编码格式相关,它是各个编码标准自己实现的。
a、对于pcm,其实不太关心帧长;
b、对于g711, 标准中有80、160、240、480采样点都可以为一帧。
c、对于aac来说,通常1024采样点为一帧。
典型地,如知道如下数据,获取帧数据量可通过下面方式得到:
一帧音频数据的数据量大小。假设音频采样率 = 8000,采样通道 = 2,位深度 = 16 ,帧时长 = 20ms(即1s有50帧),那么计算如下:
一秒钟总的数据量 = 8000 * 2*16/8 = 32000
每帧音频数据大小 = 32000/50 = 640
每个通道样本数 = 640/2 = 320