以编程方式创建垫声音

时间:2010-07-31 15:03:59

标签: c++ c objective-c audio processing

好的,这个可能会离开左侧,但我还是会尝试。

垫是一种环境电子声,有点'哼唱'。类似于 this

如何在代码中生成此代码?使用Processing,OpenFrameworks,C,Objective-C或C ++。请记住,我没有那么长时间的编程。

如果能得到答案,我会非常感动!

好的......去吧!

4 个答案:

答案 0 :(得分:5)

我从来没有听过这里应用的术语“垫”,但它听起来像合成器官的声音,演奏大和弦。

首先,为了表示单个音符,您可以在音符的基频处产生正弦波(如果我们谈论的是A大调,则说440Hz)和接下来的几个倍数(880,1760, 3520)并将它们与一些(递减的)权重相加。然后添加以相同方式渲染的和弦(C#和E)的其他音符。

如果这对你来说听起来很有用,我可以根据需要进行扩展。

编辑:通过“一些(减少)重量”,我的意思是添加泛音一些放大倍数,例如

F = 440;  // Hz
tone[t] = A * sin(t/F) + B * sin(t/(2*F)) + C * sin(t/(3*F)); // + etc, perhaps

或许,

A = 1.0;
B = 1.0/2.0;
C = 1.0/3.0;

或其他一些东西。

对于ADSR滤波器(向上看),您将生成的波形乘以在您选择的“攻击”期间从0增加到1的放大倍数,然后在“衰减”期间下降到某个数字选择(可能是0.7),然后在“释放”持续音符时线性地下降到0。

对于回声/混响,您可以将波形添加回自身,但有一些延迟,例如

D = 4410;  // 10 msec at 44.1 kHz., as an example value
tone[t] += 0.5 * tone[t-D];

答案 1 :(得分:4)

答案 2 :(得分:2)

我无法帮助您解决具体的代码示例,但我会说类似于您的声音样本可以使用 FM(调频)合成来完成。

在您编写任何代码之前,您可能需要从互联网上下载任何软件FM合成器(有许多免费提供,一些作为独立应用程序,一些作为VST插件)和实验一点,如果您可以生产你想要的声音,写下相应的代码。 (到那时,你可能会知道你需要什么样的振荡器,频率等组合。)

答案 3 :(得分:2)

如果你没有在声音编程方面表现出色,你应该看看java声音,因为它非常容易学习和使用。我知道你已经标记了C *,但我不知道是否有这么简单的API。

创造声音基本上就是grumdrig所说的,你“只是”必须以你喜欢的方式组合不同的波浪。 ; - )