import { AudioApi } from '../api';
import { BehaviorSubject, Observable } from 'rxjs';
import { AudioLoadedEvent, AudioPeakProcessorMessageEvent, AudioSwitchedEvent, AudioUpdatedEvent, Destroyable, MainAudioChangeEvent, MainAudioInputSoloMuteEvent, OmpAudioTrack, OmpAudioTrackCreateType, SidecarAudioChangeEvent, SidecarAudioCreateEvent, SidecarAudioInputSoloMuteEvent, SidecarAudioLoadedEvent, SidecarAudioPeakProcessorMessageEvent, SidecarAudioRemoveEvent, SidecarAudiosChangeEvent, SidecarAudioVolumeChangeEvent, VolumeChangeEvent } from '../types';
import { AudioMeterStandard, OmpAudioRouterState, OmpAudioRoutingConnection, OmpAudioRoutingPath, OmpMainAudioState, OmpSidecarAudioState, VideoControllerApi } from '../video';
import { OmpAudioRouter } from '../video/audio-router';
import { SidecarAudioApi } from '../api/sidecar-audio-api';
import { OmpAudioEffectFactory, OmpAudioEffectFilter, OmpAudioEffectParam } from './audio-effects';
import { OmpAudioRoutingInputType, OmpMainAudioInputSoloMuteState, OmpSidecarAudioInputSoloMuteState } from '../video/model';
import { OmpAudioEffectsGraphConnection, OmpAudioEffectsGraphDef } from './model';
export declare class AudioController implements AudioApi, Destroyable {
    readonly onAudioLoaded$: BehaviorSubject<AudioLoadedEvent | undefined>;
    readonly onAudioSwitched$: Observable<AudioSwitchedEvent>;
    readonly onAudioUpdated$: Observable<AudioUpdatedEvent>;
    readonly onAudioOutputVolumeChange$: Observable<VolumeChangeEvent>;
    readonly onMainAudioChange$: Observable<MainAudioChangeEvent | undefined>;
    readonly onMainAudioPeakProcessorMessage$: Observable<AudioPeakProcessorMessageEvent>;
    readonly onMainAudioInputSoloMute$: Observable<MainAudioInputSoloMuteEvent | undefined>;
    readonly onSidecarAudioCreate$: Observable<SidecarAudioCreateEvent>;
    readonly onSidecarAudioLoaded$: Observable<SidecarAudioLoadedEvent>;
    readonly onSidecarAudioRemove$: Observable<SidecarAudioRemoveEvent>;
    readonly onSidecarAudioChange$: Observable<SidecarAudioChangeEvent>;
    readonly onSidecarAudioVolumeChange$: Observable<SidecarAudioVolumeChangeEvent>;
    readonly onSidecarAudioPeakProcessorMessage$: Observable<SidecarAudioPeakProcessorMessageEvent>;
    readonly onSidecarAudioInputSoloMute$: Observable<SidecarAudioInputSoloMuteEvent>;
    readonly onSidecarAudiosChange$: Observable<SidecarAudiosChangeEvent>;
    protected _videoController: VideoControllerApi;
    constructor(videoController: VideoControllerApi);
    getActiveAudioTrack(): OmpAudioTrack | undefined;
    getAudioTracks(): OmpAudioTrack[];
    setActiveAudioTrack(id: string): Observable<void>;
    updateAudioTrack(audioTrack: OmpAudioTrack): Observable<void>;
    getAudioContext(): AudioContext;
    toggleMainAudioRouterSolo(routingPath: OmpAudioRoutingInputType): Observable<void>;
    toggleMainAudioRouterMute(routingPath: OmpAudioRoutingInputType): Observable<void>;
    getAudioOutputVolume(): number;
    isAudioOutputMuted(): boolean;
    setAudioOutputMuted(muted: boolean): Observable<void>;
    toggleAudioOutputMuteUnmute(): Observable<void>;
    muteAudioOutput(): Observable<void>;
    unmuteAudioOutput(): Observable<void>;
    setAudioOutputVolume(volume: number): Observable<void>;
    getMainAudioNode(): AudioNode | undefined;
    getMainAudioState(): OmpMainAudioState | undefined;
    getMainAudioRouter(): OmpAudioRouter | undefined;
    getMainAudioInputSoloMuteState(): OmpMainAudioInputSoloMuteState | undefined;
    getMainAudioRouterInitialRoutingConnections(): OmpAudioRoutingConnection[] | undefined;
    setMainAudioRouterInitialRoutingConnections(connections: OmpAudioRoutingConnection[]): Observable<void>;
    createMainAudioRouter(inputsNumber: number, outputsNumber?: number): Observable<OmpAudioRouterState>;
    createMainAudioRouterWithOutputsResolver(inputsNumber: number, outputsNumberResolver: (maxChannelCount: number) => number): Observable<OmpAudioRouterState>;
    createMainAudioPeakProcessor(audioMeterStandard?: AudioMeterStandard): Observable<Observable<AudioPeakProcessorMessageEvent>>;
    updateMainAudioRouterConnections(connections: OmpAudioRoutingConnection[]): Observable<void>;
    setMainAudioEffectsGraphs(effectsGraphDef: OmpAudioEffectsGraphDef, effectsGraphConnection: OmpAudioEffectsGraphConnection): Observable<void>;
    removeMainAudioEffectsGraphs(effectsGraphConnection: OmpAudioEffectsGraphConnection): Observable<void>;
    setMainAudioEffectsParams(param: OmpAudioEffectParam, effectGraphConnection: OmpAudioEffectsGraphConnection, filter?: OmpAudioEffectFilter): Observable<void>;
    getSidecarAudios(): SidecarAudioApi[];
    getSidecarAudio(id: string): SidecarAudioApi | undefined;
    getSidecarAudioState(id: string): OmpSidecarAudioState | undefined;
    getSidecarAudioInputSoloMuteState(id: string): OmpSidecarAudioInputSoloMuteState | undefined;
    getSidecarAudioRouterInitialRoutingConnections(id: string): OmpAudioRoutingConnection[] | undefined;
    setSidecarAudioRouterInitialRoutingConnections(id: string, connections: OmpAudioRoutingConnection[]): Observable<void>;
    createSidecarAudioTrack(track: OmpAudioTrackCreateType): Observable<OmpAudioTrack>;
    createSidecarAudioTracks(tracks: OmpAudioTrackCreateType[]): Observable<OmpAudioTrack[]>;
    activateSidecarAudioTracks(ids: string[] | undefined, deactivateOthers: boolean | undefined): Observable<void>;
    deactivateSidecarAudioTracks(ids: string[] | undefined): Observable<void>;
    muteSidecar(ids: string[] | undefined): Observable<void>;
    setSidecarVolume(volume: number, ids: string[] | undefined): Observable<void>;
    setSidecarMuted(muted: boolean, ids: string[] | undefined): Observable<void>;
    unmuteSidecar(ids: string[] | undefined): Observable<void>;
    getActiveSidecarAudioTracks(): OmpAudioTrack[];
    getSidecarAudioTracks(): OmpAudioTrack[];
    removeSidecarAudioTracks(ids: string[]): Observable<void>;
    removeAllSidecarAudioTracks(): Observable<void>;
    createSidecarAudioRouter(sidecarAudioTrackId: string, inputsNumber?: number, outputsNumber?: number): Observable<OmpAudioRouterState>;
    updateSidecarAudioRouterConnections(sidecarAudioTrackId: string, connections: OmpAudioRoutingConnection[]): Observable<void>;
    setSidecarAudioEffectsGraph(sidecarAudioTrackId: string, effectsGraphDef: OmpAudioEffectsGraphDef, effectsGraphConnection: OmpAudioEffectsGraphConnection): Observable<void>;
    removeSidecarAudioEffectsGraphs(sidecarAudioTrackId: string, effectsGraphConnection: OmpAudioEffectsGraphConnection): Observable<void>;
    setSidecarAudioEffectsParams(sidecarAudioTrackId: string, param: OmpAudioEffectParam, effectGraphConnection: OmpAudioEffectsGraphConnection, filter?: {
        routingPath?: Partial<OmpAudioRoutingPath>;
    } & OmpAudioEffectFilter): Observable<void>;
    createSidecarAudioPeakProcessor(sidecarAudioTrackId: string, audioMeterStandard?: AudioMeterStandard): Observable<Observable<AudioPeakProcessorMessageEvent>>;
    exportMainAudioTrackToSidecar(mainAudioTrackId: string): Observable<OmpAudioTrack>;
    exportMainAudioTracksToSidecar(mainAudioTrackIds: string[]): Observable<OmpAudioTrack[]>;
    toggleSidecarAudioRouterSolo(sidecarAudioTrackId: string, routingPath: OmpAudioRoutingInputType): Observable<void>;
    toggleSidecarAudioRouterMute(sidecarAudioTrackId: string, routingPath: OmpAudioRoutingInputType): Observable<void>;
    registerAudioEffect(effectType: string, effectFactory: OmpAudioEffectFactory): void;
    destroy(): void;
}
