class:: Linen summary:: Simple linear envelope generator. categories:: UGens>Envelopes related:: Classes/EnvGen Description:: Simple linear envelope generator. classmethods:: method::kr argument::gate This triggers the envelope and holds it open while > 0. If strong::gate:: < 0, force release with time code:: -1.0 - gate ::. See link::Classes/EnvGen#Forced release::. argument::attackTime The duration of the attack portion. argument::susLevel The level of the sustain portion. argument::releaseTime The duration of the release portion. argument::doneAction An integer representing an action to be executed when the envelope is finished. See link::Classes/Done:: for more detail. Examples:: code:: // trigged ( SynthDef("help-Linen",{ arg out = 0; Out.ar(out, Linen.kr(Impulse.kr(2), 0.01, 0.6, 1.0, doneAction: Done.none) * SinOsc.ar(440, 0, 0.1) ) }).play; ) // play once and end the synth ( SynthDef("help-Linen",{ arg out=0; Out.ar(out, Linen.kr(Impulse.kr(0), 0.01, 0.6, 1.0, doneAction: Done.freeSelf) * SinOsc.ar(440, 0, 0.1) ) }).play; ) // play once and sustain ( x = SynthDef("help-Linen",{ arg gate = 1, out = 0; // use gate arg for release Out.ar(out, Linen.kr(gate, 0.01, 0.6, 1.0, doneAction: Done.freeSelf) * SinOsc.ar(440, 0, 0.1) ) }).play; ) x.release(4); // change the release time // longer gate, can pass in duration ( SynthDef("help-Linen",{ arg out = 0, dur = 0.1; var gate; gate = Trig.kr(1.0, dur); Out.ar(out, Linen.kr(gate, 0.01, 0.6, 1.0, doneAction: Done.freeSelf) * SinOsc.ar(440, 0, 0.1) ) }).play(nil, [\out, 0, \dur, 2.0]); ) // 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: Done.freeSelf) * SinOsc.ar(freq, 0, 0.1) ) }).add; ) ( // debussey 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) ) ( SynthDef("help-Linen",{ arg out = 0; Out.ar(out, 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: Done.none) * SinOsc.ar(440, 0, 0.1) ) }).play; ) ::