import { TestAudioBuffer } from "./TestAudioBuffer"; // eslint-disable-next-line @typescript-eslint/no-var-requires const dsp = require("dsp.js"); // eslint-disable-next-line @typescript-eslint/no-var-requires const windowing = require("fft-windowing"); export function analyse(buffer: TestAudioBuffer, fftSize = 256, hopSize = 128): Float64Array[] { const spectrogram: Float64Array[] = []; buffer.toMono().toArray().forEach(channel => { for (let index = 0; index < channel.length - fftSize; index += hopSize) { const FFT = new dsp.FFT(fftSize, buffer.sampleRate); const segment = windowing.blackman_harris(channel.slice(index, index + fftSize)); FFT.forward(segment); spectrogram.push(FFT.spectrum); } }); return spectrogram; }