export interface PlayerCommand {
    cmd: string;
    args: string[];
}
/** Injection seam for {@link playerCommandsFor} — defaults to real PATH/tools lookups. */
export interface PlayerLookup {
    which?: (bin: string) => string | null;
    ffmpeg?: () => string | null;
}
/**
 * Build the ordered list of playback commands to try for `filePath` on the
 * given platform. Pure + injectable so the selection logic is testable without
 * spawning anything.
 *
 * - darwin: `afplay` (always present on macOS).
 * - win32: PowerShell `Media.SoundPlayer.PlaySync()` (no extra deps).
 * - linux/other POSIX: `paplay` (PulseAudio) → `aplay` (ALSA) → the bundled
 *   static `ffmpeg` (`-f pulse` then `-f alsa`). Empty result means nothing is
 *   available and the caller should surface an install hint.
 */
export declare function playerCommandsFor(platform: NodeJS.Platform, filePath: string, lookup?: PlayerLookup): PlayerCommand[];
export interface PlayAudioOptions {
    signal?: AbortSignal;
}
/**
 * Play `filePath` through the speakers, trying each candidate command in order
 * and returning on the first clean exit. Throws an actionable Error if no
 * player exists or every candidate fails (with the collected stderr).
 */
export declare function playAudioFile(filePath: string, options?: PlayAudioOptions): Promise<void>;
/** Best-effort temp-file cleanup used by callers after playback. */
export declare function removeTempFile(filePath: string): Promise<void>;
