/**
 * audio-inspect ライブラリの型定義
 */

/**
 * 音声データの構造
 */
interface AudioData {
    /** サンプルレート（Hz） */
    sampleRate: number;
    /** チャンネルごとのオーディオデータ */
    channelData: Float32Array[];
    /** 音声の長さ（秒） */
    duration: number;
    /** チャンネル数 */
    numberOfChannels: number;
    /** サンプル数 */
    length: number;
}
/**
 * 振幅測定のオプション
 */
interface AmplitudeOptions {
    channel?: number;
    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;
}
/**
 * 新しいWaveform解析結果（Float32Array対応）
 */
interface WaveformAnalysisResult extends BaseAnalysisResult {
    /** 振幅データ（直接使用可能） */
    amplitudes: Float32Array;
    /** タイムスタンプ（オプショナル） */
    timestamps?: Float32Array;
    /** メタデータ */
    frameCount: number;
    samplesPerFrame: number;
    framesPerSecond: number;
    /** 統計情報 */
    maxAmplitude: number;
    averageAmplitude: number;
}
/**
 * 新しいPeaks解析結果（Float32Array対応）
 */
interface PeaksAnalysisResult extends BaseAnalysisResult {
    /** サンプル位置 */
    positions: Float32Array;
    /** ピーク振幅 */
    amplitudes: Float32Array;
    /** 時間（秒） */
    times: Float32Array;
    /** 統計情報 */
    maxAmplitude: number;
    averageAmplitude: number;
    count: number;
}
/**
 * 新しいRMS解析結果（統一されたインターフェース）
 */
interface RMSAnalysisResult extends BaseAnalysisResult {
    /** RMS値 */
    value: number;
    /** デシベル値（オプショナル） */
    valueDB?: number;
    /** 処理したチャンネル */
    channel: number;
}

/**
 * ピーク検出のオプション
 */
interface PeaksOptions {
    /** 抽出するピークの数（デフォルト: 100） */
    count?: number;
    /** ピーク検出の閾値（0-1、デフォルト: 0.1） */
    threshold?: number;
    /** 解析するチャンネル（デフォルト: 0、-1で全チャンネルの平均） */
    channel?: number;
    /** 最小ピーク間距離（サンプル数、デフォルト: サンプルレート/100） */
    minDistance?: number;
}
/**
 * ピーク情報
 */
interface Peak {
    /** ピークの位置（サンプル数） */
    position: number;
    /** ピークの時間位置（秒） */
    time: number;
    /** ピークの振幅（0-1） */
    amplitude: number;
}
/**
 * ピーク検出結果
 */
interface PeaksResult {
    /** 検出されたピーク */
    peaks: Peak[];
    /** 最大振幅 */
    maxAmplitude: number;
    /** 平均振幅 */
    averageAmplitude: number;
}
/**
 * ピーク検出を行う
 */
declare function getPeaks(audio: AudioData, options?: PeaksOptions): PeaksResult;
/**
 * RMS（Root Mean Square）を計算
 */
declare function getRMS(audio: AudioData, optionsOrChannel?: AmplitudeOptions | number): number;
/**
 * ピーク振幅を計算
 */
declare function getPeakAmplitude(audio: AudioData, options?: AmplitudeOptions): number;

/**
 * ゼロクロッシング率を計算
 */
declare function getZeroCrossing(audio: AudioData, channel?: number): number;
/**
 * 波形データ取得のオプション
 */
interface WaveformOptions {
    /** 1秒あたりのサンプル数（解像度、デフォルト: 60） */
    framesPerSecond?: number;
    /** 解析するチャンネル（デフォルト: 0、-1で全チャンネルの平均） */
    channel?: number;
    /** 振幅の計算方法（デフォルト: 'rms'） */
    method?: 'rms' | 'peak' | 'average';
}
/**
 * 波形データポイント
 */
interface WaveformPoint {
    /** 時間位置（秒） */
    time: number;
    /** 振幅値（0-1） */
    amplitude: number;
}
/**
 * 波形データ取得結果
 */
interface WaveformResult {
    /** 波形データポイントの配列 */
    waveform: WaveformPoint[];
    /** 最大振幅 */
    maxAmplitude: number;
    /** 平均振幅 */
    averageAmplitude: number;
    /** フレーム数 */
    frameCount: number;
    /** フレームあたりのサンプル数 */
    samplesPerFrame: number;
}
/**
 * 時間軸に沿った波形データを取得
 */
declare function getWaveform(audio: AudioData, options?: WaveformOptions): WaveformResult;
/**
 * 新しいWaveform解析オプション（プログレス通知対応）
 */
interface WaveformAnalysisOptions extends ProgressOptions {
    /** 1秒あたりのサンプル数（解像度、デフォルト: 60） */
    framesPerSecond?: number;
    /** 解析するチャンネル（デフォルト: 0、-1で全チャンネルの平均） */
    channel?: number;
    /** 振幅の計算方法（デフォルト: 'rms'） */
    method?: 'rms' | 'peak' | 'average';
}
/**
 * 新しいPeaks解析オプション（プログレス通知対応）
 */
interface PeaksAnalysisOptions extends ProgressOptions {
    /** 抽出するピークの数（デフォルト: 100） */
    count?: number;
    /** ピーク検出の閾値（0-1、デフォルト: 0.1） */
    threshold?: number;
    /** 解析するチャンネル（デフォルト: 0、-1で全チャンネルの平均） */
    channel?: number;
    /** 最小ピーク間距離（サンプル数、デフォルト: サンプルレート/100） */
    minDistance?: number;
}
/**
 * 新しいRMS解析オプション（プログレス通知対応）
 */
interface RMSAnalysisOptions extends ProgressOptions {
    channel?: number;
    asDB?: boolean;
    reference?: number;
}
/**
 * 新しいWaveform解析（Float32Array対応）
 */
declare function getWaveformAnalysis(audio: AudioData, options?: WaveformAnalysisOptions): WaveformAnalysisResult;
/**
 * 新しいPeaks解析（Float32Array対応）
 */
declare function getPeaksAnalysis(audio: AudioData, options?: PeaksAnalysisOptions): PeaksAnalysisResult;
/**
 * 新しいRMS解析（統一されたインターフェース）
 */
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 };
