首先,需要认识到的是,生活中声音都是模拟信号,比如正弦信号等。但是CPU能处理的信号是数字信号,所以需要进行AD转化,输入到系统处理后,通过DA转换,然后输入到音频系统进行放大等播放出来。
一、这里提到的几个过程进行简单描述
1. AD转换
对模拟信号进行 采样-----》保持-----》量化 ------》 编码
采样还有许多参数,比如分辨率、采样精度、采样量程等,挑几个在音频中经常使用的描述一下
(1)采样频率:AD转换器在单位时间内对模拟信号的采样次数。采样应该遵行采样定理:奈奎斯特采样定理奈奎斯特采样定理https://baike.baidu.com/item/%E9%87%87%E6%A0%B7%E5%AE%9A%E7%90%86/8599843?fr=aladdin
对于音频,一般是11025Hz、22050Hz或者44100Hz,安卓目前一般用44100Hz。
人耳的听觉访问是:20~20000Hz,根据采样定理因此 44100Hz 足够使用了,大于44100Hz,一方面是人耳也识别不了,另一方面是playload也比较大,对系统编程要求比较高。
(2) 采样位数(量化):对于每一次的采样,用多少bit来存储它,常用的8bit 或者16bits。
假如,采用44100Hz,16bit来对音频进行采样,那么一秒钟采样数据就有 86 KB,挺大的了。
2. 音频信号输入到系统和输出的通道
一般是通过I2S进行传输,相关的介绍可以参照百度百科:I2S_百度百科I2S(Inter—IC Sound)总线, 又称集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。https://baike.baidu.com/item/I2S/3443390?fr=aladdin3、系统处理
具体有哪些,还在不是特别明确,但是应该有控制,比如什么时候该播放什么音频。
4、 DA转换
AD的逆过程。
一般来说,AD、DA 和DA后的放大(功放)有可能集成在一块芯片或者 功放单独出来(目前的项目是这样)。
二、音频信号在安卓系统中的呈现方式(PCM)
1. 什么是PCM?
PCM(Pulse Code Modulation,脉冲编码调制)音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样、量化、编码转换成的标准数字音频数据。
描述PCM数据的6个参数:
Sample Rate : 采样频率。8kHz(电话)、44.1kHz(CD)、48kHz(DVD)。
Sample Size : 量化位数。通常该值为16-bit。
Number of Channels : 通道个数。常见的音频有立体声(stereo)和单声道(mono)两种类型,立体声包含左声道和右声道。另外还有环绕立体声等其它不太常用的类型。
Sign : 表示样本数据是否是有符号位,比如用一字节表示的样本数据,有符号的话表示范围为-128 ~ 127,无符号是0 ~ 255。
Byte Ordering : 字节序。字节序是little-endian还是big-endian。通常均为little-endian。字节序说明见第4节。
Integer Or Floating Point : 整形或浮点型。大多数格式的PCM样本数据使用整形表示,而在一些对精度要求高的应用方面,使用浮点类型表示PCM样本数据。
2. PCM数据格式
如果是单声道的音频文件,采样数据按时间的先后顺序依次存入(有的时候也会采用LRLRLR方式存储,只是另一个声道的数据为0),如果是双声道的话就按照LRLRLR的方式存储,存储的时候与字节序有关。big-endian模式如下图所示:
总的来看 PCM如下图
关于pcm,参考相关博客,具体是哪一个,没能记住链接,在此表示感谢。