import * as _angular_core from '@angular/core';
import { OnInit, OnDestroy, OnChanges, SimpleChanges, EnvironmentProviders } from '@angular/core';
import { BehaviorSubject, Subject } from 'rxjs';
import { PlayerComponent } from '@ngx-telly/player';

declare class VuMeterService {
    show$: BehaviorSubject<boolean>;
    reconfigure$: Subject<void>;
    on(): void;
    off(): void;
    toggle(): void;
    reconfigure(): void;
    isVisible(): boolean;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<VuMeterService, never>;
    static ɵprov: _angular_core.ɵɵInjectableDeclaration<VuMeterService>;
}

interface Level {
    channel: string;
    rms: number;
    db: number;
    normalized: number;
    peak: number;
}
declare class TellyVuMeterComponent implements OnInit, OnDestroy, OnChanges {
    display: string;
    fftSize: number;
    channelCount: number;
    channelNames: string[];
    peakHoldTime: number;
    peakDecayRate: number;
    peakAccelerationFactor: number;
    updateRateMs: number;
    readonly service: VuMeterService;
    readonly player: PlayerComponent;
    private readonly subscription;
    private readonly audioNodes;
    private readonly analysisState;
    private gestureAbortController?;
    private reconfigureTimeout?;
    private destroyed;
    readonly levels: _angular_core.WritableSignal<Level[]>;
    readonly initializing: _angular_core.WritableSignal<boolean>;
    readonly reconfiguring: _angular_core.WritableSignal<boolean>;
    readonly showVolumeWarning: _angular_core.WritableSignal<boolean>;
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    ngOnDestroy(): void;
    private setupVisibilitySubscription;
    private reconfigure;
    private updateChannelCount;
    private initializeAudioAndStartAnalysis;
    private initializeAudioContext;
    private waitForUserGesture;
    private waitForAudioTrack;
    private usesCaptureStream;
    private reconnectSource;
    private connectAudioGraphAndStartAnalysis;
    private buildAudioGraph;
    private startAnalysis;
    private runAnalysisLoop;
    private calculateChannelLevel;
    private updatePeakHold;
    private stopAnalysis;
    private getChannelNames;
    private disconnectAudioGraph;
    private cleanupAudioContext;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<TellyVuMeterComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<TellyVuMeterComponent, "telly-vu-meter", never, { "fftSize": { "alias": "fftSize"; "required": false; }; "channelCount": { "alias": "channelCount"; "required": false; }; "channelNames": { "alias": "channelNames"; "required": false; }; "peakHoldTime": { "alias": "peakHoldTime"; "required": false; }; "peakDecayRate": { "alias": "peakDecayRate"; "required": false; }; "peakAccelerationFactor": { "alias": "peakAccelerationFactor"; "required": false; }; "updateRateMs": { "alias": "updateRateMs"; "required": false; }; }, {}, never, never, true, never>;
}

declare class TellyVuMeterToggleComponent {
    icon: _angular_core.InputSignal<string>;
    size: _angular_core.InputSignal<string>;
    service: VuMeterService;
    title: string;
    onClick(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<TellyVuMeterToggleComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<TellyVuMeterToggleComponent, "telly-vu-meter-toggle", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

declare function provideTellyVuMeter(): EnvironmentProviders;

export { TellyVuMeterComponent, TellyVuMeterToggleComponent, VuMeterService, provideTellyVuMeter };
export type { Level };
