本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
音频变声包括对声音的音调和速度的改变。两个属性的组合有四种情况: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 混响
- 商业,非开源
- 跨平台