您当前所在位置:ag旗舰厅 > 热门新闻 >

Android音频开发(1):基础知识

先来点闲言碎语,前段时间吾有一段感悟:Android开发,自己并不是一个能够走得多远的倾向,它只是一个平台,挑供了很多封装益的API,让行家能够迅速开发出针对特定营业的行使。

真实有价值的地方就在于Android与详细的营业倾向结相符,比如:Android与音视频技术,Android与智能硬件交互,Android与前端技术的融相符与追求,Android新闻坦然,Android源码深度定制等等。

吾不息比较望益音视频/多媒体倾向,期待在此能够深入积累和追求,前段时间吾发布了一款Android VoIP网络电话行使“飞鸽电话”,并写了一篇分析其团体架构的文章《PigeonCall:一款Android VoIP网络电话App架构分析》,迎接兴趣味的幼友人们先望一望。

在这个行使的开发过程中学到的东西还蛮多的,因此想写一些文章分享分享,本文行为开篇,主要以问答的形态,介绍一些音频开发的基础常识,特意主要,由于不晓畅这些常识,很多Android API或者第三方库的参数,你都不晓畅该怎么配置。

1. 音频开发的主要行使有哪些?

音频播放器,录音机,语音电话,音视频监控行使,音视频直播行使,音频编辑/处理柔件,蓝牙耳机/音箱,等等。

2. 音频开发的详细内容有哪些?

(1)音频采集/播放

(2)音频算法处理(往噪、静音检测、回声清除、音效处理、功放/添强、混音/别离,等等)

(3)音频的编解码和格式转换

(4)音频传输制定的开发(SIP,A2DP、AVRCP,等等)

3. 音频行使的难点在哪?

延时敏感、卡顿敏感、噪声按捺(Denoise)、回声清除(AEC)、静音检测(VAD)、混音算法,等等。

4. 音频开发基础概念有哪些?

在音频开发中,下面的这几个概念频繁会遇到。

(1) 采样率(samplerate)

采样就是把模拟信号数字化的过程,不光仅是音频必要采样,一切的模拟信号都必要议决采样转换为能够用0101来外示的数字信号,暗示图如下所示:

蓝色代外模拟音频信号,红色的点代外采样得到的量化数值。

采样频率越高,红色的阻隔就越浓密,记录这一段音频信号所用的数据量就越大,同时音频质量也就越高。

按照奈奎斯特理论,采样频率只要不矮于音频信号最高频率的两倍,就能够无亏损地还原原起的声音。

清淡人耳能听到频率周围大约在20Hz~20kHz之间的声音,为了保证声音不失真,采样频率答在40kHz以上。常用的音频采样频率有:8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz、96kHz、192kHz等。

(2) 量化精度(位宽)

上图中,每一个红色的采样点,都必要用一个数值来外示大幼,这个数值的数据类型大幼能够是:4bit、8bit、16bit、32bit等等,位数越多,外示得就越邃密,声音质量自然就越益,自然,数据量也会成倍添大。

常见的位宽是:8bit 或者 16bit

(3) 声道数(channels)

由于音频的采集和播放是能够叠添的,因此,能够同时从多个音频源采集声音,并别离输出到差别的扬声器,故声道数清淡外示声音录制时的音源数目或回放时响答的扬声器数目。

单声道(Mono)和双声道(Stereo)比较常见,顾名思义,前者的声道数为1,后者为2

(4) 音频帧(frame)

这个概念在行使开发中特意主要,网上很多文章都异国特意介绍这个概念。

音频跟视频很纷歧样,视频每一帧就是一张图像,而从上面的正玄波能够望出,音频数据是流式的,自己异国清晰的一帧帧的概念,在实际的行使中,为了音频算法处理/传输的方便,清淡约定俗成取2.5ms~60ms为单位的数据量为一帧音频。

这个时间被称之为“采样时间”,其长度异国稀奇的标准,它是按照编解码器和详细行使的需求来决定的,吾们能够计算一下一帧音频帧的大幼:

倘若某音频信号是采样率为8kHz、双通道、位宽为16bit,20ms一帧,则一帧音频数据的大幼为:

int size = 8000 x 2 x 16bit x 0.02s = 5120 bit = 640 byte

5. 常见的音频编码手段有哪些?

上面挑到过,模拟的音频信号转换为数字信号必要经过采样和量化,量化的过程被称之为编码,按照差别的量化策略,产生了很多差别的编码手段,常见的编码手段有:PCM 和 ADPCM,这些数据代外着无损的原起数字音频信号,增补一些文件头新闻,就能够存储为WAV文件了,它是一栽由微轻柔IBM说相符开发的用于音频数字存储的标准,能够很容易地被解析和播放。

吾们在音频开发过程中,会频繁涉及到WAV文件的读写,以验证采集、传输、授与的音频数据的切确性。

6. 常见的音频压缩格式有哪些?

最先浅易介绍一下音频数据压缩的最基本的原理:由于有冗余新闻,于是能够压缩。

(1) 频谱遮盖遮盖遮盖效答: 人耳所能察觉的声新闻号的频率周围为20Hz~20KHz,在这个频率周围以外的音频信号属于冗余信号。

(2) 时域遮盖遮盖遮盖效答: 当强新闻号和弱新闻号同时显眼前,弱信号会听不到,因此,弱新闻号也属于冗余信号。

下面浅易列出常见的音频压缩格式:

MP3,AAC,OGG,WMA,Opus,FLAC,APE,m4a,AMR,等等

7. Adndroid VoIP有关的开源行使有哪些 ?

imsdroid,sipdroid,csipsimple,linphone,WebRTC 等等

8. 音频算法处理的开源库有哪些 ?

speex、ffmpeg,webrtc audio module(NS、VAD、AECM、AGC),等等

10. Android挑供了哪些音频开发有关的API?

音频采集: MediaRecoder

音频播放: SoundPool,MediaPlayer,AudioTrack (它们之间的区别能够参考这篇文章)

音频编解码: MediaCodec

NDK API: OpenSL ES

11. 音频开发的延时标准是什么?

ITU-TG.114规定,对于高质量语音可批准的时延是300ms。清淡来说,倘若时延在300~400ms,通话的交互性比较差,但还能够批准。时延大于400ms时,则交互通信特意难得。

12. 幼结

音频开发的知识点其实挺多的,一篇文章也无法详细地睁开叙述,因此,不足周详和详细的地方,请行家搜索专科的原料进走深入晓畅。文章中有不明了的地方迎接留言或者来信 lujun.hust@gmail.com 交流,或者关注吾的新浪微博 @卢_俊 或者 微信公多号 @Jhuster 获取最新的文章和资讯。