UNPKG

@sophialabs/spectro

Version:

lib para geração de espectrogramas

117 lines (116 loc) 4.87 kB
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; }