#lang scribble/manual @(require (for-label racket)) @title{(linen gate attackTime susLevel releaseTime doneAction)} A linear envelope generator. The done flag is set when the envelope reaches zero. Note that the sustain level input is consulted only at the instant when the gate is opened. @racketblock[ (let ((e (linen (impulse kr 2 0) 0.01 0.1 0.4 do-nothing))) (audition (out 0 (mul (sin-osc ar 440 0) e)))) ] @racketblock[ (let* ((y (mouse-y kr 0.1 0.5 0 0.1)) (x (mouse-x kr -1 1 0 0.1)) (e (linen x 1 y 1.0 do-nothing)) (o (sin-osc ar 440 0))) (audition (out 0 (mul o e)))) ] Open gate for a random interval. @racketblock[ (let* ((r (rand 0.05 0.4)) (u (letc ((gate 0)) (let ((e (linen gate 0.1 0.2 0.1 do-nothing))) (out 0 (mul (sin-osc ar 440 0) e))))) (g (encode-graphdef (synthdef "linen" u)))) (with-sc3 (lambda (fd) (async fd (d-recv g)) (send fd (s-new0 "linen" 1001 1 1)) (send fd (bundle (utc) (n-set1 1001 "gate" 1))) (send fd (bundle (+ (utc) r) (n-set1 1001 "gate" 0))) (sleep (* r 4)) (send fd (n-free1 1001))))) ]