ngx-audio-wave
Version:
A modern, accessible audio wave visualization component for Angular 22+ with comprehensive keyboard navigation and screen reader support.
111 lines (107 loc) • 6.5 kB
TypeScript
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 };