window.AudioContext = window.AudioContext || window.webkitAudioContext; var audioContext = new AudioContext(); var sound; var oscArray = []; var globalGain = audioContext.createGain(); globalGain.gain.value = 0.2; globalGain.connect(audioContext.destination); function createOsc() { var osc = audioContext.createOscillator(); osc.type = 'square'; osc.frequency.value = 440; return osc; } function linear(linearInput) { var currentTime = audioContext.currentTime; var gain = audioContext.createGain(); linearInput.connect(gain); gain.gain.setValueAtTime(0.01, currentTime); gain.gain.linearRampToValueAtTime(0.9, currentTime + 2); gain.gain.linearRampToValueAtTime(0.1, currentTime + 5); return gain; } function expRamp(expInput) { var currentTime = audioContext.currentTime; // Set value first expInput.frequency.setValueAtTime(440, currentTime); // Attack expInput.frequency.exponentialRampToValueAtTime(5000, currentTime + 2); // Decay expInput.frequency.exponentialRampToValueAtTime(200, currentTime + 3); expInput.frequency.cancelScheduledValues(currentTime + 2.5); return expInput; } function valCurve(curvInput) { var currentTime = audioContext.currentTime; // Curve Array values var waveArray = new Float32Array(5); waveArray[0] = 200; waveArray[1] = 700; waveArray[2] = 2000; waveArray[3] = 100; waveArray[4] = 440; // Curve audioparam method curvInput.frequency.setValueCurveAtTime(waveArray, currentTime + 2, 4); return curvInput; } function target(targetInput) { var currentTime = audioContext.currentTime; // Set value first targetInput.frequency.setValueAtTime(440, currentTime); // Target audioparam method targetInput.frequency.setTargetAtTime(880, currentTime + 1, 0.2); return targetInput; } function playLinear() { var osc = createOsc(); sound = linear(osc); sound.connect(globalGain); osc.start(); oscArray.push(osc); console.log(oscArray); } function playExpRamp() { sound = expRamp(createOsc()); sound.connect(globalGain); sound.start(); oscArray.push(sound); console.log(oscArray); } function playCurv() { sound = valCurve(createOsc()); sound.connect(globalGain); sound.start(); oscArray.push(sound); console.log(oscArray); } function playTarg() { sound = target(createOsc()); sound.connect(globalGain); sound.start(); oscArray.push(sound); console.log(oscArray); } function cancelEvents() { oscArray.forEach(function(e) { e.frequency.cancelScheduledValues(audioContext.currentTime); }); } function stopSound() { oscArray.forEach(function(e) { e.stop(); }); } var linearButton = document.getElementById("linear"); linearButton.addEventListener('click', playLinear); var expButton = document.getElementById("exp"); expButton.addEventListener('click', playExpRamp); var curvButton = document.getElementById("curv"); curvButton.addEventListener('click', playCurv); var targButton = document.getElementById("targ"); targButton.addEventListener('click', playTarg); var stopButton = document.getElementById("stop"); stopButton.addEventListener('click', stopSound); var cancelButton = document.getElementById("cancel"); cancelButton.addEventListener('click', cancelEvents);
<button type="button" id="linear" class="btn btn-info btn-lg button-color" >linearRampToValueAtTime</button> <br> <br> <button type="button" id="exp" class="btn btn-info btn-lg button-color" >exponentialRampToValueAtTime</button> <br> <br> <button type="button" id="curv" class="btn btn-info btn-lg button-color" >setValueCurveAtTime</button> <br> <br> <button type="button" id="targ" class="btn btn-info btn-lg button-color" >setTargetAtTime</button> <br> <br> <button type="button" id="stop" class="btn btn-info btn-lg" style="background-color:red" >Stop All Sound</button> <br> <br> <button type="button" id="cancel" class="btn btn-info btn-lg" style="background-color:red" >Cancel Events</button>