**BinaryOpUgen** **apply a binary operation to the values of an input ugen**

BinaryOpUGens are created as the result of a binary operator applied to a UGen.

(SinOsc.ar(200) * ClipNoise.ar).dump;

(SinOsc.ar(200).thresh(0.5)).dump;

The use of the binary operators ***** and **thresh** above each instantiate a BinaryOpUGen. The operators themselves (which are methods) are not to be confused with the resulting BinaryOpUGen (which is an object).

When operating on UGens instead of numbers, what results is not a result of the calculation, but a structure that represents that calculation. For the immediate operations on numbers, see for example SimpleNumber.

There are helpfiles for each the different operators, listed below. Examples for unary operations on UGens are to be found in UGen's superclass AbstractFunction.

The following operators have their own helpfiles:

**+**** ****-**** ********* ****/**** ********** ****absdif**** ****amclip**** ****atan2**** ****clip2**** ****difsqr**** ****excess**** ****fold2**** ****hypot**** ****hypotApx**** ****max**** ****min**** ****ring1**** ****ring2**** ****ring3**** ****ring4**** ****round**** ****scaleneg**** ****sqrdif**** ****sqrsum**** ****sumsqr**** ****thresh**** ****trunc**** ****wrap2**

***new(selector, a, b) **return a new instance that applies the operator (**selector**)

to the ugens (**a and b**)

normally, this is implicitly called when applying a unary operator to a UGen.

**See also:** UnaryOpUGen

**Structually related:** BinaryOpFunction, Pbinop

**Examples**

a = WhiteNoise.ar; // a WhiteNoise

b = a + 2; // a BinaryOpUGen.

b.operator; // +

// sound example

(

{

var a = LFSaw.ar(300);

var b = LFSaw.ar(329.1);

a % b * 0.1

}.play;

)

**The comparison operators**

The operators >, >=, <, and <= are particularly useful for triggering. They should not be confused with their use in conditionals. Compare

if(1 > 0) { "1 is greater than 0".postln }; // > returns a boolean

with

// trigger an envelope

(

{

var trig;

trig = SinOsc.ar(1) > 0.1;

EnvGen.kr(Env.perc, trig, doneAction: 0) * SinOsc.ar(440,0,0.1)

}.play

) // > outputs 0 or 1

See the individual helpfiles ( >, >=, <, <= ) for more detail.

Since the equality operator (**==**) is used to distingush objects including UGens, it cannot be used to create a BinaryOpUGen by application. Instead, to get a trigger value each time two signals are the same (instead of just finding out whether two UGens are the same), one can instantiate a BinaryOpUGen directly:

(

{

var a = SinOsc.ar(1).round(0.1);

var b = SinOsc.ar(1.2).round(0.1);

BinaryOpUGen('==', a, b) * 0.1

}.play;

)