14|音效三剑客:变调、均衡器、混响

《名侦探柯南》里的变声器在现实中能否实现?百万调音师能让本来唱歌跑调的人的歌声变得好听,这到底是用了什么神奇的方法?现在介绍的音频中的音效,就是为了实现这些变声、修音等特效而设计的一系列的音频处理算法。

为了实现某种特定的效果,音效算法的种类有很多,这里主要介绍三种常见的音效算法:变调、均衡器和混响的设计和使用方法。

变调

其实在之前介绍弱网对抗部分的时候,在做快慢放操作时就使用到了变速不变调算法,这其实是变调算法中的一种用法。在说算法具体实现之前先想一下,变调的物理含义是什么?

介绍语音信号分析的时候说过,不同的人发音的基频是不一样的。而音调和基频是直接相关的,要变调其实就是要改变基频。而基频的本质是一个信号的循环周期的倒数,比如基频是 250Hz,那么当前时间的语音信号就是以 4ms 为周期的信号。要变调,其实就是把这个循环周期进行扩大或者缩小。

如图 1 所示,如果把语音信号的基频提升一倍,或者说提升一个八度或者 12 个半音,那么时域信号(绿线部分,上面为变调前,下面为变调后)语音的波形还是很相似的,只是每一个周期都缩短了一半。

再看看频域信号(红色部分)是不是变得更稀疏了?最下面的那根亮线代表的基频从 250Hz 左右提升到了大约 500Hz 的位置。由于谐波的频率是基频的倍数,所以谐波之间的间隔也变大了。

图1 升调后的语音时域和频域图

如何实现音调提升?

其实方法很简单,就是把原来的信号进行重采样,但不改变播放信号的采样率。简单来说,比如把原来 20ms 的音频每两个点取一个点,然后按照相同的采样率进行播放,这样 10ms 内需要播放原来 20ms 的内容。这样一来,原本的信号循环时间周期就变成了二分之一,从而实现了升调。

但这里有个问题,因为每一段时间内需要播放的音频信号的采样点是固定的。也就是说,通过下采样的方法,音频从原来的 20ms 缩短成了 10ms。直观的感受就是这个人的音调变高了,但说话的语速也变快了,也就是变速又变调。

但想实现的变声只是改变音调,也就是所谓的“变调不变速”。其实,实现的方法也很简单,核心思想就是通过把音频中的信号按照一定的规律拼接起来,把音频的长度拉长或者缩短,这就是要介绍的第一种变调算法 OLA(Overlap-and-Add)。

之前介绍过 STFT 。其实 OLA 的思想和 STFT 中的 Overlap 的思想很相似。

如图 2 所示,x 为输入信号、y 为输出信号。OLA 的过程按照图 2 中 b、c、d 的顺序:取一帧 xm​,选择间隔长度 Ha​ 的下一帧 xm+1​,然后把这两帧加窗(汉宁窗)后,以步长 Hs​ 把两帧重叠、相加在一起。很显然 Ha​ 和 Hs​ 的比值就是原始信号和输出信号长度的比值。这样就可以把原始音频拼接成不同长度的音频了,然后再经过重采样把音频恢复成和原始音频相同长度的音频再播放,这样就实现了变速不变调。

图2 OLA算法的基本原理

有趣的是,如果不进行重采样直接播放,由于拼接起来的音频没有改变原始语音的基频周期,只是改变了音频的长短,这就实现了弱网对抗中用的“变速不变调”的算法。

但是采用这种 Overlap 的方式虽然可以防止连接处的信号产生跳变,但不能保证每一个窗内覆盖的信号都处于周期中的相同相位,或者说两个窗内信号周期的起始位置不相同。这就会导致常说的“相位失真”。

如图 3 所示,拼接的信号会出现时高时低的现象。所以如果能实时的根据信号本身的自相关属性,也就是把信号中相似的两段直接拼接在一起,这样就不会有相位的问题了。基于这样的思想,于是就有了波形相似叠加 WSOLA(Waveform similarity Overlap-Add)算法。

