3

好的,这个可能有点偏离左侧字段,但无论如何我都会尝试。

打击垫是一种“嗡嗡声”的环境电子声音。像这样的东西。

我怎样才能在代码中产生这个?使用 Processing、OpenFrameworks、C、Objective-C 或 C++。请记住,我已经很久没有编程了。

如果这会导致答案,我会印象深刻!

好吧……去吧!

4

4 回答 4

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];
于 2010-07-31T15:30:25.693 回答
4

有垫合成的解释:

http://zynaddsubfx.sourceforge.net/doc/PADsynth/PADsynth.htm

于 2010-07-31T17:06:10.180 回答
2

我无法用具体的代码示例来帮助你,但我想说的是类似于你的这个声音样本的东西可以用FM (Frequency Modulation) synthesis来完成。

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

于 2010-07-31T15:34:57.057 回答
2

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

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

于 2010-07-31T15:52:08.830 回答