在 SuperCollider 中設計聲音/加法合成
外觀
使用方程 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.
)