UNPKG

ferment

Version:

Peer-to-peer audio publishing and streaming application. Like SoundCloud but decentralized. A mashup of ssb, webtorrent and electron.

34 lines (31 loc) 1.02 kB
var ffmpeg = require('./exec-ffmpeg') module.exports = function (path, cb) { var count = 200 ffmpeg([ '-i', path, '-ac', 1, '-filter:a', 'aresample=1000', '-map', '0:a', '-c:a', 'pcm_s8', '-f', 's8', 'pipe:1' ], function (err, stdout, stderr) { if (err) return cb(err) var durationMatch = stderr.toString().match(/Duration: ([0-9]+):([0-9]{2}):([0-9]{2}.[0-9]{2})/) var duration = (parseInt(durationMatch[1], 10) * 3600) + (parseInt(durationMatch[2], 10) * 60) + parseFloat(durationMatch[3]) var samples = new Int8Array(stdout.buffer) var frameLength = Math.floor(samples.length / count) var bins = new Uint8Array(count) for (var i = 0; i < count; i += 1) { var sum = 0 for (var x = 0; x < frameLength; x++) { sum += Math.abs(samples[i * frameLength + x] * 2) } bins[i] = Math.floor(sum / frameLength) } cb(null, { overview: Buffer.from(bins.buffer).toString('base64'), duration: duration }) }) }