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 <[email protected]>
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
[email protected].

Reply via email to