Android Multimedia框架总结(十七)音频开发基础知识
请尊重分享成果,转载请注明出处,本文来自逆流的鱼yuiop,原文链接:http://blog.csdn.net/hejjunlin/article/details/53078828
近年来,唱吧,全民K歌,QQ音乐,等成为音频软件的主流力量,音频开发一直是多媒体开发中不可或缺的部分,如为什么这个声音这么不清楚,为什么耳机里有电流声,为什么录音时,有时会碰到奇怪的回声,先看下今天的Agenda:
音频开发的主要应用
音频开发基础概念
音频开发的具体内容
常见的音频编码(压缩)方式
音频算法处理的开源库
Android提供了哪些音频开发相关的API
Android音频开发
音频播放器 :(QQ音乐,网易云音乐)
录音机 :(全民K歌)
语音电话:(QQ电话,微信电话)
音视频监控应用:(摄像头,录音笔)
音视频直播应用:(午夜直播,心灵之声电台)
音频编辑/处理软件:(ktv音效、变声, 铃声转换)
蓝牙耳机/音箱 :(耳机、KBOX) 等等。
(1)采样率(samplerate)
是指录音设备在一秒钟内对声音信号的采样次数。
采样频率越高声音的还原就越真实越自然。单位用赫兹(Hz)
采样定理: (奈奎斯特定理)
在进行模拟/数字信号的转换过程中,当采样频率fs.max大于信号中最高频率fmax的2倍时(fs.max>2fmax),采样之后的数字信号完整地保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的2.56~4倍;
人耳能听到的声波的频率范围通常? 20~20000Hz
为了保证声音不失真,采样频率应在40kHz以上.
但是,常用的音频采样频率有:8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz、96kHz、192kHz等。
例如:电话是标准的8khz采样率!
话音信号频率在0.3~3.4kHz范围内,用8kHz的抽样频率,就可获得能取代原来连续话音信号的抽样信号。
而一般CD采集采样频率为44.1kHz。
目前,一般情况下的录音都是采用44100Hz的。
(2)量化精度(位宽)
就是把采样得到的声音信号幅度转换成数字值,
用于表示信号强度。
量化精度:用多少个二进位来表示每一个采样值,也称为量化位数。
声音信号的量化位数一般是 4,6,8,12或16 bits 。
这个数值的数据类型大小可以是:4bit、8bit、16bit、32bit等等,位数越多,表示得就越精细,声音质量自然就越好。
当然,数据量也会成倍增大。
一般采用的是16bit。
(3)声道数(channels)
由于音频的采集和播放是可以叠加的.
因此,可以同时从多个音频源采集声音,并分别输出到不同的扬声器,故声道数一般表示声音录制时的音源数量或回放时相应的扬声器数量。
单声道(Mono)和双声道(Stereo)比较常见,顾名思义,前者的声道数为1,后者为2。
(4)音频帧(frame)
音频跟视频很不一样,视频每一帧就是一张图像,而从上面的正弦波可以看出,音频数据是流式的,本身没有明确的一帧帧的概念。
在实际的应用中,为了音频算法处理/传输的方便,一般约定俗成取2.5ms~60ms为单位的数据量为一帧音频。
这个时间被称之为“采样时间”,其长度没有特别的标准,它是根据编解码器和具体应用的需求来决定的,我们可以计算一下一帧音频帧的大小:
AAC: 一个AAC帧对应的采样点个数1024, 采样率(samplerate)为 44100Hz
当前一帧的播放时间 = 1024 * 1000000/44100= 22.32ms(单位为ms)
mp3: 每帧均为1152个字节
当前一帧的播放时间 = 1152* 1000000/44100= 26.122ms(单位为ms)
音频采集/播放
音频算法处理(去噪、静音检测、回声消除、音效处理、功放/增强、混音/分离,等等)
音频的编解码和格式转换
音频传输协议的开发(SIP,A2DP、AVRCP,等等)
SIP:会话初始协议(Session Initiation Protocol)是一种信令协议,用于初始、管理和终止网络中的语音和视频会话
A2DP全名是Advanced Audio Distribution Profile 蓝牙音频传输模型协定!A2DP是能够采用耳机内的芯片来堆栈数据,达到声音的高清晰度。
AVRCP(Audio/Video Remote Control Profile),即音频/视频远程控制规范。
什么是音频编码?
是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。
为什么要音频编码?
存储一秒钟采样率为44.1KHz,位深为16bit,双声道的PCM编码的音频信号,需要
44100*16bit*2 / 8/1024 = 172.2KB的空间,那么1分钟则约为10.09M。
这对大部分用户是不可接受的。
只有2种方法,降低采样指标或者压缩。
降低采样是不可取的,因此就有了各种各样的压缩方式。
有两类主要的音频文件格式:
有损和无损。
有损文件格式: 是基于声学心理学的模型,除去人类很难或根本听不到的声音。
无损格式,例如PCM,WAV,ALS,ALAC,TAK,FLAC,APE,WavPack(WV)
有损格式,例如MP3,AAC,WMA,Ogg
根据采样率和采样大小可以得知,相对自然界的信号,音频编码最多只能做到无限接近,至少目前的技术只能这样了,相对自然界的信号,任何数字音频编码方案都是有损的,因为无法完全还原。在计算机应用中,能够达到最高保真水平的就是PCM编码,被广泛用于素材保存及音乐欣赏,CD、DVD以及我们常见的WAV文件中均有应用。因此,PCM约定俗成了无损编码,因为PCM代表了数字音频中最佳的保真水准,并不意味着PCM就能够确保信号绝对保真,PCM也只能做到最大程度的无限接近。
我们而习惯性的把MP3列入有损音频编码范畴,是相对PCM编码的。
就像用数字去表达圆周率,不管精度多高,也只是无限接近,而不是真正等于圆周率的值。
FFmpeg: Fast Forward MPEG
Moving Picture Experts Group 先进视频编码标准
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。
采用LGPL或GPL许可证。
它提供了录制、转换以及流化音视频的完整解决方案。
它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量。
不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。
FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。
FFmpeg组成组件
音频采集: MediaRecoder,AudioRecord
音频播放: SoundPool,MediaPlayer,AudioTrack
音频编解码: MediaCodec
NDK API: OpenSL ES
播放流程: 获取流–>解码–>播放
录制播放路程: 录制音频视频–>剪辑–>编码–>上传服务器 别人播放.
直播过程 : 录制音视频–>编码–>流媒体传输–>服务器—>流媒体传输到其他app–>解码–>播放
几个重要的环节
录制音频 AudioRecord
视频剪辑 ffmpeg
音频编码 aac
上传流文件 网络框架,进度监听,断点续传
流媒体传输 流媒体传输协议rtmp rtsp hls
音频解码 aac
渲染播放 MediaPlayer
Android Multimedia框架总结(十七)音频开发基础知识的更多相关文章
- Android Multimedia框架总结(十一)CodeC部分之AwesomePlayer到OMX服务
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52623882 前言:上篇文< ...
- Android Multimedia框架总结(九)Stagefright框架之数据处理及到OMXCodec过程
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼:http://blog.csdn.net/hejjunlin/article/details/52532085 不知不觉到第九篇了,感觉还有 ...
- Android Multimedia框架总结(六)C++中MediaPlayer的C/S架构
转载请把头部出处链接和尾部二维码一起转载,本文出自: http://blog.csdn.net/hejjunlin/article/details/52435789 前面几节中,都是通过java层调用 ...
- Android Multimedia框架总结(十五)Camera框架之Camera2补充
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52751055 前言:监于5.0之 ...
- Android Multimedia框架总结(七)C++中MediaPlayer的C/S架构补充及MediaService介绍
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼,文章链接: http://blog.csdn.net/hejjunlin/article/details/52465168 前面一篇主要介绍 ...
- IOS基于XMPP协议开发--XMPPFramewok框架(一):基础知识
最近蘑菇街团队的TT的开源,使我对im产生了兴趣,然后在网上找到了XMPPFramework进行学习研究, 并写了以下系列教程供大家参考,有写的不对的地方,请大家多多包涵指正. 目录索引 IOS基于X ...
- IOS开发基础知识碎片-导航
1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...
- IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列
1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...
- IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token
本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动 ...
随机推荐
- a标签点击页面刷新但还保存当前点击的class是激活的状态
$(".shop-list1").find("li").each(function(){ var href=$(this).attr(&q ...
- Xshell5下利用sftp上传下载传输文件
sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp 与 ftp 有着几乎一样的语法和功能.SFTP 为 SSH ...
- 11_Python的列表推导式_Python编程之路
上一节我们结束了有关python的方法相关内容 这一节我们先来学习python的列表推导式 之前跟大家说过range方法的使用,在这里我就不做过多的解释了,如忘记了,请翻阅之前的介绍 列表推导式,是P ...
- [Codeforces 933B]A Determined Cleanup
Description 题库链接 给你两个正整数 \(p,k\) ,询问是否能够构造多项式 \(f(x)=\sum\limits_{i=0}^{d-1}a_ix^i\) ,使得存在多项式 \(q(x) ...
- [HAOI2007]覆盖问题
题目描述 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定 用3个L*L的正方形塑料薄膜将小树遮起来.我 ...
- [POI2000] 最长公共子串
给出几个由小写字母构成的单词,求它们最长的公共子串的长度. 任务 从文件中读入单词 计算最长公共子串的长度 输出结果到文件 输入 文件的第一行是整数 n,1<=n<=5,表示单词的数量.接 ...
- ●BZOJ 1855 [Scoi2010]股票交易
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1855 题解: DP,单调队列优化.(好久没做 DP题,居然还意外地想出来了) 定义 dp[i ...
- poj2828 BuyTickets 线段树
Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 17326 Accepted: 8601 Desc ...
- [BZOJ]1019 汉诺塔(SHOI2008)
找规律成功次数++. Description 汉诺塔由三根柱子(分别用A B C表示)和n个大小互不相同的空心盘子组成.一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一个塔状的锥形体. ...
- bzoj3038上帝造题的七分钟2
3038: 上帝造题的七分钟2 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1679 Solved: 713[Submit][Status][Dis ...