import * as i0 from "@angular/core"; type Note = [number, number]; type MelodyMode = 'menu' | 'game' | 'bubble'; type SampleConfig = { src: string; volume: number; }; type SampleMusicConfig = { src: string; volume: number; }; export declare class RetroAudioService { private context?; private masterGain?; private musicTimer?; private noteIndex; private activeMelody?; private pausedMelody?; private suspendTimer?; private readonly activeSamples; private readonly activeBufferSources; private sampleMusic?; private sampleMusicConfig?; private sampleMusicSource?; private sampleMusicGain?; private pausedSampleMusic?; private readonly defaultsReady; readonly enabled: import("@angular/core").WritableSignal; readonly musicEnabled: import("@angular/core").WritableSignal; readonly sfxEnabled: import("@angular/core").WritableSignal; readonly musicVolume: import("@angular/core").WritableSignal; readonly sfxVolume: import("@angular/core").WritableSignal; private readonly sampleCache; private readonly bufferCache; private readonly bufferPreloads; constructor(); setEnabled(value: boolean): void; setMusicEnabled(value: boolean): void; setSfxEnabled(value: boolean): void; setMusicVolume(value: number): void; setSfxVolume(value: number): void; startMenuMusic(): Promise; startGameMusic(): Promise; startBubbleBlitzMusic(): Promise; startMusic(mode?: MelodyMode): Promise; stopMusic(): void; flip(): void; match(): void; miss(): void; win(): void; lose(): void; simonPad(freq: number): void; simonStepOk(): void; simonRoundOk(): void; simonFail(): void; bubblePop(size?: number, combo?: number): void; bubbleCombo(combo?: number): void; bubbleInvalid(): void; bubbleSettle(drop?: number): void; bubbleShuffle(): void; bubbleFever(): void; bubbleFinish(): void; protected playSample(sample: SampleConfig, fallback: () => void): boolean; protected playBufferedSample(sample: SampleConfig): boolean; private readEnabled; private readBooleanSetting; private readVolumeSetting; private writeSetting; private normalizeVolume; protected preloadSample(src: string): void; protected preloadSampleBuffer(src: string): Promise; /** Sube a un valor audible los volumenes que quedaron en cero de una version * previa. La clave de storage conserva el nombre viejo a proposito: cambiarla * haria que la migracion se vuelva a correr y le pise el volumen a quien ya * lo eligio. */ private migrateAudioDefaults; /** Gancho para que un juego precargue sus propios samples en cuanto el usuario * interactua (antes, el navegador no deja tocar audio). Vacio por defecto. */ protected preloadGameSamples(): void; private canPlayMusic; private canPlaySfx; private ensureContext; private menuMelody; private savannaPulse; private gameMelody; private bubbleMelody; private bubbleAmbientPulse; protected sequence(notes: Note[], wave?: OscillatorType, gain?: number, intervalMs?: number): Promise; protected startSampleMusic(config: SampleMusicConfig): Promise; private stopSampleMusic; private applySampleMusicVolume; private sampleMusicVolume; private sampleVolume; private applyActiveSampleVolumes; protected stopActiveSamples(): void; private connectSampleMusic; private disconnectSampleMusicGraph; protected tone(freq: number, duration?: number, type?: OscillatorType, gainValue?: number): Promise; private musicTone; protected sweep(fromFreq: number, toFreq: number, duration?: number, type?: OscillatorType, gainValue?: number): Promise; protected filteredNoise(duration?: number, gainValue?: number, filterType?: BiquadFilterType, frequency?: number): Promise; private readonly handleVisibilityChange; private readonly handlePageHide; private readonly handlePageShow; private readonly handleUserActivation; private pauseForBackground; private resumeFromBackground; private wakeAudio; private resumeContext; private fadeMasterTo; private isDocumentVisible; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵprov: i0.ɵɵInjectableDeclaration; } export {};