今天主要讲解下Android音频开发的入门知识,希望对想入门却不知如何下手的朋友有所帮助,同时希望能得到高手的指点和帮助。

深入细化基础技能知识点

大致细化如下10个知识点。

  1. 音频开发的主要应用有哪些(应用场景有哪些)?
  2. 音频开发的具体内容有哪些?
  3. 开发音频应用的难点有哪些?
  4. 音频开发必备基础概念有哪些?
  5. 常见的音频编码方式有几种?
  6. 常见的音频压缩格式有几种?
  7. Adndroid VoIP相关的开源应用有哪些 ?
  8. 常见的音频算法处理的开源库有哪些 ?
  9. Android提供了哪些音频开发相关的API?
  10. 音频开发的延时标准是什么?

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等。

  1. 量化精度(位宽)

    如上图所示,每一个红色的采样点,都需要用一个数值来表示大小,这个数值的数据类型大小可以是:4bit、8bit、16bit、32bit等等,位数越多,表示得就越精细,声音质量自然就越好,当然,数据量也会成倍增大。常见的位宽是:8bit 或者 16bit。

  2. 声道数(channels)

    由于音频的采集和播放是可以叠加的,因此,可以同时从多个音频源采集声音,并分别输出到不同的扬声器,故声道数一般表示声音录制时的音源数量或回放时相应的扬声器数量。比如我们通常说的单声道(Mono)和双声道(Stereo),前者的声道数为1,后者为2

  3. 音频帧(frame)

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

    这个时间被称之为“采样时间”,其长度没有特别的标准,它是根据编码×××和具体应用的需求来决定的,我们可以计算一下一帧音频帧的大小:假设某通道的音频信号是采样率为8kHz,位宽为16bit,20ms一帧,双通道,则一帧音频数据的大小为: int size = 8000 x 16bit x 0.02s x 2 = 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: 常见的音频算法处理的开源库

视频开发也有常用的开源库,比如常用的FFmpeg,Android本身自带的medicodec等,当然,音频也有开源的算法处理库,比如:speex、ffmpeg,webrtc audio module(NS、VAD、AECM、AGC)等等

9: Android提供了哪些音频开发相关的API

  1. 音频采集: MediaRecoder,AudioRecord
  2. 音频播放: SoundPool,MediaPlayer,AudioTrack
  3. 音频编解码: MediaCodec
  4. NDK API: OpenSL ES

10: 音频开发的延时标准

ITU-TG.114规定,对于高质量语音可接受的时延是300ms。一般来说,如果时延在300~400ms,通话的交互性比较差,但还可以接受。时延大于400ms时,则交互通信非常困难。

总结

音频开发的知识点还是很多的,学习音频开发需要大家有足够的耐心,一步一个脚印的积累,只有这样才能把音频开发学好。下面推荐几个比较好的博主,希望对大家有所帮助。

  1. csdn博主:《雷神雷霄骅》
  2. 51CTO博客:《Jhuster的专栏》

Android 音频开发(一) 基础入门篇相关推荐

  1. Android camera(4)---Android Camera开发之基础知识篇

    Android Camera开发之基础知识篇 转自:https://blog.csdn.net/feiduclear_up/article/details/51968975#jump5 概述 Andr ...

  2. 云小课|DGC数据开发之基础入门篇

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:欢迎来到DGC数据 ...

  3. 3ds Max .NET二次开发的基础入门篇

    3ds Max .NET SDK由以下.NET程序集组成. Autodesk.Max.dll - Contains wrappers that expose most of the API eleme ...

  4. Android音视频开发---0基础入门准备篇

    文章目录 0,题记 1,学习路线 2,学习目标 任务列表 基础知识 FFmpeg 3,开始音视频开发必备的技能 1,C语言. 2,Linux. 3,基本的Linux编译执行命令,以及vim操作. 4, ...

  5. Android音频开发(一):音频基础知识

    一.Android音频开发(一):音频基础知识 二.Android音频开发(二):录制音频(WAV及MP3格式) 三.Android音频开发(三):使用ExoPlayer播放音频 四.Android音 ...

  6. Android 音频开发(四) 如何播放一帧音频数据下

    再看这一篇文章前,如果你是小白,我建议你先看一下Android 音频开发(一) 基础入门篇这一篇.今天继续讲解如何通过Android SDK自带API实现播放一帧音频数据. 我们都知道,Android ...

  7. Android 音频开发(二) 采集一帧音频数据

    这一节主要介绍如何采集一帧音频数据,如果你对音频的基础概念比较陌生,建议看我的上一篇Android 音频开发(一) 基础入门篇.因为音频开发过程中,经常要涉及到这些基础知识,掌握了这些重要的基础知识后 ...

  8. Android音频开发(4):如何存储和解析wav文件

    2019独角兽企业重金招聘Python工程师标准>>> 无论是文字.图像还是声音,都必须以一定的格式来组织和存储起来,这样播放器才知道以怎样的方式去解析这一段数据,例如,对于原始的图 ...

  9. Android音频开发(3):如何播放一帧音频

    本文重点关注如何在Android平台上播放一帧音频数据.阅读本文之前,建议先读一下<Android音频开发(1):基础知识>,因为音频开发过程中,经常要涉及到这些基础知识,掌握了这些重要的 ...

最新文章

  1. .net 连mysql代码_.net连接常用的数据库代码
  2. OS - MMAP初探
  3. 全球最大的AI创意梦工厂!2019中国高校计算机大赛-人工智能创意赛开始报名啦!...
  4. h5 时间控件问题,怎么设置type =datetime-local 的值
  5. axure web组件下载_实践干货:Axure插入图标的4种办法
  6. [vue] 有在vue中使用过echarts吗?踩过哪些坑?如何解决的?
  7. matlab安装MinGW-64代码C/C++编译器的方法
  8. docker与虚拟机性能比较
  9. android 炫酷背景,纯css3自动背景变换背景颜色,很炫酷
  10. NYOJ-712(动态规划)-题目----------------------------- 探寻宝藏
  11. python自动生成采集规则_快速制作规则及获取规则提取器API
  12. 思科不打算修复SMB路由器中严重的认证绕过漏洞
  13. 九章算术 六:《均输》
  14. 京沪深仍为经济发展水平最高的城市,平均薪酬增长率均在7%以上
  15. myet: 练习英语口语不错
  16. ServU的内网架设注意项
  17. 高中英语教师资格证考试经验贴
  18. v-rep仿真之键盘控制机械臂末端移动
  19. Box2d平移关节(PrismaticJoint)沿轴循环往复移动
  20. 2020-11-30 脑残记录

热门文章

  1. 多项目晶圆(MPW)服务
  2. selenium + plantomjs 实现自动化测试01
  3. 荣耀Magic4性能体验超苹果再次实锤!非官方游戏性能对比出炉
  4. 中教云教师备课云平台获北京市新技术新产品(服务)认定
  5. 哪吒汽车宣布获得上海银行总行20亿元综合授信额度
  6. 3800元!爆料大神怒赞谷歌Pixel 6:这是今年最好看手机!
  7. 特斯拉宣布总部将从加州硅谷迁到得州
  8. 研究称:苹果开始感受到全球芯片短缺影响,但三星等受影响更大
  9. LG深化与苹果合作,扩大向苹果供应OLED
  10. 知名投资机构董事总经理在培训中晕倒后去世,这个培训究竟是什么?