图3 Overlap导致的幅度变化

WSOLA 算法的计算步骤如图 4 所示,其实相比于 OLA,WSOLA 会在 xm+1​ 帧的附近寻找和输入信号中如果也移动步长 Hs​ 的信号 x~m​ 相似度最高的一段 x’m+1​ 来做拼接。

图4 WSOLA的计算步骤

根据相似性原理,其实 WSOLA 合成出来的变调杂音基本已经没有了,WebRTC 中的快慢放用的就是 WSOLA。但 WSOLA 算法在实时变调中有一个问题,那就是每一帧出现的位置由于需要相似性搜索,所以需要更多的未来帧的信息,也就是说,需要引入更多的延迟。

在时域变调的算法中还有一种PSOLA(Pitch Synchronous Overlap and Add),顾名思义需要先计算 pitch,然后根据基音周期来改变 Overlap 的大小,这样就直接实现了变调。但是基频检测的鲁棒性没有 WSOLA 的相似性搜索高,所以 PSOLA 的生成可能会出现不稳定的情况。

其实变调算法除了在时域上做拼接,还可以在频域上实现,比如常见的 LSEE-MSTFTM、Phase Vocoder 等算法。

可以看到 WSOLA 等方法通过相似性来寻找拼接对象,但是相似性说到底是通过计算两段时域信号的 MSE(mean squared error)取最小值来得到的,这种方法能尽量保持低频相位的连续性,但高频信号的相位差异可能不能确保一致。

其中 Phase Vocoder 利用 STFT 中提供的相位信息,在变调扩展的同时会对每个傅里叶频点做相位修正,生成出的音质会比较高,所以在实时变调中常被使用。

理解了变调,就可以通过算法来改变音频的音调了。比如电影《小黄人大眼萌》中“小黄人”的声音,就是通过变调算法把原本男声的音调提高来实现的。

那么电影《绿巨人》中浩克的那种低沉、怪异的音色又是怎么实现的?

均衡器

我们知道每个人都有自己独特的音色,比如有的人声音比较低沉,有的人声音比较清脆。其实对这些音色的感知主要是由于人们在发音时,频谱中不同频段的能量分布不同而导致的。

比如声音低沉的人,可能低频分量比较低,而唱高音、音色饱满的人可能高频的能量也能保持得比较多。而其中最直接的可以改变音色,或者说改变声音在不同频率的能量分布的方法就是 EQ,也就是均衡器(Equalizer)。

那么如何实现一个均衡器来对不同频段的能量进行调整?

其实均衡器就是一组滤波器,比如常见的高通、低通、带通、带阻等形式。这些可能你之前在大学里的数字信号处理课程里学过。看字面意思应该就可以理解,高通、低通和带通就是让高频、低频或者某个频带的音频保留,而其它的频带都加以削弱,而带阻就是削弱某个频带的音频能量。比如我们觉得人声中齿音太多,想要去齿音,可以在 10kHz~14kHz 左右加一个带通滤波器,削减一下这部分的能量。

音频滤波器有很多种,比如常用的 FIR(Finite Impulse Response)和 IIR(Infinite Impulse Response)Filter。如何根据你想要的频段和增益来设计 FIR 和 IIR 滤波器,可以参考《数字信号处理》这本书。

当然 EQ 的处理经过多年的发展已经有很多通用的滤波器可以选用了,比如椭圆、切比雪夫、巴特沃斯和贝塞尔滤波器等等。如果想快速实现一个滤波器看看效果也可以直接使用 Matlab 中的滤波器设计 toolbox 来加速实现进程。

如果不想自己编程实现,也可以利用一些音频处理软件来进行可视化的处理。比如在 Adobe Audition 中,可以看到各种常见的 EQ 均衡器。如图 5 所示,由上到下依次为 FFT 滤波器、图形均衡器以及科学滤波器。我们在离线自己做一些音频处理时,可以选择其中的一个或者多个串行使用。

