android多媒体篇-音频-1 音频相关基础知识
#1.序
毕业了三年,虽说技术方面有了一些的成长,但是总感觉现在做东西的速度,提高不上去,可能更多的只是知道了如何去面对一些问题,前段时间出去玩了一次,然后突然对生活和工作的感悟很大,应该也算是成长吧,之前的工作接触的比较多的是,android socket+文件上传,下载相关的内容,现在做的也是和即时通讯有关,如果只是将自己的知识积累限制在这块,也确实就将自己限制了.
最近的开发,与android的多媒体打上了交道,再加上在之前的公司也做过音乐播放器,虽然做的是比较简单的,就是将MediaPlayer进行了封装,然后进行播放,过了许久以后,很多知识还是会遗忘,虽然说工作时间长了,对自己有用的是学习新知识和解决问题的能力,但是相关知识的积累还是不能丢下的.
其实想想,android一共有多少东西,java一共有多少东西,如果将内容体系进行梳理,有空就进行学习,用两年左右时间,相信想熟悉android的framework+ui相关的,还是可以的,我的目标暂时也没有定这个长远,想花费一些时间,将自己了解到的多媒体相关的先进行梳理一下.
每个人写博客都有自己的特点,我的特点是喜欢总分总,不太喜欢直接上来就贴出来一大段的代码,让大家去阅读,虽然一句名言是"read the fucking source code", 但是如果知道了一些专业知识或者其他相关的一些背景的话,我们看这个使用以及相关的内容的高度是不同的,而且到最后,我们总结时,我们是比他人知道的更多的.就像在面试时,面试官经常会问的一句话,你跟其他的程序员有什么不同.我们的不同点是,人无我有,人有我优.他们会写程序,我也会写程序,而且我不仅写程序,我还可以优化程序+写出维护性比较好的程序.对于一些比较艰难的需求,他们不能实现的,我能实现,因为我逻辑思维能力更强,我的专业功底更强.
废话有点多,现在步入正题.
#2.android多媒体
先整体的说一下,android多媒体包块那些内容,我目前是这么总结的,多媒体包括以下的几个内容
- 音频
- 视频
- 图片
根据目前了解的知识以及目前做的和多媒体相关的,我们一个一个来介绍这几部分内容,并且会添加适当的例子来说明这些功能的使用,但是不涉及android native相关层面的分析
#2.1 音频
##2.1.1 音频是什么
音频是个专业术语,人类能够听到的所有声音都称之为音频,它可能包括噪音等。声音被录制下来以后,无论是说话声、歌声、乐器都可以通过数字音乐软件处理,或是把它制作成CD,这时候所有的声音没有改变,因为CD本来就是音频文件的一种类型。而音频只是储存在计算机里的声音。如果有计算机再加上相应的音频卡——就是我们经常说的声卡,我们可以把所有的声音录制下来,声音的声学特性如音的高低等都可以用计算机硬盘文件的方式储存下来。反过来,我们也可以把储存下来的音频文件用一定的音频程序播放,还原以前录下的声音。(来源百度百科)
其实从这里,已经可以看到,相关的内容是两部分,录制+播放
##2.1.2 音频能用来做什么
既然音频可以录制,播放,所以能够用的地方,包含以下几个方面
- 当做录音机
- 语音消息录制与播放
- 语音识别为文字
- 播放音乐等等
- 网络电话
- 直播相关语音消息
##2.1.3 音频相关的基础知识
###2.1.3.1 声音相关的基础知识(来源: 百度百科)
- 响度(loudness):人主观上感觉声音的大小(俗称音量),由“振幅”(amplitude)和人离声源的距离决定,振幅越大响度越大,人和声源的距离越小,响度越大。(单位:分贝dB)
- 音调(pitch):声音的高低(高音、低音),由“频率”(frequency)决定,频率越高音调越高(频率单位Hz(hertz),赫兹[/url,人耳听觉范围20~20000Hz。20Hz以下称为次声波,20000Hz以上称为超声波)例如,低音端的声音或更高的声音,如细弦声。
- 频率是每秒经过一给定点的声波数量,它的测量单位为赫兹,是以海因里希·鲁道夫·赫兹的名字命名的。此人设置了一张桌子,演示频率是如何与每秒的周期相关的。
- 1千赫或1000赫表示每秒经过一给定点的声波有1000个周期,1兆赫就是每秒钟有1,000,000个周期,等等。
- 音色(Timbre):又称音品,波形决定了声音的音色。声音因不同物体材料的特性而具有不同特性,音色本身是一种抽象的东西,但波形是把这个抽象直观的表现。音色不同,波形则不同。典型的音色波形有方波,锯齿波,正弦波,脉冲波等。不同的音色,通过波形,完全可以分辨的。
- 乐音:有规则的让人愉悦的声音。噪音:从物理学的角度看,由发声体作无规则振动时发出的声音;从环境保护角度看,凡是干扰人们正常工作、学习和休息的声音,以及对人们要听的声音起干扰作用的声音。
- 音调,响度,音色是乐音的三个主要特征,人们就是根据他们来区分声音。
- 当两个物体碰撞后振动产生声音时,若两者振动频率比为不可化简的复杂比,如:201:388,那么我们分辨出来会觉得这个声音刺耳;相反,若两者振动频率比为可化简的简单比,如:3:7,那么我们分辨出来会觉得很动听。(毕达哥拉斯发现)
###2.1.3.2 音频相关的知识
上面提到的是声音相关的内容,声音我们听到的是连续的,如果将自然界的声音要录制到计算机中,并且将声音能够播放出来,那么肯定就要将这些信息以数字信号表示出来,也就是说,录音时我们说的模拟信号通过计算机转为了数字信号,在听这些声音时,是将数字信号转为了模拟信号.
从数字转为模拟,也是有相关的一些术语.
-
采样频率
声音是波形,模拟信号,数字信号就是在原有的模拟信号波形上每隔一段时间进行一次“取点”,赋予每一个点以一个数值,这就是“采样”,然后把所有的“点”连起来就可以描述模拟信号了,很明显,在一定时间内取的点越多,描述出来的波形就越精确,这个尺度我们就称为“采样频率”。我们最常用的采样频率是44.1kHz,它的意思是每秒取样44100次。定义: 每秒取样的个数叫做采样频率.
-
比特
比特率是大家常听说的一个名词,数码录音一般使用16比特、20比特或24比特制作音乐。什么是“比特”?我们知道声音有轻有响,影响声音响度的物理要素是振幅,作为数码录音,必须也要能精确表示乐曲的轻响,所以一定要对波形的振幅有一个精确的描述。“比特(bit)”就是这样一个单位,16比特就是指把波形的振幅划为2^16即65536个等级,根据模拟信号的轻响把它划分到某个等级中去,就可以用数字来表示了。和采样频率一样,比特率越高,越能细致地反映乐曲的轻响变化。20比特就可以产生1048576个等级,表现交响乐这类动态十分大的音乐已经没有什么问题了。刚才提到了一个名词“动态”,它其实指的是一首乐曲最响和最轻的对比能达到多少,我们也常说“动态范围”,单位是dB,而动态范围和我们录音时采用的比特率是紧密结合在一起的,如果我们使用了一个很低的比特率,那么就只有很少的等级可以用来描述音响的强弱,当然就不能听到大幅度的强弱对比了。动态范围和比特率的关系是;比特率每增加1比特,动态范围就增加6dB。所以假如我们使用1比特录音,那么我们的动态范围就只有6dB,这样的音乐是不可能听的。16比特时,动态范围是96dB。这可以满足一般的需求了。20比特时,动态范围是120dB,对比再强烈的交响乐都可以应付自如了,表现音乐的强弱是绰绰有余了。发烧级的录音师还使用24比特,但是和采样精度一样,它不会比20比特有很明显的变化,理论上24比特可以做到144 dB的动态范围,但实际上是很难达到的,因为任何设备都不可避免会产生噪音,至少在现阶段24比特很难达到其预期效果。
-
声道
声道(Sound Channel) 是指声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号,所以声道数也就是声音录制时的音源数量或回放时相应的扬声器数量.
单声道的声道数为1个声道;双声道的声道数为2个声道;立体声道的声道数默认为2个声道;立体声道(4声道)的声道数为4个声道.
说了这么多的概念,那么一个声音源文件的大小该如何计算呢?(未经过其他的编码)
声音文件的大小:
采样频率*比特*声道数量*声音时长 = 文件的大小(单位: 比特)
比如说: 录制一个1分钟,采样率为44.1khz,16位的立体声的文件大小
44.1*1000*16*2*1*60 = 84672000bit = 10584000B = 10336kB = 10.1MB
-
PCM/PDM
PCM: 脉冲编码调制,通用的低级别的数字音频编码.音频信号被采样,然后根据位深在合适的范围内被量化成离散值。比如,对于16位的PCM, 采样值是介于-32768到+32767之间
PDM: 脉冲密度调制
-
正常人听觉的频率范围大约在20Hz~20kHz之间,根据奈奎斯特采样理论,为了保证声音不失真,采样频率应该在40kHz左右。常用的音频采样频率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等,如果采用更高的采样频率,还可以达到DVD的音质
在录制时,需要的是传感器,android上体现为麦克风.在播放时,需要的是扬声器,android上的体现就是喇叭.
既然有了这些硬件支持,那么软件层面需要做的是什么?就是将这些数字信号记录下来,并且可以传输.
现在就进一步的细化了,声音是模拟信号,通过设置采样率和比特等相关参数,来转换成数字信号,保存到计算中,下次再通过反向的参数设置,将这个数字信号转为模拟信号即可播放.
说到这里,其实最基本的知识才刚刚说完,现在要进一步的说:
刚刚提到了源文件的计算,但是这个只是源文件的大小,一分钟就10M,那么在传输起来,是耗流量的,那么如何处理呢?我们考虑到文件的压缩,其实对于音频也是这样,其实不同的音频文件的格式,我们就可以认为是音频的压缩,无非就是有损和无损压缩,类似于文件的压缩的格式有zip和rar压缩,音频的格式也是有不同的格式,下面根据有损和无损来介绍常见的不同的压缩格式.(完整版参照 https://en.wikipedia.org/wiki/Audio_file_format 中的列表介绍 )
-
无损压缩音频格式(无损压缩可逆)
WAV/FLAC/APE/ALAC/APE/PCM
-
有损压缩音频格式(有损压缩不可逆)
AAC/MP3/AMR/WMA/OPUS
-
混成压缩音频格式
mpeg
-
音频压缩中术语介绍
-
音频帧: 是一定数目的采样点数的集合
计算音频帧的播放时长: 音频帧的采样点数目/采样率
-
-
其他相关内容
音频信号在通过一个编解码系统后可能引入大量的噪声和一定的失真,因而在做处理时,需要做降噪的考虑,失真是使用编码格式时便需要考虑.
-
最终我们的音频相关处理流程图
模拟信号 ----> 数字信号 ----> 压缩后的音频格式 ----> 解压缩后的音频格式 ----> 数字信号 ----> 模拟信号
从数字信号到压缩后的音频格式,需要经过降噪的处理
数字信号可以理解为PCM
压缩后的音频格式,就是我们提到的那些无损+有损+混成压缩格式
下一篇会介绍android上的一些音频知识和具体实现
更新提醒
欢迎关注个人微信公众号