You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2018/03/19 17:04:36 UTC

[openmeetings] branch master updated: [OPENMEETINGS-1854] audio level meter is added

This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new c345e9e  [OPENMEETINGS-1854] audio level meter is added
c345e9e is described below

commit c345e9e9401da93082846409c50c23c7455730cf
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Tue Mar 20 00:04:26 2018 +0700

    [OPENMEETINGS-1854] audio level meter is added
---
 .../apache/openmeetings/web/room/settings-base.js  | 36 +++++++++++++++++++++-
 1 file changed, 35 insertions(+), 1 deletion(-)

diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings-base.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings-base.js
index 893bcaa..d0fb566 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings-base.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings-base.js
@@ -1,7 +1,8 @@
 /* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
 var VideoSettings = (function() {
 	let vs, lm, s, cam, mic, res, o, rtcPeer, offerSdp, timer
-		, vidScroll, vid, recBtn, playBtn, recAllowed = false;
+		, vidScroll, vid, recBtn, playBtn, recAllowed = false
+		, audioCtx, levelAnalyser, levelMic, levelScript;
 	function _load() {
 		s = Settings.load();
 		if (!s.video) {
@@ -34,6 +35,13 @@ var VideoSettings = (function() {
 		if (!!rtcPeer) {
 			rtcPeer.dispose();
 		}
+		if (!!audioCtx) {
+			levelMic.disconnect(levelScript);
+			levelScript.disconnect(audioCtx.destination);
+			levelMic.disconnect(levelAnalyser);
+			levelAnalyser.disconnect(levelScript);
+			audioCtx = null;
+		}
 		offerSdp = null;
 	}
 	function _close() {
@@ -178,6 +186,32 @@ var VideoSettings = (function() {
 					if (error) {
 						return _error(error);
 					}
+					audioCtx = new AudioContext();
+					levelAnalyser = new AnalyserNode(audioCtx, {
+						fftSize: 512
+						, smoothingTimeConstant: 0.5,
+					});
+					levelScript = audioCtx.createScriptProcessor(2048, 1, 1);
+					levelMic = audioCtx.createMediaStreamSource(rtcPeer.getLocalStream());
+					levelMic.connect(levelScript);
+					levelScript.connect(audioCtx.destination);
+					levelMic.connect(levelAnalyser);
+					levelAnalyser.connect(levelScript);
+					const arr =  new Uint8Array(levelAnalyser.frequencyBinCount);
+					let t = Date.now();
+					levelScript.onaudioprocess = function(event) {
+						if (Date.now() - t < 200) {
+							return;
+						}
+						t = Date.now();
+						levelAnalyser.getByteFrequencyData(arr);
+						let avg = 0.0;
+						for (let i = 0; i < arr.length; ++i) {
+							avg += arr[i];
+						}
+						avg /= arr.length;
+						_micActivity(100 * avg / 255);
+					};
 					rtcPeer.generateOffer(function(error, _offerSdp) {
 						if (error) {
 							return _error('Error generating the offer');

-- 
To stop receiving notification emails like this one, please contact
solomax@apache.org.