版权声明:本文为原创文章,未经允许不得转载
前言
最近做的项目涉及到了局域网时时语音通信,研究了一段时间Android端的音频技术,包括音频的录制、播放、降噪、压缩,以及在局域网中的实时传输等。虽然网上关于音频的基本使用有很多资料,但是关于音频的处理和实际开发中遇到的问题不是很详尽,而且有些都过时了,所以小编将非业务相关的音频部分做了整理,写了几篇博客,供大家参考,希望能和大家多多交流。
基础知识点
1.音频的使用场景
音频播放器,录音机,语音电话,音视频监控应用,音视频直播应用,音频编辑/处理软件,蓝牙耳机/音箱等。
2.音频开发的具体内容
(1)音频采集/播放
(2)音频算法处理(去噪、静音检测、回声消除、音效处理、功放/增强、混音/分离等)
(3)音频的编解码和格式转换
(4)音频传输协议的开发(SIP,A2DP、AVRCP等)
3.难点
延时敏感、卡顿敏感、噪声抑制(Denoise)、回声消除(AEC)、静音检测(VAD)、混音算法等,看到这里,是不是慌了呢,其实这些大部分问题都已经有了很好的解决方案或者开源框架,如果不是专门的视音频的开发,不会涉及到太复杂的技术。
4.音频编码
4.1 概念
从信息论的观点来看,描述信源的数据是信息和数据冗余之和,即:数据=信息+数据冗余。音频信号在时域和频域上具有相关性,也即存在数据冗余。将音频作为一个信源,音频编码的实质是减少音频中的冗余。
根据编码方式的不同,音频编码技术分为三种:波形编码、参数编码和混合编码。一般来说,波形编码的话音质量高,但编码速率也很高;参数编码的编码速率很低,产生的合成语音的音质不高;混合编码使用参数编码技术和波形编码技术,编码速率和音质介于它们之间。
通常我们采用的是脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。
简单讲,其实就是将采集到的音频模拟信号,经过一定的转换,变成方便在信道中传输的数字信号。在不同的使用场景,也许会使用不同的编码方式,那么音频质量、码率、安全系数等都不一样。
4.2 有损和无损
对于自然界中的音频信号,如果转换成数字信号,进行音频编码,那么只能无限接近,不可能百分百还原,所以说实际上任何信号转换成数字信号都会“有损”。但是在计算机应用中,能够达到最高保真水平的就是PCM编码,被广泛用于素材保存及音乐欣赏,CD、DVD以及我们常见的WAV文件中均有应用。因此,PCM约定俗成了无损编码,因为PCM代表了数字音频中最佳的保真水准,并不意味着PCM就能够确保信号绝对保真,PCM也只能做到最大程度的无限接近。我们而习惯性的把MP3列入有损音频编码范畴,是相对PCM编码的。强调编码的相对性的有损和无损,是为了告诉大家,要做到真正的无损是困难的,就像用数字去表达圆周率,不管精度多高,也只是无限接近,而不是真正等于圆周率的值。
5.PCM - 脉冲编码调制
模拟信号经过->抽样->量化->编码->数字信号
5.1 抽样 - 采样频率
抽样:连续的时间信号进行周期性扫描,变成时间上离散的瞬时信号,抽样遵循抽样定理。
抽样定理(又称采样定理、奈奎斯特定理):当采样频率fs大于信号中最高频率fmax的2倍时(fs>2fmax),采样之后的数字信号完整地保留了原始信号中的信息,也就是说可以不失真的恢复出原始的模拟信号。
-
采样频率:由于人耳能听到的频率范围为20~20kHz,根据抽样定理,fs>=40KHz的时候就可以完整的记录20KHz以下的音频信号,就可以完整的保存人耳能听到的音频数据。采样频率越高,音质就越好,因为保存的音频信息频带越宽,但是如果信号>20KHz的话,人耳也听不到,而且数据量还会变得特别大,所以不可能太高,通常采用CD音质的44.1KHz。刚开始的时候小编也很疑惑,为什么是44.1KHz,最后终于搞懂以后发现并没有什么卵用,这个是根据早期的录音技术和设备有关系的,不用纠结,附上链接:CD为什么采用44.1kHz采样频率?
附加:常用的音频采样频率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz、96kHz、192kHz等。
5.2 量化
- 量化:用一组规定的电平,把瞬时值用最接近的电平值表示,比如可以分为量化值A0~A15。
- 量化误差:量化后的信号和抽样信号的差值。
比如,A3表示幅度6,那么幅度为6.05和6.1的都可以用最接近的A3表示,它们的差值就是量化误差。
5.3 编码 - 位宽(量化位数,量化级)
用一组二进制码组来表示量化值,比如用0011来表示上面提到的量化值A3。通常,可以使用8bit或者16bit来表示量化值,如果太大了,也没有意义。
8bit:8位二进制,可以表示2^8个量化值;
16bit:16位二进制,可以表示2^16个量化值。
如果是CD音质,量化位数应该是16bit;如果是语音通话,要求不太高的情况下可以是8bit。
5.4 码率
码率 = 采样频率 * 量化位数 * 声道个数
如果是CD音质,采样频率44.1KHz,量化位数16bit,立体声(双声道),码率 = 44.1 * 16 * 2 = 1411.2Kbps = 176.4KBps,那么录制一分钟的音乐,大概10.34MB。除非专业需要,这个size是我们常常不能接受的,不利于保存和传输。如果是实时的话,每秒需要的带宽就达到了180KB(加上数据包头信息)。
5.5 音频帧
音频数据是流式的,本身没有明确的一帧帧的概念,在实际的应用中,为了音频算法处理/传输的方便,一般约定俗成取2.5ms~60ms为单位的数据量为一帧音频。这个时间被称之为“采样时间”,其长度没有特别的标准,它是根据编解码器和具体应用的需求来决定的,我们可以计算一下一帧音频帧的大小。
假设某通道的音频信号是采样率为8kHz,位宽为16bit,20ms一帧,单通道,则一帧音频数据的大小为:
int size = 8000 x 16bit x 0.02s x 1 = 2560 bit = 320 byte = 160 short
我们采用这种方式来录音,那么我们从音频缓冲区读取音频数据的时候,要一帧一帧的读取,每个音频帧大小为320byte。
6.常见音频的编码技术
根据不同的量化策略,产生了许多不同的编码方式,常见的编码方式有:PCM 和 ADPCM,这些数据代表着无损的原始数字音频信号,添加一些文件头信息,就可以存储为WAV文件了,它是一种由微软和IBM联合开发的用于音频数字存储的标准,可以很容易地被解析和播放。
我们在音频开发过程中,会经常涉及到WAV文件的读写,以验证采集、传输、接收的音频数据的正确性。
7.常见音频数据格式
-
WAV
WAV为微软公司开发的一种声音文件格式,它符合RIFF文件规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持,该格式也支持MSADPCM,CCITT A LAW等多种压缩运算法,支持多种音频数字,取样频率和声道,标准格式化的WAV文件和CD格式一样,也是44.1K的取样频率,16位量化数字,因此在声音文件质量和CD相差无几!
WAV格式文件都有一个文件头,这个文件头包含了音频流的编码参数。
特点:音质非常好,被大量软件所支持。
适用于:多媒体开发、保存音乐和音效素材。 -
MP3
特点:音质好,压缩比比较高,被大量软件和硬件支持,应用广泛。
适用于:适合用于比较高要求的音乐欣赏。 -
OGG
特点:可以用比mp3更小的码率实现比mp3更好的音质,高中低码率下均具有良好的表现。
适用于:用更小的存储空间获得更好的音质(相对MP3)。 -
WMA
特点:低码率下的音质表现难有对手。
适用于:数字电台架设、在线试听、低要求下的音乐欣赏。 -
APE
一种新兴的无损音频编码,可以提供50-70%的压缩比,虽然比起有损编码来太不值得一提了,但对于追求完美音质的朋友简直是天大的福音。APE可以做到真正的无损,而不仅是听起来无损,压缩比也要比类似的无损格式要好。
特点:音质非常好。
适用于:最高品质的音乐欣赏及收藏。
8.音频开发的Android API
- 音频采集: MediaRecoder,AudioRecord
- 音频播放: SoundPool,MediaPlayer,AudioTrack
- 音频编解码: MediaCodec
- NDK API: OpenSL ES
9.音频处理的开源库
Speex、WebRTC、Opus等
引用
联系方式
邮箱:815852777@qq.com
微信: