Tone.js/test/helper/compare/Spectrum.ts
2024-05-01 15:55:52 -04:00

30 lines
617 B
TypeScript

import { TestAudioBuffer } from "./TestAudioBuffer";
import windowing from "fft-windowing";
import ft from "fourier-transform";
/**
* Return a spectrogram of the buffer
*/
export function analyze(
buffer: TestAudioBuffer,
fftSize = 256,
hopSize = 128
) {
const spectrogram: number[][] = [];
buffer
.toMono()
.toArray()
.forEach((channel) => {
for (
let index = 0;
index < channel.length - fftSize;
index += hopSize
) {
const segment = windowing.blackman_harris(
channel.slice(index, index + fftSize)
);
spectrogram.push(ft(segment));
}
});
return spectrogram;
}