【问题标题】:Ring modulator for voice effects用于语音效果的环形调制器
【发布时间】:2013-09-15 18:31:30
【问题描述】:

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

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

感谢您的帮助

【问题讨论】:

    标签: java android c++ audio native


    【解决方案1】:

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

    f - input signal
    g - carrier
    h - output
    
    h[i] = f[i] * g[i], for all i
    

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

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

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

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

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

    【讨论】:

    • 我可以遍历我的 wav 的所有值并简单地将它们与 g[i] 相乘吗? g[i] 的值必须从 -1 变为 1 ?如何实现 sinus 函数?
    • 这里还有很多关于创建正弦波的问题。也许不是最好的,但第一个命中:stackoverflow.com/questions/5469030/…
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多