12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- /**
- * Provides statistics for the local stream.
- */
- var LocalStatsCollector = (function() {
- /**
- * Size of the webaudio analizer buffer.
- * @type {number}
- */
- var WEBAUDIO_ANALIZER_FFT_SIZE = 512;
-
- /**
- * Value of the webaudio analizer smoothing time parameter.
- * @type {number}
- */
- var WEBAUDIO_ANALIZER_SMOOTING_TIME = 0.1;
-
- /**
- * <tt>LocalStatsCollector</tt> calculates statistics for the local stream.
- *
- * @param stream the local stream
- * @param interval stats refresh interval given in ms.
- * @param {function(LocalStatsCollector)} updateCallback the callback called on stats
- * update.
- * @constructor
- */
- function LocalStatsCollectorProto(stream, interval, updateCallback) {
- window.AudioContext = window.AudioContext || window.webkitAudioContext;
- this.stream = stream;
- this.intervalId = null;
- this.intervalMilis = interval;
- this.updateCallback = updateCallback;
- this.audioLevel = 0;
- }
-
- /**
- * Starts the collecting the statistics.
- */
- LocalStatsCollectorProto.prototype.start = function () {
- if (!window.AudioContext)
- return;
-
- var context = new AudioContext();
- var analyser = context.createAnalyser();
- analyser.smoothingTimeConstant = WEBAUDIO_ANALIZER_SMOOTING_TIME;
- analyser.fftSize = WEBAUDIO_ANALIZER_FFT_SIZE;
-
-
- var source = context.createMediaStreamSource(this.stream);
- source.connect(analyser);
-
-
- var self = this;
-
- this.intervalId = setInterval(
- function () {
- var array = new Uint8Array(analyser.frequencyBinCount);
- analyser.getByteFrequencyData(array);
- self.audioLevel = FrequencyDataToAudioLevel(array);
- self.updateCallback(self);
- },
- this.intervalMilis
- );
- };
-
- /**
- * Stops collecting the statistics.
- */
- LocalStatsCollectorProto.prototype.stop = function () {
- if (this.intervalId) {
- clearInterval(this.intervalId);
- this.intervalId = null;
- }
- };
-
- /**
- * Converts frequency data array to audio level.
- * @param array the frequency data array.
- * @returns {number} the audio level
- */
- var FrequencyDataToAudioLevel = function (array) {
- var maxVolume = 0;
-
- var length = array.length;
-
- for (var i = 0; i < length; i++) {
- if (maxVolume < array[i])
- maxVolume = array[i];
- }
-
- return maxVolume / 255;
- };
-
- return LocalStatsCollectorProto;
- })();
|