UNPKG

shinobi-sound-detection

Version:

Library to detect sudden noises above ambient from a network stream such as an IP Webcam or network microphone. This library is a modified version of Barry's to work with ShinobiCCTV.

61 lines (58 loc) 1.81 kB
var http = require('http'); var _ = require('underscore'); var pcm = require('./libs/pcm-boilerplate'); var qmean = require('compute-qmean'); var mean = require('compute-incrmmean'); function NoiseDetection(options, callback) { var streamDecoder = new pcm.StreamDecoder(options.format) var rmsAvg = mean(2000) if (options.triggerLevel && options.triggerLevelMax) { function processDb(dB) { if (dB > options.triggerLevel && dB < options.triggerLevelMax) { callback(dB) } } }else if (options.triggerLevel) { function processDb(dB) { if (dB > options.triggerLevel) { callback(dB) } } } else { var processDb = callback } function processBlock() { var block = streamDecoder.read(); var samples = []; var rms; var db; if (block) { _.forEach(block[0], function (sample) { samples.push(sample) }); rms = qmean(samples) rmsAvg(rms) dB = (rms * 100).toFixed(2) processDb(dB) } } this.streamDecoder = streamDecoder this.write = function(audioData) { streamDecoder.write(audioData) } this.start = function() { if(options.url){ this.httpStream = http.get(options.url, function (source) { source.pipe(streamDecoder) }) } streamDecoder.on('readable', processBlock) } this.stop = function() { if(this.httpStream && this.httpStream.abort){ console.log('Close Audio Stream') this.httpStream.abort() } } } module.exports = NoiseDetection;