Linen simple linear envelope generator

Inherits from: Object : AbstractFunction : UGen

Linen.kr( gate = 1.0, attackTime = 0.01, susLevel = 1.0, releaseTime = 1.0, doneAction = 0 )

See UGen-doneActions and EnvGen for more detail.

// triggered

{ Linen.kr(Impulse.kr(2), 0.01, 0.6, 1.0, doneAction: 0) * SinOsc.ar(440, 0, 0.1)}.play;

// play once and end the synth

{ Linen.kr(Impulse.kr(0), 0.01, 0.6, 1.0, doneAction: 2) * SinOsc.ar(440, 0, 0.1)}.play;

// play once and sustain

(

x = { arg gate = 1, out = 0; // use gate arg for release

Linen.kr(gate, 0.01, 0.6, 1.0, doneAction: 2) * SinOsc.ar(440, 0, 0.1)

}.play;

)

x.release(4); // change the release time

// longer gate, can pass in sustain

(

x = { arg out = 0, sustain = 2;

var gate;

gate = Trig.kr(1.0, sustain);

Linen.kr(gate, 0.01, 0.6, 1.0, doneAction: 2) * SinOsc.ar(440, 0, 0.1)

}.play;

)

// used below in a Routine varying the releaseTime

(

SynthDef(\help_Linen, { arg out=0, freq=440, attackTime=0.01, susLevel=0.6, releaseTime=0.1;

Out.ar(out,

Linen.kr(Impulse.kr(0), attackTime, susLevel, releaseTime, doneAction: 2)

* SinOsc.ar(freq, 0, 0.1)

)

}).send(s);

)

(

// Debussy sleeping through math class

x = Pbrown(0.01, 2.0, 0.2, inf).asStream;

Routine({

loop({

Synth.grain(\help_Linen, [\freq, (rrand(20, 50) * 2).midicps, \releaseTime, x.next]);

0.25.wait;

})

}).play(TempoClock.default)

)

(

{ Linen.kr(Impulse.kr(2),

0.01,

// sustain level is polled at time of trigger

FSinOsc.kr(0.1).range(0, 1),

1.0,

doneAction: 0)

* SinOsc.ar(440, 0, 0.1)

}.play

);