3

我是泛音/超级对撞机的新手。我知道声音在物理上是如何形成的。但是我不明白泛音发声功能中的魔力。

假设我有一个基本的声音:

(definst sin-wave [freq 440 attack 0.01 sustain 0.4 release 0.1 vol 0.4] 
  (* (env-gen (lin-env attack sustain release) 1 1 0 1 FREE)
     (+ (sin-osc freq)
        (sin-osc (* freq 2))
        (sin-osc (* freq 4)))
     vol))

我在这里了解声音包络、正弦波、频率、音量的 ASR 循环。它们描述了声音随时间变化的幅度。我不明白的是时间。由于这里所有功能的输入都没有时间,我如何控制像回声和其他很酷的效果这样的东西?

如果我要编写自己的 sin-osc 函数,如何指定特定时间点的声音幅度?假设我的 sin-osc 必须在周期的 1/4 处设置输出达到幅度 1.0 的峰值,我可以用什么接口来控制它?

在不知道这一点的情况下,所有泛音中的声音合成器对我来说都没有意义,它们看起来像是具有未知副作用的奇怪函数。

4

2 回答 2

2

Overtone 没有为每个信号指定随时间变化的单个样本或形状,它实际上只是 supercollider 服务器的一个接口(它定义了一个交互协议,其中 supercollider 语言是该服务器的规范客户端,而 overtone 是另一个)。出于这个原因,所有的泛音在幕后都在向超级对撞机服务器发送如何构建合成图的信号。超级对撞机服务器实际上是根据在任何给定时间播放的合成器的定义计算将哪些样本发送到 dac。这就是为什么为您提供原始合成器元素(如正弦振荡器和方波和滤波器)的原因:在服务器上调用这些元素以实际计算样本。

于 2013-06-28T18:57:59.590 回答
0

我在#supercollider/Freenode IRC 得到了来自 droidcore 的答复

d: 时间真的就像挂钟时间,只是流逝

d:ugen 知道每个样本需要多长时间(以毫秒为单位),因此它知道将其时间概念推进多少

d:所以在adsr中,当你说你想要1.0秒的攻击时间时,它知道它需要44100个样本(比如说)才能到达那里

d:采样率是固定的,是全局的。它在您开始合成过程时设置

d:是的,这就像在正弦波表中查找

d:他们只会反复查找代表一个周期的表格中的下一个值,然后当他们到达终点时,他们会绕到开头

d:你不能真正从 SC 端进行逐个样本逻辑

d:不过,如果你想尝试一下,Chuck 会这样做

d:时间是全局的,它是隐含的,它始终可供所有振荡器使用,但在内部它并不像一个封闭的形式,你说“给我这个时间值的样本”

d:你说“时间提前了 5 微秒。给我新的值”

d:它更像是一个流

d:您不需要随机访问振荡器值,只需按时间顺序访问下一个

于 2013-06-28T18:56:42.857 回答