interface AudioData {
    sampleRate: number;
    channelData: Float32Array[];
    duration: number;
    numberOfChannels: number;
    length: number;
}
type ChannelSelector = 'mix' | number | 'all' | readonly number[];
interface AmplitudeOptions {
    channel?: ChannelSelector;
    asDB?: boolean;
    reference?: number;
    truePeak?: boolean;
    oversamplingFactor?: number;
    interpolation?: 'linear' | 'cubic' | 'sinc';
}
interface ProgressOptions {
    onProgress?: (percent: number, message?: string) => void;
}
interface BaseAnalysisResult {
    sampleRate: number;
    duration: number;
    processingTime?: number;
}
interface WaveformAnalysisResult extends BaseAnalysisResult {
    amplitudes: Float32Array;
    timestamps?: Float32Array;
    frameCount: number;
    samplesPerFrame: number;
    framesPerSecond: number;
    maxAmplitude: number;
    averageAmplitude: number;
}
interface PeaksAnalysisResult extends BaseAnalysisResult {
    positions: Float32Array;
    amplitudes: Float32Array;
    times: Float32Array;
    maxAmplitude: number;
    averageAmplitude: number;
    count: number;
}
interface RMSAnalysisResult extends BaseAnalysisResult {
    value: number;
    valueDB?: number;
    channel: number;
}

interface PeaksOptions {
    count?: number;
    threshold?: number;
    channel?: ChannelSelector;
    minDistance?: number;
}
interface Peak {
    position: number;
    time: number;
    amplitude: number;
}
interface PeaksResult {
    peaks: Peak[];
    maxAmplitude: number;
    averageAmplitude: number;
}
declare function getPeaks(audio: AudioData, options?: PeaksOptions): PeaksResult;
declare function getRMS(audio: AudioData, options?: AmplitudeOptions): number;
declare function getPeakAmplitude(audio: AudioData, options?: AmplitudeOptions): number;

declare function getZeroCrossing(audio: AudioData, channel?: ChannelSelector): number;
interface WaveformOptions {
    framesPerSecond?: number;
    channel?: ChannelSelector;
    method?: 'rms' | 'peak' | 'average';
}
interface WaveformPoint {
    time: number;
    amplitude: number;
}
interface WaveformResult {
    waveform: WaveformPoint[];
    maxAmplitude: number;
    averageAmplitude: number;
    frameCount: number;
    samplesPerFrame: number;
}
declare function getWaveform(audio: AudioData, options?: WaveformOptions): WaveformResult;
interface WaveformAnalysisOptions extends ProgressOptions {
    framesPerSecond?: number;
    channel?: ChannelSelector;
    method?: 'rms' | 'peak' | 'average';
}
interface PeaksAnalysisOptions extends ProgressOptions {
    count?: number;
    threshold?: number;
    channel?: ChannelSelector;
    minDistance?: number;
}
interface RMSAnalysisOptions extends ProgressOptions {
    channel?: ChannelSelector;
    asDB?: boolean;
    reference?: number;
}
declare function getWaveformAnalysis(audio: AudioData, options?: WaveformAnalysisOptions): WaveformAnalysisResult;
declare function getPeaksAnalysis(audio: AudioData, options?: PeaksAnalysisOptions): PeaksAnalysisResult;
declare function getRMSAnalysis(audio: AudioData, options?: RMSAnalysisOptions): RMSAnalysisResult;

export { type Peak, type PeaksAnalysisOptions, type PeaksOptions, type PeaksResult, type RMSAnalysisOptions, type WaveformAnalysisOptions, type WaveformOptions, type WaveformPoint, type WaveformResult, getPeakAmplitude as getPeak, getPeakAmplitude, getPeaks, getPeaksAnalysis, getRMS, getRMSAnalysis, getWaveform, getWaveformAnalysis, getZeroCrossing };
