home/ atoms/ sc-unipolar-bipolar-ugens

UGens are either unipolar (0 to 1) or bipolar (-1 to +1); knowing which is essential before routing their output

UGen output ranges fall into two categories: unipolar (0 to 1, e.g., LFPulse) and bipolar (-1 to +1, e.g., SinOsc, LFNoise0). This distinction is critical before routing a UGen as a control signal: a bipolar UGen used directly as amplitude produces negative amplitudes (phase inversion, effectively silence). The .range(lo, hi) method rescales any UGen’s native output to any target range. Checking polarity via .poll or the Help file is a prerequisite for routing. LFPulse in particular outputs only 0 or 1, never intermediate values.

Examples

{SinOsc.kr(1).poll}.play;    // bipolar: see -1..+1
{LFPulse.kr(1).poll}.play;   // unipolar: see 0 and 1 only
{SinOsc.ar(LFNoise0.kr(5).range(200,800),0,0.1)}.play;

Assessment

Without running code: if SinOsc.kr is used directly as the mul argument of another SinOsc, what amplitudes will occur? How would you fix this using .range? Verify with .poll.

“dividedintwocategoriesaccordingtotherangeofnumb erstheygenerate:unip olarUGens, andbip olarUGens. Unip olarUGensgeneratenumb ersb etween0and1.”
corpus · a-gentle-introduction-to-supercollider-bruno-ruviaro · chunk 10
“Unipolar UGensgenerate numbers between 0 and 1. Bipolar UGensgenerate numbers between -1 and +1.”
corpus · a-gentle-introduction-to-supercollider-ruviaro-archive-org-c · chunk 11