【AVD】音频变声相关实现预研

476 阅读3分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

音频变声包括对声音的音调和速度的改变。两个属性的组合有四种情况:1,不变速不变调;2,变速不变调;3,变调不变速;4,变速变调。而声音的组成是由基频和多个倍频的泛音(谐波)组成的,对其泛音的不同处理,可以改变声音的音色。

声音

关于声音的原理,参考音频自动踩点研究

基本原理

由于声音的音调(音高(pitch))是由其基频(基音)决定的,而音色是由其泛音决定的,通过对音频数据做 FFT 之后不同频率的数值进行处理之后再做 IFFT(快速逆傅里叶变换),即可完成对音调、音色的改变。例如将音调调高时就是女声,调低时就是男声。

常见第三方库

SoundTouch

SoundTouch是一个用C++编写的开源的音频处理库,可以改变音频文件或实时音频流的节拍(Tempo)、音调(Pitch)、回放率(Playback Rates),还支持估算音轨的稳定节拍率(BPM rate)。ST的3个效果互相独立,也可以一起使用。这些效果通过采样率转换、时间拉伸结合实现。

  • Tempo节拍(变速不变调):通过拉伸时间,改变声音的播放速率而不影响音调。
  • Playback Rate播放速率(变速变调):以不同的转率播放唱片(DJ打碟?),通过采样率转换实现。
  • Pitch音调(变调不变速):在保持节拍不变的前提下改变声音的音调,结合采样率转换+时间拉伸实现。如:增高音调的处理过程是:将原音频拉伸时长,再通过采样率转换,同时减少时长与增高音调变为原时长。

主要特性

  • 易于实现:ST为所有支持gcc编译器或者visual Studio的处理器或操作系统进行了编译,支持Windows、Mac OS、Linux、Android、Apple iOS等。

  • 完全开源:ST库与示例工程完全开源可下载

  • 容易使用:编程接口使用单一的C++类

  • 支持16位整型或32位浮点型的单声道、立体声、多通道的音频格式

  • 可实现实时音频流处理:

    • 输入/输出延迟约为100ms
    • 实时处理44.1kHz/16bit的立体声,需要133Mhz英特尔奔腾处理器或更好

相关链接

官网提供了ST的可执行程序、C++源码、说明文档、不同操作系统的示例工程,几个重要链接:

FMOD

fmod Ex 声音系统是为游戏开发者准备的革命性音频引擎。最新版本是Fmod Studio 2.00.07。你也可以在FMOD的官网上下载到FMOD 3。如今采用了FMOD作为音频引擎的游戏包括Far Cry(孤岛惊魂)、Tom Clancy's Ghost Recon(幽灵行动),甚至著名的World Of Warcraft(魔兽争霸)。

主要特性

  • 更加强大,FMOD 能实现更复杂的音频特效,例如 3D 混响
  • 商业,非开源
  • 跨平台

相关链接

参考文献