1

嘿,我需要为我的 Voice Changer 应用程序更改音频文件。我需要像机器人或外星人这样的效果。因此,我必须实现一个环形调制器http://en.wikipedia.org/wiki/Ring_modulation

你知道如何实现它吗?或者你有不同的更简单的建议吗?我能够更改文件的音高、速度和回声。

谢谢你的帮助

4

2 回答 2

2

原则上,环形调制器只是将输入信号与载波相乘,例如低频正弦波:

f - input signal
g - carrier
h - output

h[i] = f[i] * g[i], for all i

正如 MSalters 所建议的,它只是andh的内积,使用 C++ 函数可能比自己计算要快。fg

然而,我们习惯听到的环形调制器是模拟环形调制器,它们比数字环形调制器引入更多的失真。如果您想在数字域中模拟模拟环形调制器,您必须做的工作比此处描述的要多得多。但是,这里有一个很好的参考,其中包含用 javascript 编写的示例代码和对一篇不错的论文的参考:

http://webaudio.prototyping.bbc.co.uk/ring-modulator/

如果你想要那种邪恶的 dalek 音效,那就是你要走的路。我不知道如何将简单的数字方法与语音“机器人化器”进行比较,但我怀疑如果您不是专门尝试模仿 dalek,它们都很好。

当然,还有许多其他方法可以“机器人化”声音,但环形调制器非常经典。另一个“经典”是通道声码器,但正确实现要复杂得多。

于 2013-09-16T02:54:05.883 回答
1

C++ 有一个标准函数:std::inner_product. 只需给它输入输入信号和正弦波。

于 2013-09-15T22:33:18.097 回答