import { AudioApi } from '../api';
import { BehaviorSubject, Observable } from 'rxjs';
import { AudioLoadedEvent, AudioPeakProcessorMessageEvent, AudioSwitchedEvent, Destroyable, MainAudioChangeEvent, OmpAudioTrack, SidecarAudioChangeEvent, SidecarAudioCreateEvent, SidecarAudioPeakProcessorMessageEvent, SidecarAudioRemoveEvent } from '../types';
import { AudioMeterStandard, VideoControllerApi } from '../video';
import { AudioInputOutputNode, OmpAudioRouterState, OmpMainAudioState } from '../video/model';
import { OmpAudioRouter } from '../video/audio-router';
import { SidecarAudioApi } from '../api/sidecar-audio-api';
export declare class AudioController implements AudioApi, Destroyable {
    readonly onAudioLoaded$: BehaviorSubject<AudioLoadedEvent | undefined>;
    readonly onAudioSwitched$: Observable<AudioSwitchedEvent>;
    readonly onMainAudioChange$: Observable<MainAudioChangeEvent | undefined>;
    readonly onMainAudioPeakProcessorMessage$: Observable<AudioPeakProcessorMessageEvent>;
    readonly onSidecarAudioCreate$: Observable<SidecarAudioCreateEvent>;
    readonly onSidecarAudioRemove$: Observable<SidecarAudioRemoveEvent>;
    readonly onSidecarAudioChange$: Observable<SidecarAudioChangeEvent>;
    readonly onSidecarAudioPeakProcessorMessage$: Observable<SidecarAudioPeakProcessorMessageEvent>;
    protected _videoController: VideoControllerApi;
    constructor(videoController: VideoControllerApi);
    getActiveAudioTrack(): OmpAudioTrack | undefined;
    getAudioTracks(): OmpAudioTrack[];
    setActiveAudioTrack(id: string): Observable<void>;
    getAudioContext(): AudioContext;
    getMainAudioSourceNode(): AudioNode;
    getMainAudioState(): OmpMainAudioState | undefined;
    getMainAudioRouter(): OmpAudioRouter | undefined;
    createMainAudioRouter(inputsNumber: number, outputsNumber?: number): Observable<OmpAudioRouterState>;
    createMainAudioRouterWithOutputsResolver(inputsNumber: number, outputsNumberResolver: (maxChannelCount: number) => number): Observable<OmpAudioRouterState>;
    createMainAudioPeakProcessor(audioMeterStandard?: AudioMeterStandard): Observable<Observable<AudioPeakProcessorMessageEvent>>;
    routeMainAudioRouterNodes(newAudioInputOutputNodes: AudioInputOutputNode[]): Observable<void>;
    getSidecarAudios(): SidecarAudioApi[];
    getSidecarAudio(id: string): SidecarAudioApi | undefined;
    createSidecarAudioTrack(track: Partial<OmpAudioTrack>): Observable<OmpAudioTrack>;
    createSidecarAudioTracks(tracks: Partial<OmpAudioTrack>[]): Observable<OmpAudioTrack[]>;
    activateSidecarAudioTracks(ids: string[], deactivateOthers: boolean | undefined): Observable<void>;
    deactivateSidecarAudioTracks(ids: string[]): Observable<void>;
    getActiveSidecarAudioTracks(): OmpAudioTrack[];
    getSidecarAudioTracks(): OmpAudioTrack[];
    removeSidecarAudioTracks(ids: string[]): Observable<void>;
    removeAllSidecarAudioTracks(): Observable<void>;
    createSidecarAudioRouter(sidecarAudioTrackId: string, inputsNumber?: number, outputsNumber?: number): Observable<OmpAudioRouterState>;
    routeSidecarAudioRouterNodes(sidecarAudioTrackId: string, newAudioInputOutputNodes: AudioInputOutputNode[]): Observable<void>;
    createSidecarAudioPeakProcessor(sidecarAudioTrackId: string, audioMeterStandard?: AudioMeterStandard): Observable<Observable<AudioPeakProcessorMessageEvent>>;
    exportMainAudioTrackToSidecar(mainAudioTrackId: string): Observable<OmpAudioTrack>;
    exportMainAudioTracksToSidecar(mainAudioTrackIds: string[]): Observable<OmpAudioTrack[]>;
    destroy(): void;
}
