env test

by Chinmay Pendharkar

JavaScript

var context = new AudioContext();

var osc1 = context.createOscillator();
var osc2 = context.createOscillator();

osc2.frequency.value = 660;
time = context.currentTime;

// amplitude envelope values
var ampAtk = 0.1;
var ampSus = 0.8;
var ampDec = 1.0;

// filter envelope values
var filterAtk = 0.5;
var filterSus = 0.3;
var filterDec = 0.7;

console.log("1st oscillator: " + osc1);
console.log("2nd oscillator: " + osc2);
osc1.start(time);
osc2.start(time);

var gain = context.createGain();

// amplitude envelope
gain.gain.setValueAtTime(0.001, time);
// gain.gain.setTargetAtTime(0.1, time + 0.01, 0.1);
gain.gain.exponentialRampToValueAtTime(0.5, time + ampAtk);
gain.gain.exponentialRampToValueAtTime(0.001, time + ampSus + ampDec);
// add small padding at the end (0.01) to prevent clipping when oscillator stops
osc1.stop(time + ampSus + ampDec + 0.1);
osc2.stop(time + ampSus + ampDec + 0.1);

var filter = context.createBiquadFilter();
filter.type = "lowpass";

// filter envelope
filter.frequency.setValueAtTime(100, time);
filter.frequency.exponentialRampToValueAtTime(3040, time + filterAtk);
filter.frequency.exponentialRampToValueAtTime(0.01, time + filterSus + filterDec);

osc1.connect(filter);
osc2.connect(filter);
filter.connect(gain);
gain.connect(context.destination);