(function(){ "use strict"; function byteArrayToHex(arrayBuffer){ var chunks = []; (new Uint32Array(arrayBuffer)).forEach(function(num){ chunks.push(num.toString(16)); }); return chunks.map(function(chunk){ return "0".repeat(8 - chunk.length) + chunk; }).join(""); } var container = document.getElementById("test"); var pxi_output; var pxi_full_buffer; function run_pxi_fp(){ var context = new window.OfflineAudioContext(1, 44100, 44100); // Create oscillator var pxi_oscillator = context.createOscillator(); pxi_oscillator.type = "triangle"; pxi_oscillator.frequency.value = 1e4; // Create and configure compressor var pxi_compressor = context.createDynamicsCompressor(); pxi_compressor.threshold && (pxi_compressor.threshold.value = -50); pxi_compressor.knee && (pxi_compressor.knee.value = 40); pxi_compressor.ratio && (pxi_compressor.ratio.value = 12); pxi_compressor.reduction && (pxi_compressor.reduction.value = -20); pxi_compressor.attack && (pxi_compressor.attack.value = 0); pxi_compressor.release && (pxi_compressor.release.value = .25); // Connect nodes pxi_oscillator.connect(pxi_compressor); pxi_compressor.connect(context.destination); // Start audio processing pxi_oscillator.start(0); context.startRendering(); context.oncomplete = function(evnt) { var str = ""; var copyTest = new Float32Array(44100); evnt.renderedBuffer.copyFromChannel(copyTest, 0); var getTest = evnt.renderedBuffer.getChannelData(0); Promise.all([ crypto.subtle.digest("SHA-256", getTest), crypto.subtle.digest("SHA-256", copyTest), ]).then(function(hashes){ container.querySelector(".hash").textContent = byteArrayToHex(hashes[0]) + " / " + byteArrayToHex(hashes[1]); }); var sum = 0; for (var i = 4500; i < 5000; i += 1) { sum += Math.abs(getTest[i]); } container.querySelector(".sum").textContent = sum; pxi_compressor.disconnect(); }; } run_pxi_fp(); container.querySelector("button").addEventListener("click", run_pxi_fp); }());