@sophialabs/spectro
Version:
lib para geração de espectrogramas
117 lines (116 loc) • 4.87 kB
TypeScript
export * from './colormaps.js';
/**
* Interface de parâmetros para gerar espectrogramas.
* Adicionamos gainDb e rangeDb para controle de ganho e intervalo em dB,
* targetWidth para definir a largura final desejada, e showFrequencyAxis para exibir o eixo.
*/
export interface SpectrogramParams {
sampleRate?: number;
scaleType?: 'Linear' | 'Mel';
fMin?: number;
fMax?: number;
fftSize?: number;
windowType?: 'None' | 'Cosine' | 'Hanning' | 'BH7';
colormapName?: string;
canvasHeight?: number;
nTicks?: number;
gainDb?: number;
rangeDb?: number;
targetWidth?: number;
showFrequencyAxis?: boolean;
filterType?: 'none' | 'lowpass' | 'highpass' | 'bandpass' | 'notch';
filterCutoffs?: number[];
enablePitchDetection?: boolean;
enableHarmonicsExtraction?: boolean;
}
/**
* Classe principal que gera o espectrograma.
* Você pode instanciar e chamar generateSpectrogram() para obter um canvas pronto.
*/
export declare class SpectrogramGenerator {
private params;
constructor(options?: SpectrogramParams);
/**
* Gera o espectrograma a partir de um array de áudio (single channel).
* Retorna um HTMLCanvasElement contendo o espectrograma desenhado.
*/
generateSpectrogram(audioData: Float32Array): HTMLCanvasElement;
/**
* Método extra para exportar o espectrograma gerado como uma imagem PNG de alta resolução.
* O parâmetro upscale define o fator de ampliação (padrão: 2).
*/
exportHighResPNG(audioData: Float32Array, upscale?: number): string;
private computeSpectrogram;
private createOffscreenCanvas;
/**
* Desenha o eixo de frequências (vertical) no canvas final.
*/
private drawFrequencyAxis;
private myFFT;
private applyWindow;
private freqToMel;
private melToFreq;
private generateDynamicFreqTicks;
/**
* Obtém cor (R,G,B) de 0..255 para um valor normalizado [0..1].
* Espera que existam funções colormap no escopo global (window).
* Ajuste se precisar de outra forma de resolver colormaps.
*/
private getColormapValue;
/**
* Método para detecção da frequência fundamental (pitch tracking).
* Utiliza um algoritmo simples de autocorrelação para encontrar o lag com
* maior correlação e, assim, estimar a frequência fundamental.
* Retorna a frequência fundamental em Hz.
*/
detectPitch(audioData: Float32Array): number;
/**
* Método para extração de harmônicos.
* Primeiro, detecta a frequência fundamental e, em seguida, calcula os harmônicos
* como múltiplos inteiros da frequência fundamental, respeitando o limite máximo fMax.
* Retorna um objeto contendo a frequência fundamental e um array com os harmônicos.
*/
extractHarmonics(audioData: Float32Array): {
fundamental: number;
harmonics: number[];
};
/**
* Aplica filtragem FIR no sinal de entrada de acordo com os parâmetros definidos.
* Suporta os filtros: lowpass, highpass, bandpass e notch.
*/
private applyFilter;
/**
* Gera um kernel FIR para um filtro passa-baixa (lowpass) usando o método windowed-sinc.
* @param cutoff Frequência de corte (Hz).
* @param sampleRate Taxa de amostragem (Hz).
* @param kernelSize Tamanho do kernel (deve ser ímpar).
*/
private generateLowpassKernel;
/**
* Gera um kernel FIR para um filtro passa-alta (highpass).
* A ideia é subtrair o kernel lowpass de um delta (impulso unitário).
* @param cutoff Frequência de corte (Hz).
* @param sampleRate Taxa de amostragem (Hz).
* @param kernelSize Tamanho do kernel (deve ser ímpar).
*/
private generateHighpassKernel;
/**
* Gera um kernel FIR para um filtro passa-banda (bandpass).
* O filtro passa-banda é obtido pela diferença entre dois filtros passa-baixa,
* com frequências de corte superior e inferior.
* @param lowCut Frequência de corte inferior (Hz).
* @param highCut Frequência de corte superior (Hz).
* @param sampleRate Taxa de amostragem (Hz).
* @param kernelSize Tamanho do kernel (deve ser ímpar).
*/
private generateBandpassKernel;
/**
* Gera um kernel FIR para um filtro notch (bandstop).
* O filtro notch é obtido subtraindo o filtro passa-banda de um delta (impulso unitário).
* @param lowCut Frequência de corte inferior (Hz) da banda a ser rejeitada.
* @param highCut Frequência de corte superior (Hz) da banda a ser rejeitada.
* @param sampleRate Taxa de amostragem (Hz).
* @param kernelSize Tamanho do kernel (deve ser ímpar).
*/
private generateNotchKernel;
}