import * as _angular_core from '@angular/core';
import { OnDestroy } from '@angular/core';
import { SafeUrl } from '@angular/platform-browser';

declare class NgxAudioWave implements OnDestroy {
    readonly audioSrc: _angular_core.InputSignal<string | SafeUrl>;
    readonly color: _angular_core.InputSignal<string>;
    readonly height: _angular_core.InputSignalWithTransform<number, unknown>;
    readonly gap: _angular_core.InputSignalWithTransform<number, unknown>;
    readonly rounded: _angular_core.InputSignalWithTransform<boolean, unknown>;
    readonly hideBtn: _angular_core.InputSignalWithTransform<boolean, unknown>;
    readonly skip: _angular_core.InputSignalWithTransform<number, unknown>;
    readonly volume: _angular_core.InputSignalWithTransform<number, unknown>;
    readonly playbackRate: _angular_core.InputSignalWithTransform<number, unknown>;
    readonly loop: _angular_core.InputSignalWithTransform<boolean, unknown>;
    readonly samples: _angular_core.InputSignalWithTransform<number, unknown>;
    readonly ariaLabel: _angular_core.InputSignal<string>;
    readonly playButtonLabel: _angular_core.InputSignal<string>;
    readonly pauseButtonLabel: _angular_core.InputSignal<string>;
    readonly progressBarLabel: _angular_core.InputSignal<string>;
    readonly isPaused: _angular_core.WritableSignal<boolean>;
    readonly isLoading: _angular_core.WritableSignal<boolean>;
    readonly hasError: _angular_core.WritableSignal<boolean>;
    readonly currentVolume: _angular_core.WritableSignal<number>;
    readonly currentPlaybackRate: _angular_core.WritableSignal<number>;
    readonly isLooping: _angular_core.WritableSignal<boolean>;
    readonly progressText: _angular_core.Signal<string>;
    readonly statusText: _angular_core.Signal<"Loading audio" | "Error loading audio" | "Audio paused" | "Audio playing">;
    readonly exactPlayedPercent: _angular_core.Signal<number>;
    readonly exactCurrentTime: _angular_core.WritableSignal<number>;
    readonly exactDuration: _angular_core.WritableSignal<number>;
    private readonly platformId;
    private readonly isPlatformBrowser;
    private readonly domSanitizer;
    private readonly httpClient;
    protected readonly gradientId: string;
    protected readonly audioElementSrc: _angular_core.Signal<string>;
    protected readonly normalizedData: _angular_core.WritableSignal<number[]>;
    protected readonly isHovering: _angular_core.WritableSignal<boolean>;
    protected readonly hoverOffset: _angular_core.WritableSignal<number>;
    protected readonly progressOffset: _angular_core.Signal<string>;
    protected readonly visualHeight: _angular_core.Signal<number>;
    protected readonly visualGap: _angular_core.Signal<number>;
    protected readonly visualSamples: _angular_core.Signal<number>;
    protected readonly width: _angular_core.Signal<number>;
    private audioRef;
    private audioFetchSubscription?;
    private audioLoadId;
    private animationFrameId;
    private lastNonZeroVolume;
    constructor();
    ngOnDestroy(): void;
    play(time?: number): void;
    pause(): void;
    stop(): void;
    setVolume(volume: number): void;
    /** @deprecated Use setVolume(0) instead. */
    mute(): void;
    /** @deprecated Use setVolume(previousNonZeroVolume) with your own stored value instead. */
    unmute(): void;
    /** @deprecated Use setVolume(currentVolume() === 0 ? value : 0) instead. */
    toggleMute(): void;
    setPlaybackRate(rate: number): void;
    /** @deprecated Use setPlaybackRate(1) instead. */
    resetPlaybackRate(): void;
    /** @deprecated Use setPlaybackRate(currentPlaybackRate() + 0.25) instead. */
    increasePlaybackRate(): void;
    /** @deprecated Use setPlaybackRate(currentPlaybackRate() - 0.25) instead. */
    decreasePlaybackRate(): void;
    setLoop(loop: boolean): void;
    /** @deprecated Use setLoop(true) instead. */
    enableLoop(): void;
    /** @deprecated Use setLoop(false) instead. */
    disableLoop(): void;
    /** @deprecated Use setLoop(!isLooping()) instead. */
    toggleLoop(): void;
    setTime(mouseEvent: MouseEvent): void;
    protected setHoverPosition(mouseEvent: MouseEvent): void;
    protected clearHoverPosition(): void;
    private calculatePercent;
    private clampVolume;
    private clampPlaybackRate;
    private getPointerPosition;
    private clampTime;
    private seekTo;
    private updateCurrentTime;
    private getAudioElement;
    private startCurrentTimeSync;
    private stopCurrentTimeSync;
    private fetchAudio;
    private decodeAudio;
    private sanitizeAudioSrc;
    protected pauseChange(event: Event): void;
    protected durationChange(event: Event): void;
    protected timeChange(event: Event): void;
    protected onKeyDown(event: KeyboardEvent): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxAudioWave, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxAudioWave, "ngx-audio-wave", never, { "audioSrc": { "alias": "audioSrc"; "required": true; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; "hideBtn": { "alias": "hideBtn"; "required": false; "isSignal": true; }; "skip": { "alias": "skip"; "required": false; "isSignal": true; }; "volume": { "alias": "volume"; "required": false; "isSignal": true; }; "playbackRate": { "alias": "playbackRate"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "samples": { "alias": "samples"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "playButtonLabel": { "alias": "playButtonLabel"; "required": false; "isSignal": true; }; "pauseButtonLabel": { "alias": "pauseButtonLabel"; "required": false; "isSignal": true; }; "progressBarLabel": { "alias": "progressBarLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

/**
 * Filters the AudioBuffer retrieved from an external source.
 */
declare function filterAudioBufferData(audioBuffer: AudioBuffer, samples: number): number[];
/**
 * Normalizes audio data to the 0..1 range used by the SVG bars.
 */
declare function normalizeAudioData(filteredData: number[]): number[];

export { NgxAudioWave, filterAudioBufferData, normalizeAudioData };
