JSFiddle - React, Tailwind, and code Playground

by El Khal

HTML

<canvas width="320px" height="30px" id="test" style="background-color: black;"></canvas>

JavaScript

var max_level_L = 0;
	var old_level_L = 0;
	var cnvs = document.getElementById("test");
	var cnvs_cntxt = cnvs.getContext("2d");
  
	var constraints = { audio: true, video:false };
	
navigator.mediaDevices.getUserMedia(constraints).then(


		function(stream){
		
			
		var audioContext = new AudioContext();
			var microphone = audioContext.createMediaStreamSource(stream);
			var javascriptNode = audioContext.createScriptProcessor(1024, 1, 1);
			
			microphone.connect(javascriptNode);
			javascriptNode.connect(audioContext.destination);
			javascriptNode.onaudioprocess = function(event){

				var inpt_L = event.inputBuffer.getChannelData(0);
				var instant_L = 0.0;

				var sum_L = 0.0;
				for(var i = 0; i < inpt_L.length; ++i) {
					sum_L += inpt_L[i] * inpt_L[i];
				}
				instant_L = Math.sqrt(sum_L / inpt_L.length);
				max_level_L = Math.max(max_level_L, instant_L);				
				instant_L = Math.max( instant_L, old_level_L -0.008 );
				old_level_L = instant_L;
				
				cnvs_cntxt.clearRect(0, 0, cnvs.width, cnvs.height);
				cnvs_cntxt.fillStyle = '#00ff00';
				cnvs_cntxt.fillRect(10,10,(cnvs.width-20)*(instant_L/max_level_L),(cnvs.height-20)); // x,y,w,h
				
			}
		}).catch(function(err) {
	  	 console.log(e); 
	});