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.