跳轉到內容

在 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.
)
華夏公益教科書