本节对音频相关知识进行了详细的介绍及讲解。
声音的三要素:频率、振幅、波形
声音的本质(音调、音量、音色)
Nyquist 采样率大于或等于连续信号最高频率分量的 2 倍时,采样信号可以用来完美重构原始连续信号。
所谓的采样就是只在时间轴上对信号进行数字化。根据奈奎斯特定律(也称作采样定律) ,按照比声音最高频率的 2 倍以上进行采样。
人类听觉的频率(音调) 范围为 20Hz–20KHz。所以至少要大于 40KHz。
采样频率一般为 44.1kHz,这样可保证声音达到 20kHz 也能被数字化。
44.1kHz 就是代表 1 秒会采样 44100 次。
具体每个采样又该如何表示呢?这就涉及到量化。量化是指在幅度轴上对信号进行数字化。如果用 16 比特位的二进制信号来表示一个采样,那么一个采样所表示的范围即为 [-32768, 32767] 。
下图为音频量化过程:
每一个量化都是一个采样,将这么多采样进行存储就叫做编码。
所谓编码,就是按照一定的格式记录采样和量化后的数字数据,比如顺序存储或者压缩存储,等等。
通常所说的音频裸数据格式就是脉冲编码调制(PCM)数据。
描述一段 PCM 数据通常需要以下几个概念:量化格式(位深, 通常 16bit) 、采样率、声道数
对于声音格式,还有一个概念用来描述它的大小,即比特率,即 1 秒内的比特数目,用来衡量音频数据单位时间内的容量大小。
采样位数也叫采样大小或者量化位数。量化深度表示每个采样点用多少比特表示,音频的量化深度一般为 8、16、32 位等。
例如:量化深度为 8bit 时,每个采样点可以表示 256 个不同的量化值,而量化深度为 16bit 时,每个采样点可以表示 65536 个不同的量化值。
量化深度的大小影响到声音的质量,显然,位数越多,量化后的波形越接近原始波形,声音的质量越高,而需要的存储空间也越多;位数越少,声音的质量越低,需要的存储空间越少。
CD 音质采用的是 16 bits。
即声音的通道数目, 常见的有单声道和双声道或者立体声道。
记录声音时,如果每次生成一个声波数据,称为单声道;每次生成两个声波数据,称为双声道(立体声)。立体声(双声道)存储大小是单声道文件的两倍。
音频跟视频不太一样,视频的每一帧就是一副图像,但是因为音频是流式的,本身是没有一帧的概念的。
比如对于 PCM 流来说,采样率为 44100Hz,采样位数为 16,通道数为 2,那么一秒的音频固定大小的:44100162 / 8 字节。
但是人们可以规定一帧的概念,比如 amr 帧比较简单,它规定每 20ms 的音频是一帧。
指音频每秒钟播放的数据量,单位为 bit,例如对于 PCM 流,采样率为 44100Hz,采样大小为 16,声道数为 2,那么码率为:44100* 16 * 2 = 1411200 bps。
文件大小 = 采样率 * 录音时间 * 采样位数 / 8 * 通道数。
PCM 流就是原始收录声音时,数据会保存到一串 buffer 中,这串 buffer,就采用了 PCM 格式存储的。
通常把音频采样过程也叫做脉冲编码调制编码,即 PCM(Pulse Code Modulation) 编码,采样值也叫 PCM 值
编码过程:模拟信号 -> 抽样 -> 量化 -> 编码 -> 数字信号
手机等设备采集的原始声音往往包含了背景噪声,影响听众的主观体验,降低音频压缩效率。以 Google 著名的开源框架 Webrtc 为例,我们对其中的噪声抑制算法进行严谨的测试,发现该算法可以对白噪声和有色噪声进行良好的抑制。满足视频或者语音通话的要求。其他常见的噪声抑制算法如开源项目 Speex 包含的噪声抑制算法,也有较好的效果,该算法适用范围较 Webrtc 的噪声抑制算法更加广泛,可以在任意采样率下使用。
在视频或者音频通话过程中,本地的声音传输到对端播放之后,声音会被对端的麦克风采集,混合着对端人声一起传输到本地播放,这样本地播放的声音包含了本地原来采集的声音,造成主观感觉听到了自己的回声。
手机等设备采集的音频数据往往有时候响度偏高,有时候响度偏低,造成声音忽大忽小,影响听众的主观感受。
自动增益控制算法根据预先配置的参数对输入声音进行正向/负向调节,使得输出的声音适宜人耳的主观感受。
静音检测的基本原理:计算音频的功率谱密度,如果功率谱密度小于阈值则认为是静音,否则认为是声音。静音检测广泛应用于音频编码、AGC、AECM 等。
舒适噪声产生的基本原理:根据噪声的功率谱密度,人为构造噪声。
广泛适用于音频编解码器。
它的应用场景:完全静音时,为了创造舒适的通话体验,在音频后处理阶段添加随机白噪声。
在现实生活中,音频(audio)主要用在两大场景中:语音(voice)和音乐(music)。
音频开发的主要应用:
音频开发的具体内容:
混音, 顾名思义,就是把两路或者多路音频流混合在一起,形成一路音频流。
混流,则是指音视频流的混合,也就是视频画面和声音的对齐,也称混流。
两路音视频流,必须符合以下条件才能混合:
在混音之前,还需要做回声消除、噪音抑制和静音检测等处理。在编码之前,采集、语音前处理、混音之前的处理、混音和混音之后的处理应该按顺序进行。
重采样即是将音频进行重新采样得到新的采样率的音频。
重采样的原因
音频系统中可能存在多个音轨,而每个音轨的原始采样率可能是不一致的。
比如在播放音乐的过程中,来了一个提示音,就需要把音乐和提示音都混合到 codec 输出,音乐的原始采样率和提示音的原始采样率可能是不一致的。
问题来了,如果 codec 的采样率设置为音乐的原始采样率的话,那么提示音就会失真。
因此最简单见效的解决方法是:codec 的采样率固定一个值(44.1KHz/48KHz) ,所有音轨都重采样到这个采样率,然后才送到 codec,保证所有音轨听起来都不失真。
回声消除就是在 Mic 采集到声音之后,将本地音箱播放出来的声音从 Mic 采集的声音数据中消除掉,使得 Mic 录制的声音只有本地用户说话的声音。
传统的回声消除都是采用硬件方式,在硬件电路上集成 DSP 处理芯片,如我们常用的固定电话、手机等都有专门的回音消除处理电路,而采用软件方式实现回声消除一直存在技术难点,包括国内应用最广泛的 QQ 超级语音,便是采用国外的 GIPS 技术,由此可见一般。
回声消除已经成为即时通讯中提供全双工语音的标准方法
回声消除的基本原理是以扬声器信号与由它产生的多路径回声的相关性为基础,建立远端信号的语音模型,利用它对回声进行估计,并不断修改滤波器的系数,使得估计值更加逼近真实的回声。然后,将回声估计值从话筒的输入信号中减去,从而达到消除回声的目的。
即压缩编码,其原理是压缩掉冗余的信号,冗余信号是指不能被人耳感知到的信号,包括人耳听觉范围之外的音频信号以及被掩蔽掉的音频信号。
模拟音频信号转换为数字信号需要经过采样和量化,量化的过程被称之为编码,根据不同的量化策略,产生了许多不同的编码方式,常见的编码方式有:PCM 和 ADPCM,这些数据代表着无损的原始数字音频信号,添加一些文件头信息,就可以存储为 WAV 文件了,它是一种由微软和 IBM 联合开发的用于音频数字存储的标准, 可以很容易地被解析和播放。
将连续的模拟信号转换成离散的数字信号,完成采样、量化和编码三个步骤。又称为脉冲编码调制(Pulse Code Modulation) ,通常由 A/D 转换器来实现。
Nyquist 采样定律:采样率大于或等于连续信号最高频率分量的 2 倍时,采样信号可以用来完美重构原始连续信号。
三要素:采样频率、量化位数、声道数
语音编码致力于:降低传输所需要的信道带宽, 同时保持输入语音的高质量。
语音编码的目标在于:设计低复杂度的编码器以尽可能低的比特率实现高品质数据传输。
指在安静环境下,人耳在各个频率能听到声音的阈值。
由于人耳对不同频率的解析度不同,MPEG1/Audio 将 22khz 内可感知的频率范围,依不同编码层,不同取样频率,划分成 23~26 个临界频带。
下图列出理想临界频带的中心频率与频宽。图中可看到,人耳对低频的解析度较好。
幅值较大的信号会掩蔽频率相近的幅值较小的信号,如下图:
在一个很短的时间内,若出现了 2 个声音,SPL(sound pressure level) 较大的声音会掩蔽 SPL 较小的声音。
时域掩蔽效应分前向掩蔽(pre-masking)和后向掩蔽(post-masking),其中 post-masking的时间会比较长,约是 pre-masking 的 10 倍。
时域遮蔽效应有助于消除前回音。
语音编码器分为三种类形:(a)波形编码器 、(b)声码器 、(c)混合编码器 。
波形编码器的设计常独立于信号,所以适应于各种信号的编码而不限于语音。
频域编码是把信号分解成一系列不同频率的元素,并进行独立编码。
sub-band coding:子带编码是最简单的频域编码技术。
是将原始信号由时间域转变为频率域, 然后将其分割为若干个子频带, 并对其分别进行数字编码的技术。
它是利用带通滤波器(BPF)组把原始信号分割为若干(例如 m 个)子频带(简称子带)。 将各子带通过等效于单边带调幅的调制特性, 将各子带搬移到零频率附近, 分别经过 BPF(共 m个)之后,再以规定的速率(奈奎斯特速率)对各子带输出信号进行取样,并对取样数值进行通常的数字编码,其设置 m 路数字编码器。
将各路数字编码信号送到多路复用器,最后输出子带编码数据流。对不同的子带可以根据人耳感知模型,采用不同量化方式以及对子带分配不同的比特数。
transform coding:DCT 编码。
离散余弦代码转换
波形编码器试图保留被编码信号的波形,能以中等比特率(32kbps) 提供高品质语音,但无法应用在低比特率场合。声码器试图产生在听觉上与被编码信号相似的信号,能以低比特率提供可以理解的语音,但是所形成的语音听起来不自然。
混合编码器结合了 2 者的优点:
WAV 编码是在 PCM 数据格式的前面加上 44 字节,分别用来描述 PCM 的采样率、声道数、数据格式等信息。
特点:音质非常好、大量软件都支持。
使用场景:多媒体开发的中间文件、保存音乐和音效素材等。
MP3 具有不错的压缩比,使用 LAME 编码的中高码率的 MP3 文件,听感上非常接近源 WAV 文件。
特点:音质在 128Kbps 以上表现还不错,压缩比比较高,兼容性好。
使用场景:高比特率下对兼容性有要求的音乐欣赏
AAC 是新一代的音频有损压缩技术,它通过一些附加编码技术( 如 PS、 SBR 等),衍生出 LC-AAC、HE-AAC、HE-AAC V2 三中主要编码格式。
特点:在小于 128kbps 码率下表现优异,且多用于视频中的音频编码。
适用场景:128Kbps 码率下的音频编码, 多用于视频中的音频轨的编码。
Ogg 编码音质好、完全免费。可以用更小的码率达到更好的音质,128Kbps 的 Ogg 比 192Kbps 甚至更高的 MP3 还要出色。 但是目前媒体软件支持上还是不够友好。
特点:高中低码率下都有良好的表现,兼容性不够好,流媒体特性不支持。
使用场景:语音聊天的音频消息场景。
FLAC 中文可解释为无损音频压缩编码。
FLAC 是一套著名的自由音频压缩编码,其特点是无损压缩。不同于其他有损压缩编码如 MP3 及 AAC,它不会破坏任何原有的音频信息,所以可以还原音乐光盘音质。
2012 年以来它已被很多软件及硬件音频产品( 如 CD 等) 所支持。
特点: 无损压缩、压缩率高于普通文件夹压缩格式( ZIP、 rar 等)。使用场景:高品质音乐等。
主要从语音(Speech) 、音乐(Music) 和环境声(Environmental Sounds) 三个领域出发,分析它们之间的相似点和不同点,以及一些跨领域的通用方法描述。
语音识别指的是将语音信号转化为文字序列,它是所有基于语音交互的基础。对于语音识别而言,高斯混合模型(GMM)和马尔科夫模型(HMM)曾占据了几十年的发展历史。
和语音不同, 音乐通常包含很广泛的声源信息, 并且在不同音乐源之间存在这复杂的依赖关系。
有关环境声的任务主要有三类:声音场景识别、声音事件检测和标注。
利用多通道信号可以对声源位置进行跟踪和定位。跟踪和定位的主要设备条件是麦克风阵列,通常包含线性阵列、环形阵列和球形阵列等。
指的是在多声源混合的信号中提取单一的目标声源。主要应用在一些鲁棒声音识别的预处理以及音乐编辑和重谱。
通常为语音增强, 指的是通过减小噪声来提高语音质量。 主要技术是去噪自编码器、CNN、RNN、GAN(SEGAN) 等。
根据数据集中的声音属性特征来生成新的数据,要求这些数据不能和原始数据集一样、要具有多样性并且训练和生成时间要很小,理想情况下是实时的。
音频分类是语音处理领域的一个基本问题,从本质上说,它就是从音频中提取特征,然后判断具体属于哪一类。
音频指纹识别的目的是从音频中提取一段特定的数字摘要,用于快速识别该段音频是否来自音频样本,或从音频库中搜索出带有相同数字摘要的音频。
音乐标注是音频分类的升级版。它包含多个类别,一个音频可以同时属于不同类,也就是有多个标签。自动音乐标注的潜在应用是为音频创建元数据,以便日后的搜索,在这上面,深度学习在一定程度上有用武之地。
根据定义的一组特征将音频样本分割成段。
音源分离就是从一堆混合的音频信号中分离出来自不同音源的信号,它最常见的应用之一就是识别同时翻译音频中的歌词(如卡拉 OK) 。
节拍跟踪的目标就是跟踪音频文件中每个节拍的位置。
这是音频处理中最困难的任务之一, 它实质上是要建立一个基于音频数据的搜索引擎。
音乐转录是另一个非常有挑战性的音频处理任务。 它包括注释音频和创建一个“表”, 以便于之后用它生成音乐
音符起始点检测是分析音频/建立音乐序列的第一步,对于以上提到的大多数任务而言,执行音符起始点检测是必要的(简单任务不需要)
我的qq:2442391036,欢迎交流!