如何用 C++ 编写哇音音效?

Posted

技术标签:

【中文标题】如何用 C++ 编写哇音音效?【英文标题】:How to write a wah-wah sound effect in C++? 【发布时间】:2010-12-21 15:03:16 【问题描述】:

我正在努力学习写哇哇音效。真的只是为了好玩:)

到目前为止,我已经做了很多研究,这个页面解释得最好。 http://www.geofex.com/Article_Folders/wahpedl/voicewah.htm

基本上,我只是在寻找任何简单的 C++ 示例来生成哇音 (ooaaooaa) 效果。

最终一旦完成,我希望也能创建一个“eeeoooeeeeoo”效果或“eeaaeeaa”效果:) 一种元音合成,但用于音乐。

如果我找到任何好的示例,我会在此处链接到它们。

...

我在数学方面遇到了麻烦。

我需要产生什么波才能发出“E”的声音?我需要产生什么波才能发出“O”声?

我确实尝试根据该页面制作两个带有谐波的频率,并调整这两个频率,但它仍然听起来像电子哔哔声,而不是元音。

...

http://www.acoustics.hut.fi/publications/files/theses/lemmetty_mst/chap3.html这看起来不错。我可以使用一些数字。希望它听起来像“元音”。

编辑:我尝试以页面上提到的频率(100hz、600hz、1000hz、2500hz)发出一些声音。这听起来不像“元音”。也许非常轻微,但不正确。

所以显然我需要做更多的频率来发出正确的“a”声音。虽然我不确定是什么频率。

我可以录下自己的声音。然后也许下载一些其他人说元音。然后找到一个频谱分析仪应用程序。但我尝试搜索频谱分析仪应用程序,我发现的第一个应用程序不适用于仅麦克风输入的声音文件。似乎要找到一个满足我需要的频谱分析仪应用程序需要做更多的工作。我可能需要自己写。

遗憾的是,我找不到一个资源列表来生成某个元音……只是这样我就可以从中学习。然后利用这些知识,开发一个“元音过滤器”,它的作用类似于哇哇,但带有“ioio”或“eaea”的声音。

现在,我需要做的努力:

下载好元音 可能测试 4 个应用程序,看看它是否可以分析文件中的频谱 从该频谱生成频率 测试频率,看看它是否听起来像“元音”

它不再“有趣”了。这是工作。耻辱。因为我还有其他(真正的)工作要做。在我找到足够的答案让这个项目变得有趣之前,我会停下来。

【问题讨论】:

如果有人能在任何地方写出声音,我会很惊讶。 这将取决于平台。您在/定位于哪个平台? 最简单的方法是编写一个 C++ 程序,然后不小心用新麦克风的录音覆盖它。 不一定依赖于平台。如果您不想编写插件,可以使用 PortAudio 或 libsndfile 之类的东西。 现在,我正在编写一个 .wav 文件。我现在只产生声音,而不是改变传入的声音。一旦我了解了如何产生“e”或“o”或“a”的声音,我就会更多地了解如何过滤声音以使它们听起来像元音:) 【参考方案1】:

关于听起来像元音,你应该看看Formants。 它们对合成声音有很大帮助。

将声音通过共振峰滤波器可能会精确地产生您想要的效果。

编辑:我坚持使用共振峰过滤器不是哇哇效果。哇音效果只是一个简单的带通滤波器。共振峰滤波器更复杂。

【讨论】:

我正在尝试制作共振峰过滤器。我想自己理解这件事,而不仅仅是使用别人的预制材料:) 我这样做是为了好玩,而不是工作。 我不明白你的评论?因为哇音效果本身不是共振峰滤波器。它只是一个带通滤波器。简单得多。我的意思是他们——对我来说——几乎没有关系。因此我的回答。 我建议你这本书,以便从计算音乐开始。 “计算机音乐教程 - 柯蒂斯之路”。 和“music-dsp 邮件列表”来询问您与 dsp 相关的问题。 共振峰滤波器是一系列 2 个或更多并行带通滤波器。

以上是关于如何用 C++ 编写哇音音效?的主要内容,如果未能解决你的问题,请参考以下文章

与 numpy.logspace() 函数相比,如何用 C++ 编写快速代码?

如何用 C++ 编写 Cocoa OpenGL 应用程序?

如何用C++编写一段“输入A输出1”的程序

如何用普通 C++ 编写一个执行我的 javascript 的 IE BHO

如何用 C++ 编写程序,使其在执行后会自行删除?

对于 OpenGL 着色器,您将如何用 C++ 编写一个接受所有类型的统一函数?