var audio, source, proc, adjust = 1; function clog(str) { if (window.console && console.log) console.log(str); } function noop(e) { e.stopPropagation(); e.preventDefault(); $('.overlay').show(500); } function drop(e) { e.stopPropagation(); e.preventDefault(); $('.overlay').hide(500); if (source != null) { source.stop(0); source.disconnect(0); } source = audio.createBufferSource(); var reader = new FileReader(); reader.onload = function(e) { if (audio.decodeAudioData) { audio.decodeAudioData(e.target.result, function(b) { source.buffer = b; }, function(e) { clog(e); alert('Audio not playable or not supported.'); }); } else { source.buffer = audio.createBuffer(e.target.result, false); } } reader.readAsArrayBuffer(e.dataTransfer.files[0]); source.connect(proc); proc.connect(audio.destination); source.loop = true; source.start ? source.start(0) : source.noteOn(0); } audio = new(window.AudioContext || window.webkitAudioContext)(); proc = audio.createScriptProcessor(4096); proc.onaudioprocess = function(e) { // Get the audio data var inp0 = e.inputBuffer.getChannelData(0); var inp1 = e.inputBuffer.getChannelData(1); var out0 = e.outputBuffer.getChannelData(0); var out1 = e.outputBuffer.getChannelData(1); for (var i = 0; i < inp0.length; i++) { out0[i] = (inp0[i] - inp1[i]) / 2 * adjust; out1[i] = (inp1[i] - inp0[i]) / 2 * adjust; } }; $(function() { $("#adjust").slider({ min: -6, max: 15, value: 0, slide: function(e, ui) { adjust = Math.pow(10, ui.value / 20); $("#adjust").parent().find('span:last').text(ui.value + " dB"); } }); document.addEventListener('dragover', noop, false); document.addEventListener('drop', drop, false); });