import { Destroyable, OmpAudioTrack, SidecarAudioLoadedEvent, SidecarAudioLoadingEvent, VideoTimeChangeEvent, VolumeChangeEvent } from '../types';
import { BehaviorSubject, Observable, Subject } from 'rxjs';
import { OmpAudioRouter } from './audio-router';
import { SidecarAudioApi } from '../api/sidecar-audio-api';
import { AudioRouterApi } from '../api/audio-router-api';
import { OmpAudioPeakProcessor } from './audio-peak-processor';
import { AudioEffectBundle, AudioMeterStandard, OmpSidecarAudioInputSoloMuteState, OmpSidecarAudioState } from './model';
import { MediaElementPlayback } from './media-element-playback';
import { OmpAudioElement } from '../media-element/omp-media-element';
import { VideoControllerApi } from './video-controller-api';
import { OmpAudioEffectFilter, OmpAudioEffectsGraphDef, OmpAudioEffectParam, OmpAudioEffectsGraph } from '../audio';
import { OmpAudioEffectsGraphConnection, OmpAudioEffectsSlot } from '../audio/model';
export declare abstract class BaseOmpSidecarAudio implements SidecarAudioApi, Destroyable {
    readonly onLoading$: Subject<SidecarAudioLoadingEvent>;
    readonly onLoaded$: BehaviorSubject<SidecarAudioLoadedEvent | undefined>;
    readonly onVideoCurrentTimeBuffering$: BehaviorSubject<boolean>;
    readonly onStateChange$: Subject<OmpSidecarAudioState>;
    readonly onInputSoloMute$: Subject<OmpSidecarAudioInputSoloMuteState>;
    readonly onVolumeChange$: Subject<VolumeChangeEvent>;
    protected _videoController: VideoControllerApi;
    protected _mediaElementPlayback: MediaElementPlayback;
    protected _channelsNumber: number | undefined;
    protected _loaded: boolean;
    protected _audioTrack: OmpAudioTrack;
    protected _audioInputIfNode: GainNode;
    protected _audioRouter?: OmpAudioRouter;
    protected _audioPeakProcessor?: OmpAudioPeakProcessor;
    protected _muted: boolean;
    protected _volume: number;
    protected _sourceSlot: OmpAudioEffectsSlot;
    protected _sourceSlotEffectsGraph?: OmpAudioEffectsGraph;
    protected _isSourceSlotEffectAttaching: boolean;
    protected _destinationSlot: OmpAudioEffectsSlot;
    protected _destinationSlotEffectsGraph?: OmpAudioEffectsGraph;
    protected _isDestinationSlotEffectAttaching: boolean;
    protected _destroyed$: Subject<void>;
    protected constructor(videoController: VideoControllerApi, audioTrack: OmpAudioTrack);
    abstract loadSource(): Observable<SidecarAudioLoadedEvent>;
    protected abstract audioPlay(): void;
    protected abstract audioPause(): void;
    protected playOrPause(): void;
    protected emitStateChange(): void;
    protected emitInputSoloMute(): void;
    createAudioRouter(inputsNumber?: number, outputsNumber?: number): OmpAudioRouter;
    createAudioPeakProcessor(audioMeterStandard?: AudioMeterStandard): Observable<OmpAudioPeakProcessor>;
    protected createInterleavedEffectsSlot(): void;
    setEffectsGraph(effectsGraphDef: OmpAudioEffectsGraphDef, effectsGraphConnection: OmpAudioEffectsGraphConnection): Observable<void>;
    removeEffectsGraph(effectsGraphConnection: OmpAudioEffectsGraphConnection): void;
    setAudioEffectsParams(param: OmpAudioEffectParam, effectGraphConnection: OmpAudioEffectsGraphConnection, filter?: OmpAudioEffectFilter): void;
    protected validateLoaded(): void;
    get isActive(): boolean;
    activate(): void;
    deactivate(): void;
    getVolume(): number;
    setVolume(volume: number): void;
    mute(): void;
    unmute(): void;
    isMuted(): boolean;
    toggleMuteUnmute(): void;
    setMuted(muted?: boolean): void;
    protected updateAudioInputIfVolume(): void;
    protected setActiveInactive(value: boolean): void;
    protected getChannelsNumber(): number;
    getSidecarAudioState(): OmpSidecarAudioState;
    getSidecarAudioInputSoloMuteState(): OmpSidecarAudioInputSoloMuteState;
    get audioTrack(): OmpAudioTrack;
    get audioRouter(): AudioRouterApi | undefined;
    get audioPeakProcessor(): OmpAudioPeakProcessor | undefined;
    destroy(): void;
    protected _resolveRouterSourceNode(): AudioNode;
    protected getInterleavedAudioEffects(): AudioEffectBundle[];
}
export declare class OmpSidecarAudio extends BaseOmpSidecarAudio {
    static readonly audioDriftHistoryMaxLength = 15;
    static readonly audioDriftCorrectionThresholdInSeconds = 0.01;
    protected _mediaElementAudioSourceNode?: MediaElementAudioSourceNode;
    protected _ompAudioElement: OmpAudioElement;
    protected _audioDriftHistory: number[];
    protected _isBrowserFirefox: boolean;
    constructor(videoController: VideoControllerApi, audioTrack: OmpAudioTrack);
    protected initEventHandlers(): void;
    loadSource(): Observable<SidecarAudioLoadedEvent>;
    protected getCurrentTime(): number;
    protected getDuration(): number;
    protected checkAudioDriftAndTrySync(event: VideoTimeChangeEvent): void;
    protected syncWithVideo(): void;
    protected seekToTime(time: number): void;
    protected audioPlay(): void;
    protected audioPause(): void;
    destroy(): void;
}
export declare class OmpSidecarBufferedAudio extends BaseOmpSidecarAudio {
    protected _originalAudioBuffer?: AudioBuffer;
    protected _audioBuffer?: AudioBuffer;
    protected _audioBufferSourceNode?: AudioBufferSourceNode;
    protected _audioStartTime?: number;
    protected _audioOffset?: number;
    destroy(): void;
    constructor(videoController: VideoControllerApi, audioTrack: OmpAudioTrack);
    protected initEventHandlers(): void;
    loadSource(): Observable<SidecarAudioLoadedEvent>;
    protected createSourceNode(): void;
    protected stopSourceNode(): void;
    protected audioPlay(): void;
    protected audioPause(): void;
}
