以编程方式创建 pad 声音
Posted
技术标签:
【中文标题】以编程方式创建 pad 声音【英文标题】:programmatically create a pad sound 【发布时间】:2010-07-31 15:03:58 【问题描述】:好吧,这个可能有点偏离左侧字段,但无论如何我都会尝试。
打击垫是一种“嗡嗡声”的环境电子声音。类似 this 。
如何在代码中生成它?使用 Processing、OpenFrameworks、C、Objective-C 或 C++。请记住,我已经很久没有编程了。
如果这能得到答案,我会非常感动!
好的……去吧!
【问题讨论】:
【参考方案1】:我从来没有听说过这里使用的“垫子”这个词,但它听起来像是合成器风琴的声音,演奏主要和弦。
首先,要表示单个音符,您可以在音符的基频(如果我们谈论的是 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. 你所说的“一些递减的权重”是什么意思? 2. 我听说长攻击、释放阶段和大声延迟也有帮助,但不知道从哪里开始编程。有什么建议吗?【参考方案2】:有pad合成的解释:
http://zynaddsubfx.sourceforge.net/doc/PADsynth/PADsynth.htm
【讨论】:
【参考方案3】:我无法为您提供具体的代码示例,但我想说类似于您的这个声音示例的东西可以通过 FM(频率调制)合成来完成。
在编写任何代码之前,您可能需要从 Internet 下载任何软件 FM 合成器(有很多免费提供的,一些作为独立应用程序,一些作为 VST 插件)并进行一些实验,如果您可以制作你想要的声音,写相应的代码。 (到那时,您可能会知道您需要什么样的振荡器、频率等组合。)
【讨论】:
【参考方案4】:如果你没有声音编程方面的经验,你应该看看 java sound,因为它真的很容易学习和使用。我知道你已经标记了 C*,但我不知道是否有这么简单的 API。
创建声音基本上就是 grumdrig 所说的,您“只需”以您喜欢声音的方式组合不同的波。 ;-)
【讨论】:
以上是关于以编程方式创建 pad 声音的主要内容,如果未能解决你的问题,请参考以下文章