以编程方式创建 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 声音的主要内容,如果未能解决你的问题,请参考以下文章

如何在以编程方式创建的 UIButton 上添加 padding-left?

在 iOS 中以编程方式使按钮播放声音

以编程方式关闭 iPhone?

是否可以以编程方式在 Android 中收听扬声器输出?

如何以编程方式确定系统设备声音设置?

如何以编程方式更改非默认声音设备的音量?