type FFTProviderType = 'webfft' | 'native' | 'custom';
interface FFTResult {
    complex: Float32Array;
    magnitude: Float32Array;
    phase: Float32Array;
    frequencies: Float32Array;
}
interface IFFTProvider {
    readonly name: string;
    readonly size: number;
    readonly sampleRate: number;
    fft(input: Float32Array): FFTResult | Promise<FFTResult>;
    dispose(): void;
    profile?(): Promise<void>;
}
interface FFTProviderConfig {
    type: FFTProviderType;
    fftSize: number;
    sampleRate: number;
    enableProfiling?: boolean;
    customProvider?: IFFTProvider;
}
declare class NativeFFTProvider implements IFFTProvider {
    readonly size: number;
    readonly sampleRate: number;
    private bitReversalTable;
    private twiddleFactorsReal;
    private twiddleFactorsImag;
    private scratchReal;
    private scratchImag;
    private frequencyBins;
    constructor(size: number, sampleRate: number);
    get name(): string;
    private isPowerOfTwo;
    private precomputeTables;
    fft(input: Float32Array): FFTResult;
    dispose(): void;
}
declare class FFTProviderFactory {
    static createProvider(config: FFTProviderConfig): Promise<IFFTProvider>;
    static getAvailableProviders(): FFTProviderType[];
}

export { type FFTProviderConfig, FFTProviderFactory, type FFTProviderType, type FFTResult, type IFFTProvider, NativeFFTProvider };
