X-Git-Url: https://git-public.kairo.at/?p=tricorder.git;a=blobdiff_plain;f=js%2Ftricorder.js;h=de33ae3a630e2c2eed70a95e946c314aea24b8fd;hp=50b0625c6fefe96db91c9df7ff9effbea79d5cb4;hb=bdfbab86ab3c17a41ab88de60a69427738661392;hpb=b15d6e45225f9499c2151870524f57d5e7ff1b13;ds=sidebyside diff --git a/js/tricorder.js b/js/tricorder.js index 50b0625..de33ae3 100644 --- a/js/tricorder.js +++ b/js/tricorder.js @@ -33,6 +33,12 @@ window.onload = function() { }, false); } +window.onresize = function() { + if (document.getElementById("sectSound").classList.contains("active")) { + gModSound.resize(); + } +} + function updateStardate() { if (!gStardate) gStardate = document.getElementById("stardate"); @@ -221,7 +227,7 @@ var gModGrav = { var gModSound = { activate: function() { //gSounds.scan.play(); - if (navigator.getUserMedia) { + if (navigator.getUserMedia && (window.AudioContext || window.webkitAudioContext)) { document.getElementById("soundunavail").style.display = "none"; document.getElementById("soundavail").style.display = "block"; navigator.getUserMedia({ audio: true }, @@ -232,20 +238,7 @@ var gModSound = { // Could put a filter in between like in http://webaudioapi.com/samples/microphone/ gModSound.mDisplay.canvas = document.getElementById("soundcanvas"); gModSound.mDisplay.context = gModSound.mDisplay.canvas.getContext("2d"); - gModSound.mDisplay.canvas.height = document.getElementById("soundavail").clientHeight - 2; - gModSound.mDisplay.canvas.width = document.getElementById("soundavail").clientWidth; - gModSound.mAudio.frequencySlices = (gModSound.mDisplay.canvas.width > 512) ? - 512 : - Math.pow(2, Math.floor(Math.log(gModSound.mDisplay.canvas.width) / Math.LN2)); - console.log("slices: " + gModSound.mAudio.frequencySlices); - gModSound.mAudio.analyzer = gModSound.mAudio.context.createAnalyser(); - // Make the FFT four times as large as needed as the upper three quarters turn out to be useless. - gModSound.mAudio.analyzer.fftSize = gModSound.mAudio.frequencySlices * 4; - console.log("FFT: " + gModSound.mAudio.analyzer.fftSize); - gModSound.mAudio.input.connect(gModSound.mAudio.analyzer); - gModSound.mDisplay.context.setTransform(1, 0, 0, -(gModSound.mDisplay.canvas.height/256), 0, gModSound.mDisplay.canvas.height); - gModSound.mDisplay.active = true; - window.requestAnimationFrame(gModSound.paintAnalyzerFrame); + gModSound.rebuildCanvas(); }, function(err) { document.getElementById("soundunavail").style.display = "block"; @@ -259,6 +252,26 @@ var gModSound = { document.getElementById("soundavail").style.display = "none"; } }, + rebuildCanvas: function() { + if (gModSound.mDisplay.AFRequestID) { + window.cancelAnimationFrame(gModSound.mDisplay.AFRequestID); + gModSound.mDisplay.AFRequestID = 0; + } + gModSound.mDisplay.canvas.height = document.getElementById("soundavail").clientHeight - 4; + gModSound.mDisplay.canvas.width = document.getElementById("soundavail").clientWidth; + gModSound.mAudio.frequencySlices = (gModSound.mDisplay.canvas.width > 512) ? + 512 : + Math.pow(2, Math.floor(Math.log(gModSound.mDisplay.canvas.width) / Math.LN2)); + //console.log("slices: " + gModSound.mAudio.frequencySlices); + gModSound.mAudio.analyzer = gModSound.mAudio.context.createAnalyser(); + // Make the FFT four times as large as needed as the upper three quarters turn out to be useless. + gModSound.mAudio.analyzer.fftSize = gModSound.mAudio.frequencySlices * 4; + //console.log("FFT: " + gModSound.mAudio.analyzer.fftSize); + gModSound.mAudio.input.connect(gModSound.mAudio.analyzer); + gModSound.mDisplay.context.setTransform(1, 0, 0, -(gModSound.mDisplay.canvas.height/256), 0, gModSound.mDisplay.canvas.height); + gModSound.mDisplay.active = true; + gModSound.mDisplay.AFRequestID = window.requestAnimationFrame(gModSound.paintAnalyzerFrame); + }, mAudio: { frequencySlices: 32, // Must be a multiple of 2 (see AnalyserNode.fftSize) }, @@ -278,7 +291,10 @@ var gModSound = { gModSound.mDisplay.context.fillRect(i*wid, 0, wid, data[i]); } if (gModSound.mDisplay.active) - window.requestAnimationFrame(gModSound.paintAnalyzerFrame); + gModSound.mDisplay.AFRequestID = window.requestAnimationFrame(gModSound.paintAnalyzerFrame); + }, + resize: function() { + gModSound.rebuildCanvas(); }, deactivate: function() { if (gModSound.mDisplay.active) {