/**
 * Audio decoding for the Whistle engine: anything in, 16 kHz mono Float32 out.
 *
 * WAV (PCM 8/16/24/32-bit integer or 32/64-bit float, any sample rate and
 * channel count, including WAVE_FORMAT_EXTENSIBLE) and raw `pcm16` (PCM16LE
 * mono at `options.sampleRate`, default 16 kHz) are decoded here with no
 * dependencies. Compressed formats (mp3, m4a, ogg/opus, webm, flac, mp4 …) go
 * through ffmpeg — `FFMPEG_PATH`, then the optional `ffmpeg-static` package,
 * then `ffmpeg` on `PATH` — and are refused with a clear error when none of
 * those exists.
 *
 * @module voice/whistle/audio
 */
import type { TTSAudioFormat } from "../../types/index.js";
/** Formats Whistle decodes without any external tool. */
export declare const WHISTLE_NATIVE_FORMATS: readonly TTSAudioFormat[];
/** Formats Whistle decodes through ffmpeg when it is available. */
export declare const WHISTLE_FFMPEG_FORMATS: readonly TTSAudioFormat[];
/** The engine's fixed input rate. */
export declare const WHISTLE_SAMPLE_RATE = 16000;
/**
 * Decode `audio` to 16 kHz mono Float32 samples in [-1, 1]. `format` is a
 * hint; a RIFF/WAVE header is recognised whatever it says.
 */
export declare function decodeToWhistlePcm(audio: Buffer, format: TTSAudioFormat | undefined, sampleRate: number | undefined): Promise<Float32Array>;
/** PCM16LE frames (as streamed by microphones and the chunked adapter) → 16 kHz Float32. */
export declare function decodePcm16(buf: Buffer, sampleRate: number): Float32Array;
/**
 * Resample to 16 kHz: a box filter over each output sample's footprint when
 * downsampling (a cheap anti-alias), linear interpolation when upsampling.
 */
export declare function resampleTo16k(input: Float32Array, rate: number): Float32Array;
