以编程方式创建垫音。

3

好的,这个问题可能有点突然,但我还是会尝试回答。

Pad是一种环境电子声音,有点像“嗡嗡”的声音。类似于这个

如何在代码中生成这种声音?可以使用Processing、OpenFrameworks、C、Objective-C或C++。请记住,我编程时间不长。

如果这个回答能解决你的问题,我会非常印象深刻!

好的...开始吧!

4个回答

5
我从未听说过“pad”这个术语,但它听起来像是合成器的器乐声音,演奏主和弦。
首先,为了表示单个音符,您可以在该音符的基本频率上生成正弦波(例如,如果我们谈论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 滤波器(请查阅相关资料),您需要将生成的波形乘以一个放大系数,在您选择的“攻击”期间逐渐增加到 1,然后在“衰减”期间下降到您选择的某个数字(可能是 0.7),然后当您“释放”持续音符时线性下降到 0。

对于回声/混响,您可以将波形与一些延迟后的自身相加,例如:

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

是的,这很有用。我已经在处理中实现了它,并且开始听起来不错。有几件事情:1. “一些减弱的权重”是什么意思?2. 我听说长攻击、释放阶段和响亮的延迟也有帮助,但不知道如何在程序上实现。有什么建议吗? - Eric Brotto

4

2
我无法提供具体的代码示例,但我认为类似于您的声音样本可以使用FM(频率调制)合成来完成。
在编写任何代码之前,您可能需要从互联网上下载任何软件FM合成器(有许多免费可用的,有些是独立应用程序,有些是VST插件)进行一些实验,如果您能够产生所需的声音,则编写相应的代码。(到那时,您很可能会知道需要哪些振荡器、频率等组合。)

2

如果你在音频编程方面没有经验,我建议你看看Java Sound,因为它非常容易学习和使用。我知道你标记了C*,但我不知道是否有这样一个易于使用的API。

基本上创建声音就像grumdrig所说的那样,“只需”以一种你喜欢的方式组合不同的波形即可。;-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接