import { PlayOptions, PreloadResult, SoundDefinition, SoundHandle } from './sound-model.js'; export declare class SoundService { private _definitions; private _buffers; private _pending; private _context?; private _master?; private _volume; private _muted; private _unlockInstalled; /** Web Audio available? (SSR/tests: false — every call becomes a no-op.) */ get isSupported(): boolean; get volume(): number; get muted(): boolean; /** Make sounds known; re-registering a key replaces its definition. */ register(definitions: readonly SoundDefinition[]): void; isLoaded(key: string): boolean; /** * Fetch + decode the given keys, at most `concurrency` at a time. * Resolves always; failures are listed, not thrown. */ preload(keys: readonly string[], concurrency?: number): Promise; /** Play a loaded sound; silent no-op if unknown, not loaded or unsupported. */ play(key: string, options?: PlayOptions): SoundHandle | undefined; /** Play one of `prefix1 … prefixCount` at random (variant sounds). */ playRandom(prefix: string, count: number, options?: PlayOptions): SoundHandle | undefined; /** Master volume 0–1 (applies to every play, also running ones). */ setVolume(value: number): void; setMuted(muted: boolean): void; private _ensureContext; /** * Autoplay policy: the context starts `suspended` until a user gesture. * Resume on the first pointer/key gesture (capture phase, so it runs * before any app handler that might already want to play). */ private _installUnlock; private _applyMasterGain; private _load; } export declare const soundService: SoundService; //# sourceMappingURL=SoundService.d.ts.map