跳转到内容

在 SuperCollider 中设计声音/加法合成

来自维基教科书,为开放世界提供开放书籍

图 17.4:加法合成

[编辑 | 编辑源代码]

使用方程 17.2 的加法合成,摘自 Moorer。

首先启动服务器,如果你还没有启动的话 - 这次要确保它是允许我们使用示波器的服务器。

Server.default = s = GUI.stethoscope.defaultServer;
s.boot;

在接下来的内容中,我们使用 ".sin" 和 ".cos" 作为数学运算,这样我们就可以紧密地遵循原始设计 - 这些运算比使用 SC 的 SinOsc 振荡器效率低得多,大多数人会使用 SinOsc 振荡器来进行 SuperCollider 中的加法合成。

在原始图中,freq 从 122 开始,index 从 0.42 开始。在这里,我们将这些参数连接到鼠标 - 左右移动控制 freq,上下移动控制谐波衰减。

幅度会随着衰减系数而变化,所以实际上,你需要进行某种归一化。

(
x = {	
	
	var freq = MouseX.kr(100, 1000, 1) / SampleRate.ir;
	var distance = 3.00;
	var index = MouseY.kr(0.42, 0.99);
	var theta, beta, num, denom, son;
	
	// Two phasors which will ramp from zero to 2pi
	theta = Phasor.ar(0, freq, 0, 2pi);
	beta  = Phasor.ar(0, freq * distance, 0, 2pi);
	
	num = sin(theta) - (index * sin(theta - beta));
	denom = 1 + index.squared - (2 * index * cos(beta));
	
	son = num / denom;
	
	Out.ar(0, Pan2.ar(son * 0.3));
	
}.freqscope;  // Use ".freqscope" or ".scope", both are illustrative.
)
华夏公益教科书