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

音频变声包括对声音的音调和速度的改变。两个属性的组合有四种情况: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++源码、说明文档、不同操作系统的示例工程,几个重要链接:

  • SoundTouch官网
  • ST处理效果预览
  • 源码编译方法、算法及参数说明
  • fmod Ex 声音系统是为游戏开发者准备的革命性音频引擎。最新版本是Fmod Studio 2.00.07。你也可以在FMOD的官网上下载到FMOD 3。如今采用了FMOD作为音频引擎的游戏包括Far Cry(孤岛惊魂)、Tom Clancy's Ghost Recon(幽灵行动),甚至著名的World Of Warcraft(魔兽争霸)。

  • 更加强大,FMOD 能实现更复杂的音频特效,例如 3D 混响
  • 商业,非开源
  • FMOD 官网
  • FMOD 核心 API
  • SoundTouch实现音频变速变调
  • soundtouch之变调、变速、节拍
  • 音视频开发必看:“秒变萝莉音”,游戏中的变声是如何实现的
  • 分类:
    后端