深入解释clojure泛音发生器中的副作用界面

时间:2013-06-27 21:47:05

标签: clojure supercollider

我是泛音/超级幻灯片的新手。我知道声音是如何形成的。但是我不明白泛音的声音产生功能。

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

(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的峰值,我可以编码控制它的接口是什么?

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我从#supercollider / Freenode IRC的droidcore得到了答案

d:时间真的像挂钟时间,它只是通过

d:ugen知道每个样本以毫秒为单位所花费的时间,因此它知道推进其时间概念需要多长时间

d:所以在一个广告中,当你说你想要一个1.0秒的攻击时间时,它知道它需要拿44100个样本(比方说)去那里

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

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

d:他们只是反复查找表格中的下一个值             表示波的一个周期,然后只是绕圈             他们到最后的开始

d:你不能真正从SC方面做样本逻辑

但是,如果你想试验它,Chuck会这样做

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

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

d:它更像是一个流

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