Comparing version
45
index.js
@@ -1,11 +0,11 @@ | ||
var inherits = require('util').inherits; | ||
var Readable = require('readable-stream').Readable; | ||
var inherits = require('util').inherits | ||
var Readable = require('readable-stream').Readable | ||
module.exports = AudioRms | ||
function AudioRms(audioContext){ | ||
function AudioRms (audioContext) { | ||
if (!(this instanceof AudioRms)) { | ||
return new AudioRms(audioContext); | ||
return new AudioRms(audioContext) | ||
} | ||
Readable.call(this, { objectMode: true }); | ||
Readable.call(this, { objectMode: true }) | ||
@@ -16,3 +16,3 @@ var self = this | ||
this.input = audioContext.createGain() | ||
this._meter = this.context.createScriptProcessor(512*2, 2, 2) | ||
this._meter = this.context.createScriptProcessor(512 * 2, 2, 2) | ||
this.input.connect(this._meter) | ||
@@ -22,4 +22,5 @@ | ||
var lastR = 0 | ||
var smoothing = 0.8 | ||
this._processAudio = function(e){ | ||
this._processAudio = function (e) { | ||
var rmsL = 0 | ||
@@ -31,11 +32,6 @@ var rmsR = 0 | ||
for (var i = 0, ii = e.inputBuffer.length; i < ii; i++) { | ||
rmsL += (inputL[i] * inputL[i]) / 2 | ||
rmsR += (inputR[i] * inputR[i]) / 2 | ||
} | ||
rmsL = Math.max(rms(inputL), lastL * smoothing) | ||
rmsR = Math.max(rms(inputR), lastR * smoothing) | ||
rmsL = Math.sqrt(rmsL) / 10 | ||
rmsR = Math.sqrt(rmsR) / 10 | ||
if (rmsL != lastL || rmsR != lastR){ | ||
if (rmsL !== lastL || rmsR !== lastR) { | ||
self.push([rmsL, rmsR]) | ||
@@ -48,12 +44,21 @@ lastL = rmsL | ||
this._meter.connect(audioContext.destination) | ||
} | ||
inherits(AudioRms, Readable); | ||
inherits(AudioRms, Readable) | ||
function rms (input) { | ||
var sum = 0 | ||
var total = 0 | ||
for (var i = 0; i < input.length; i++) { | ||
var x = input[i] | ||
total += x | ||
sum += x * x | ||
} | ||
return Math.sqrt(sum / input.length) | ||
} | ||
AudioRms.prototype._read = function(e){ | ||
if (!this._meter.onaudioprocess){ | ||
AudioRms.prototype._read = function (e) { | ||
if (!this._meter.onaudioprocess) { | ||
this._meter.onaudioprocess = this._processAudio | ||
} | ||
} | ||
} |
{ | ||
"name": "audio-rms", | ||
"version": "1.1.0", | ||
"version": "2.0.0", | ||
"description": "Connect a Web Audio API AudioNode and stream out the realtime RMS audio level.", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
4418
2.55%75
11.94%