Control signal generator which outputs shaped Attack-Decay-Sustain-Release envelopes.
adsr = T("adsr", table="linear", a=200, d=500, sl=0.5, r=500, reversed=false); // a [Number] Attack time in msec // d [Number] Decay time in msec // sl [Number] Sustain Level // r [Number] Release time in msec // Other constructors T("adsr", [table], decay); T("adsr", [table], attack, decay); T("adsr", [table], attack, decay, release); T("adsr", [table], attack, decay, sustain-level, release); T("adsr", [table], delay, attack, delay, sustain-level, release);
adsr.table // [String] Envelope curve adsr.delay // [Number] Delay time in msec adsr.a // [Number] Attack time in msec adsr.d // [Number] Decay time in msec adsr.s // [Number] Sustain time in msec adsr.r // [Number] Release time in msec adsr.al // [Number] Attack Level adsr.dl // [Number] Decay Level adsr.sl // [Number] Sustain Level adsr.rl // [Number] Release Level adsr.reversed // [Boolean] Reverse envelope adsr.currentTime // [Readonly] Current position in msec of the envelope adsr.status // [Readonly] The status of envelope
// Trigger the envelope adsr.bang(); // Send a keyoff message to release adsr.keyoff();
// Script to be run when the envelope status reach 'A' adsr.onA = function() { synth.freq.value = 880; }; // Script to be run when the envelope status reach 'D' adsr.onD = function() { synth.freq.value = 660; }; // Script to be run when the envelope status reach 'S' adsr.onS = function() { synth.freq.value = 440; }; // Script to be run when the envelope status reach 'R' adsr.onR = function() { synth.freq.value = 220; }; // Script to be run when the envelope status reach the end adsr.onended = function() {};
adsr = T("adsr", 250, 1000, 0.5, 500); synth = T("*", adsr, T("tri", 880, 0.25)); timeout = T("timeout", 3000, function() { adsr.keyoff(); }); adsr.onbang = function() { this.table = "32db"; }; adsr.onD = function() { this.table = "~32db"; }; synth.play();
adsr = T("adsr", 200, 500, 0.75, 500).set("delay", 200); synth = T("tri", adsr, 0.25); adsr.al = 0.2; adsr.dl = 1.0; adsr.mul = 880; adsr.add = 440; synth.play();