图5 Audition中常见的均衡效果器

混响

知道了如何调节音色,再来看看和空间相关的混响。

之前已经多次提及了混响的概念。在之前介绍空间音频时,知道了可以通过采样的方式或者镜像法得到房间的混响 RIR,这样得到的混响叫做采样混响。采样混响真实,但是不一定好听,并且 RIR 需要和音频信号做卷积才能得到混响信号。当混响时间很长的时候需要的算力也是巨大的。在音乐制作时,为了营造更好的听感经常会使用一些人工混响效果器来产生混响,在实时音效里也可能因为要节省算力而采用人工混响效果器的方式来生成混响。

简单地理解,混响信号可以看作是直达声和许多逐步衰减、不断延迟的回声信号叠加而成的。假设一个衰减系数 a 和延迟 D,那么混响信号 y(n) 可以用下面的等比数列来表示:

其中 x(n) 是输入信号,D 为回声的延迟。而这种形式正是梳状滤波器的形式。如图 6 所示,所谓梳状滤波器,其实就是因为它的频率响应呈一个梳子的形状。梳状滤波常被用来消除某些不需要的谐波,但这里主要是利用了它的拖尾效应。

图6 梳状滤波器的频率响应

但也如图 6 所示,梳状滤波器的频谱曲线不平坦,呈现明显的梳状效应。从而对不同的频率成分幅度会产生波动,导致梳状滤波器的拖尾声音带有很强的金属染色效应。而且回声只在延迟为 D 和 D 的倍数的时候出现,这就显得过于稀疏了。所以在梳状滤波器的基础上 Schroeder 使用多个梳状滤波器来解决混响不够密集的问题,然后用全通滤波器(Allpass filter)来消除金属声。

图7 Schroeder混响模型流程

图 7 为 Schroeder 混响模型的结构图,其中每个 Comb 代表一个梳状滤波器。但 Schroeder 依靠全通滤波器生成的混响依旧不够密集。

后续 Moorer 又对 Schroeder 模型进行了改良,把混响的生成拆成了直达声、早期混响、晚期混响这三个部分。加入了 FIR 模块来模拟早期混响,用 6 个梳状滤波器和一个全通滤波器来模拟晚期混响,并可以控制各部分的增益。

其实 Moorer 模型之后,人们会用各种方式来对混响模型进行改造,现在的混响生成器基本上也都是开放出很多参数,可调节的混响效果器了。比如混响的初始延迟、干湿比、混响 RT60 时间等。

小结

改变声音可以从三个基本的方向来修改,也就是改变音调、音色和混响,分别对应了变调、均衡器和混响这三种算法。

其中变调算法比较常用的有:基于拼接的 OLA、WSOLA 以及频域的 Phase Vocoder 等。而均衡器主要是通过一个滤波器组对不同频段的能量来进行调节,成熟的算法有很多,但大多是 FIR 或者 IIR 滤波器的组合。人工混响则是可以采用多个梳状滤波器的滤波器组,串联全通滤波器来实现,比较常见的有 Scheoeder 和 Moorer 混响模型。

当然音效的种类还远不止这三种。

