meyda
Version:
Real-time feature extraction for the web audio api
27 lines (24 loc) • 834 B
JavaScript
;
function spectralSlope (_a) {
var ampSpectrum = _a.ampSpectrum, sampleRate = _a.sampleRate, bufferSize = _a.bufferSize;
if (typeof ampSpectrum !== "object") {
throw new TypeError();
}
//linear regression
var ampSum = 0;
var freqSum = 0;
var freqs = new Float32Array(ampSpectrum.length);
var powFreqSum = 0;
var ampFreqSum = 0;
for (var i = 0; i < ampSpectrum.length; i++) {
ampSum += ampSpectrum[i];
var curFreq = (i * sampleRate) / bufferSize;
freqs[i] = curFreq;
powFreqSum += curFreq * curFreq;
freqSum += curFreq;
ampFreqSum += curFreq * ampSpectrum[i];
}
return ((ampSpectrum.length * ampFreqSum - freqSum * ampSum) /
(ampSum * (powFreqSum - Math.pow(freqSum, 2))));
}
module.exports = spectralSlope;