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;
}