音频特效生成与算法 1相关推荐

  1. 音频特效生成与算法 3

    15|AI变声:音频AI技术的集大成者 AI 技术在音频领域发展十分迅速.除了之前介绍的降噪.回声消除以及丢包补偿等方向可以用 AI 模型来提升音质听感之外,AI 模型还有很多有趣的应用.其中比较常见 ...

  2. 【毕业设计】基于程序化生成和音频检测的生态仿真与3D内容生成系统----程序化生成地形算法设计

    2 程序化生成地形算法设计 Input: Output: 2.1 地形的生成 程序化生成地形算法是一种在计算机中生成地形的方法,通常用于游戏开发和虚拟现实应用.下面是几种常见的程序化生成地形算法: D ...

  3. 数字音频特效的软件实现项目

    最近主持数字音频特效的软件实现项目,主要工作有相关的理论学习研究,算法的仿真,软件的实现,最后要移植到相应的嵌入式平台上,并做相关的算法优化工作.这是一很有挑战性的工作,希望做出性能与SRS, Pla ...

  4. 音频特效:Delay 和 Vibrato

    Delay line 延迟线 今天我们将讨论 Delay 和 Vibrato 两种音频特效的技术原理和实现细节. Delay 和 Vibrato 都是基于 Delay line 实现的.Delay l ...

  5. 百度推出完全端到端的并行音频波形生成模型,比WaveNet快千倍 | 论文

    稿件来源:百度硅谷研究院 量子位授权转载 | 公众号 QbitAI 语音合成(Text-to-Speech,TTS)是将自然语言文本转换成语音音频输出的技术,在AI时代的人机交互中扮演至关重要的角色. ...

  6. 音频特效滤镜 via Media Foundation Transform (MFT)

    音频特效滤镜 via Media Foundation Transform 音频特效定义 Media Foundation Transform IMFTransform::GetInputStream ...

  7. 音频特效插件包:MAudioPlugins for Mac

    maudioplugins mac破解版是一款非常强大的音频特效插件包,目前包含上百种音频特效插件,包括动态处理器,均衡器,调制效果,包括合唱和相位器,混响,立体声工具和分析仪. MAudioPlug ...

  8. Petuum提出序列生成学习算法通用框架

    近日,来自人工智能创业公司 Petuum 的研究人员发表论文,提出序列生成学习算法的通用框架--广义的熵正则化策略优化框架(Generalized Entropy-Regularized Policy ...

  9. 机器学习之生成学习算法

    本讲内容 1. Generative learning algorithms(生成学习算法) 2. GDA(高斯判别分析) 3. Naive Bayes(朴素贝叶斯) 4. Laplace Smoot ...

最新文章

  1. 并发用户数和TPS的关系
  2. 内存条结构_CPU是电脑里最难坏的硬件,为什么不敢终身质保,而内存条却可以...
  3. django按钮点击后想刷新当前页面的view写法
  4. python rsa 公钥解密_python使用rsa库做公钥解密(网上别处找不到)
  5. JSP、Servlet中get请求和post请求的区别总结
  6. mysql not exists优化_MySQL优化--NOT EXISTS和LEFT JOIN方式差异
  7. 操作系统(3) 多处理器编程:从入门到放弃
  8. 【Android进阶学习】设置透明效果的三种方法
  9. 【NOIP2018】龙虎斗
  10. python: 列表的方法
  11. 汽车理论课后习题matlab程序,汽车理论课后题matlab程序
  12. 微信unionId和openId
  13. python: 产品选型小软件
  14. 【c++笔记一】名字空间(namespace)
  15. 尽管凭借主持人的身份成名,张绍刚先生在内心深处却对这一角色认可度很低
  16. 汇总2022年12月托福toefl考试/解析答案为你助力
  17. 经典管理定理二十三条点评
  18. 内网穿透:什么是内网穿透,以及用什么软件
  19. 第二个MFC实例:GPA计算器
  20. 弱监督语义分割-SEC(seed、expand and constrain)的原理详述

热门文章

  1. linux内存管理-页面规整
  2. TCGA_改版后STAR-count处理方法
  3. 后级功放机与单声道功放机的功能有哪些区别?
  4. LU分解Matlab算法分析
  5. 攻击者如何破坏无人机?
  6. Beanstalkd源码分析—bury和kick命令的实现
  7. 使用burpsuit工具进行sql盲注入
  8. 【电子器件笔记6】三极管(BJT)参数和选型
  9. CNN-LSTM的flatten
  10. 北航计算机考研小黑书,不会真有人以为四川大学分数低吧?川大最高分比北航南大最高分还高...