home/ atoms/ sc-additive-synthesis-mix

Additive synthesis in SuperCollider stacks SinOsc UGens with harmonic ratios and independent amplitude envelopes

Additive synthesis builds complex timbres by summing pure sinusoids (harmonics or partials). In SC, Mix.fill(n, func) creates n SinOsc instances and sums them. Each partial can have an independently modulated amplitude — e.g., via LFNoise1 for time-varying timbre. Harmonic series frequencies are integer multiples of a fundamental. The harmonic number determines the partial’s brightness contribution; amplitude inversely proportional to harmonic number (1/n) approximates a sawtooth spectrum. Mix is efficient: it collapses an array of signals into one channel without writing intermediate results.

Examples

{ var nharm = 12; Mix.fill(nharm, { |count| SinOsc.ar(count+1 * 110, mul: max(0, SinOsc.kr(count+1/4))) * 1/(count+1) }) * 0.4 }.play

Assessment

Build a 12-partial additive synth with time-varying partial amplitudes driven by LFOs at different rates. Add a low-pass filter and describe the timbral change. Extend to 32 partials; measure CPU usage.

“var nharm = 12; Mix.fill(nharm, {arg count; var harm; harm = count + 1 * 110; // remember precedence; count + 1, then * 110”
corpus · the-supercollider-book-official-code-examples-scbookcode-gpl · chunk 1