在 SuperCollider 中设计声音/纯数据对象等效物
以下列表基于 Christopher Ariza 编写的 **纯数据 (PD) 对象参考词汇表**,可在以下 URL 获取:http://www.flexatone.net/docs/pdg
SuperCollider 示例的系数已适应纯数据对象的行为。
以毫秒为单位,以恒定速率发送一系列砰的一声。
// example: [metro 2012]
// 2012 ms = 2.012 s
// BPM: 60 / 2.012 = 29.821073558648
// BPS: BPM / 60 = 0.49701789264413 -> ~ 0.497 Hz
Impulse.kr((2012/1000).reciprocal); // equals to Impulse.kr(60/(2012/1000)/60);
带通滤波器。参数初始化中心频率和 Q。
// [bp~] and BPF.ar differ in their behaviour.
// This example is just an approximation to [bp~].
BPF.ar(signal, centerFrequency, Q.reciprocal)
cos~ 对象输出其信号输入的 2π 倍的余弦值。因此 -1、0、1 和 2 输出 1,0.5 输出 -1,依此类推。
(signal * 2pi).cos
或者,使用更常见的相位调制和查找表
SinOsc.ar(phase: 0.5pi + (2pi * signal))
延迟信号。提供一个信号作为输入,将其添加到延迟线。一个或多个 [delread~] 或 [vd~] 对象可以从由 [delwrite~] 对象创建的延迟线读取。
第一个参数:延迟线名称第二个参数:延迟线长度(以毫秒为单位)(= 最大延迟时间)
// at first: a buffer for the UGens to use
buffer = Buffer.alloc(s, s.sampleRate * seconds, 1); // or LocalBuf(s.sampleRate * seconds, 1) ... whatever suits best
DelTapWr.ar(buffer, signal)
一极高通滤波器。
(signal - OnePole.ar(signal, exp(-2pi * (freq * SampleDur.ir))))
一极低通滤波器。
OnePole.ar(signal, exp(-2pi * (freq * SampleDur.ir)))
返回两个信号中较大的一个。
signal1.max(signal2)
返回两个信号中较小的一个。
signal1.min(signal2)
均匀分布的白噪声;输出介于 -1 和 1 之间。
WhiteNoise.ar
锯齿波振荡器。从 0 递增到 1;可以被认为是介于 0 和 1 之间的锯齿波。
LFSaw.ar(0.5, 1, 0.5, 0.5)
粉红噪声发生器。
PinkNoise.ar
对信号求幂。
signal.pow(exponent)
延迟信号。一个或多个独立的 [vd~] 对象可以从一个命名的 [delwrite~] 对象读取延迟线。延迟线必须作为构造参数命名。信号输入将设置延迟时间(以毫秒为单位)。
// works in conjunction with DelTapWr and an allocated buffer
DelTapRd.ar(buffer, outputOfDelTapWr, delTime)
vline~ 对象与 line~ 相似,会生成线性斜坡,其电平和时间由您发送给它的消息决定。消息包含目标值、时间间隔(如果没有提供则为零)和初始延迟(如果没有提供则为零)。斜坡可能在音频样本之间开始和停止,在这种情况下,输出将相应地插值。
// Equivalent in SuperCollider for the following message sent to [vline~]: [1 1000 500, 0 1000 2500]
EnvGen.ar(Env.new([0, 0, 1, 1, 0], [0.5, 1, 1, 1]))
// the pure data message means:
// go to 1 in 1000ms but wait 500ms from the starting point,
// then go to 0 in 1000ms but wait 2500 ms from the starting point:
Env.new([0, 0, 1, 1, 0], [0.5, 1, 1, 1]).plot
模 1 的余数。[wrap~] 对象给出输入与不超过它的最大整数之间的差值(对于正数,这是小数部分)。
Wrap.ar(signal)
或使用运算符 "wrap"
signal.wrap(0, 1)