蛋疼是第一生产力

音频编码知识基础

2020-04-09 14:01:17

音频编码

去年做了很多关于音频方面的开发工作,自己从一个完全的门外汉,一步一步的模索,趟过了不少的坑,学习和掌握到了不少的关于音频编码方面的知识,鉴于这一块的资料较少,而很多朋友在基础上有较多迷惑的地方,写一篇文章,简要的描述一下音频方面的几个基础的知识点。

名词解释

  • PCM:脉冲信号调制
  • 采样率:每秒采样几个点进行模拟量到数字量
  • 通道:声道,有几个麦克风
  • 模数转换ADC:将连续的模拟量使用离散的数字进行表示的方法

声音采集与模数转换

因为人耳敏感的声音频率,大约是20Hz~20000Hz之间,所以计算机里,通常使用一个16位的数字来表示一个采样点的数字量(-32767 ~ 32767),也叫做位深度。16的位深度下,精度大约是1Hz,而在24位下,精度大约到0.001Hz,采样精度更加准确。

假如单通道,采样率8000(每秒取8000个点进行模拟到数字量的转换),那每秒将产生 8000 * 1 * (16 / 8) = 16000个字节的数据量产生。

采样率通道数位数每秒数据量kB
80001161600015.63kB
441001168820086.13kB
480001169600093.75kB
96000116192000187.50kB
192000116384000375.00kB

8000的采样率太低,只适用于低要求下的人声传输,一般按44.1kHz的采样率,每秒产生的数据量为93.75kB,这个数据量太大了,对于网络传输来说,相当的不利,所以在车载终端这一块,通常使用最低能够接受的8000采样率来录制声音,同时配合G711A等简单、快速的编码方法,来进一步降低数据量的大小,因为终端CPU性能比较低下,需要节省出来,交给其它的事务。

影响音质的关键要素

  1. 位深度:决定了每个采样点的精度,比如16位/24位
  2. 采样率:决定了每秒采样的次数,比如常见的44100Hz

通过上面的理论而推断,影响音质的最根本的参数在于上面的两个参数,它也决定了最终产生的音频数据量的大小。

编码与压缩

一般的编码方式,如G711A、G711U、ADPCM、G726等,是对PCM数据的无损编码方法,通常会达到50%或25%的压缩率(即原数据的一半或四分之一)。

而对于MP3、AAC等高级压缩算法,会通过有损压缩,去除掉一些人耳不敏感的采样点,通常能够达到非常高的压缩比。

常用工具

  • Audacity:一个开源免费、跨平台的音频处理的图形化工具,支持很多种编码的音频解析,以及很多种音效的处理,大力推荐。
  • ffmpeg:ffmpeg支持很多种音频编码与压缩算法的实现,可以在各种音频编码间转换,特别是ffplay,支持无封装的比如G711A的裸数据文件的播放。

参考

  1. FFMPEG入门与集成开发指南
  2. Audacity官方网站
  3. FFMPEG官方网站
尚无留言,就等你了。。。

提交留言: