音频基础

音频开发的具体内容有:
(1)音频采集/播放
(2)音频算法处理(去噪、静音检测、回声消除、音效处理、功放/增强、混音/分离等等)
(3)音频编解码和格式转换
(4)音频传输协议的开发(SIP、A2DP、AVRCP等等)

基础概念

(1)采样率(samplerate)

采样就是把模拟信号数字化的过程,不仅仅是音频需要采样,所有的模拟信号都需要通过采样转换为可以用0101来表示的数字信号,采样率是指录音设备一秒钟内对声音信号的采样次数。

人耳能听到的声波频率范围是2020000Hz,在进行模拟/数字信号转换过程中,当采样频率大于信号中的最高频率的2倍时,采样后的数字信号完整的保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的2.564倍。

常用的音频采样频率有:8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz、96kHz、192kHz等。

(2)量化精度

对于每一个采样点,都需要一个数值来表示大小,这个数值的数据类型的大小可以是:4bit、8bit、16bit、32bit等,位数越多,表示的就越精细,声音质量就越好,同时数据量也越大。

一般采用16bit。

(3)声道数

由于音频的采集和播放是可以叠加的,因此,可以同时从多个音频源采集声音,并分别输出到不同的扬声器,故声道数一般表示声音录制时的音源数量或回放时相应的扬声器数量。

(4)音频帧
音频跟视频很不一样,视频每一帧就是一张图像,而从上面的正玄波可以看出,音频数据是流式的,本身没有明确的一帧帧的概念,在实际的应用中,为了音频算法处理/传输的方便,一般约定俗成取2.5ms~60ms为单位的数据量为一帧音频。

计算一帧音频数据大小,假设某音频信号是采样率为8kHz、双通道、位宽为16bit,20ms一帧,则一帧音频数据的大小为:int size = 8000 x 2 x 16bit x 0.02s = 5120 bit = 640 byte。

常见音频编码方式

量化的过程被称为编码,根据不同量化策略,产生了许多不同的编码方式,常见的有:PCM和ADPCM,这些数据代表了无损的原始数字音频信号,添加一些文件头信息,就可以存储为WAV文件。

Android中音频开发相关API

  • 采集:MediaRecorder、AudioRecord
  • 播放:AudioTrack
  • 编解码:MediaCodec

技术实现

Android API的使用大多都不难,可能只有MediaCodec的使用需要适当讲解,这我会在后面单独写一篇文章讲解MediaCodec的使用,其它API使用方法可以参考我的的github项目****。

你可能感兴趣的:(音频基础)