export declare const SYSTEM_SOUNDS: readonly ["Tink", "Glass", "Pop", "Purr", "Ping", "Hero", "Submarine", "Blow", "Bottle", "Frog", "Funk", "Morse", "Sosumi", "Basso"]; export interface SoundConfig { /** "off" | "random" | a system sound name. Default: a soft Tink. */ replyPing: string; /** afplay volume 0..1 — pings stay gentle by default. */ volume: number; /** Spoken replies (speak mode) — PERSISTED so updates/respawns never * silently mute the koi again. */ speak: boolean; } export declare function soundConfig(): SoundConfig; export declare function setSoundConfig(patch: Partial): SoundConfig; /** Transpose a synth recipe by a frequency factor (0.5 = an octave down). */ export declare function transposeRecipe(notes: SynthNote[], factor: number): SynthNote[]; /** Fire-and-forget a named system sound (native on macOS, synthesized * equivalents elsewhere). `pitch` shifts it (0.5 ≈ an octave down — the * ack ping): playback rate on macOS, recipe transposition on synth. * Returns false if unknown. */ export declare function playSystemSound(name: string, volume?: number, pitch?: number): boolean; /** The soft chime when a reply lands. Honors config; "random" rotates gently. */ export declare function playReplyPing(): void; /** * The "heard you" chime — the SAME configured ping, an octave-ish LOWER, * played the moment the koi starts responding. Low tone = working on it, * the normal higher tone (playReplyPing) = done. */ export declare function playAckPing(): void; export interface SynthNote { /** Scientific pitch ("C4", "F#5", "Bb3") — or give freq directly. */ note?: string; freq?: number; /** Duration in ms (20..3000). 0 freq or note "rest" = silence. */ ms: number; wave?: "sine" | "square" | "triangle" | "saw" | "noise"; /** 0..1, default 0.5. */ gain?: number; } export declare function noteToFreq(note: string): number | null; /** Render a note sequence to a 16-bit mono WAV buffer. Null = invalid spec. */ export declare function synthWav(notes: SynthNote[]): Buffer | null; /** Synthesize and play a note sequence. Returns false on invalid spec. */ export declare function playSynth(notes: SynthNote[], volume?: number): boolean;