import { Api } from './api'; import { Observable } from 'rxjs'; import { AudioLoadedEvent, AudioPeakProcessorMessageEvent, AudioSwitchedEvent, AudioUpdatedEvent, MainAudioChangeEvent, MainAudioInputSoloMuteEvent, OmpAudioTrack, OmpAudioTrackCreateType, SidecarAudioChangeEvent, SidecarAudioCreateEvent, SidecarAudioInputSoloMuteEvent, SidecarAudioLoadedEvent, SidecarAudioPeakProcessorMessageEvent, SidecarAudioRemoveEvent, SidecarAudiosChangeEvent, SidecarAudioVolumeChangeEvent, VolumeChangeEvent } from '../types'; import { AudioMeterStandard, OmpAudioRouterState, OmpAudioRoutingConnection, OmpMainAudioState, OmpSidecarAudioState } from '../video'; import { OmpAudioRouter } from '../video/audio-router'; import { SidecarAudioApi } from './sidecar-audio-api'; import { OmpAudioEffectFactory, OmpAudioEffectFilter, OmpAudioEffectParam } from '../audio'; import { OmpAudioRoutingInputType, OmpMainAudioInputSoloMuteState, OmpSidecarAudioInputSoloMuteState } from '../video/model'; import { OmpAudioEffectsGraphConnection, OmpAudioEffectsGraphDef } from '../audio/model'; export interface AudioApi extends Api { /** * Fires on audio load. Initial value is undefined. * Always emits the current value on subscription. * * @readonly */ onAudioLoaded$: Observable; /** * Fires on audio track switched * @readonly */ onAudioSwitched$: Observable; /** * Fires on audio track updated * @readonly */ onAudioUpdated$: Observable; /** * Fires on master audio output volume change * @readonly */ onAudioOutputVolumeChange$: Observable; /** * @returns available audio tracks */ getAudioTracks(): OmpAudioTrack[]; /** * @returns current active audio track */ getActiveAudioTrack(): OmpAudioTrack | undefined; /** * Sets active audio track * @param id {@link OmpAudioTrack} id */ setActiveAudioTrack(id: string): Observable; /** * Updates loaded audio track. Updateable properties are: {@link OmpAudioTrack.label}, {@link OmpAudioTrack.language}. Other changes will be ignored. * @param audioTrack */ updateAudioTrack(audioTrack: OmpAudioTrack): Observable; /** * @returns {@link AudioContext} */ getAudioContext(): AudioContext; /** * Sets master output audio volume. Master output volume control is located in chain after main audio and sidecar audios. It affects main audio level and sidecar audios levels. * @param volume volume level */ setAudioOutputVolume(volume: number): Observable; /** * @returns master output audio volume */ getAudioOutputVolume(): number; /** * Sets master output audio muted. Master output volume control is located in chain after main audio and sidecar audios. It affects main audio level and sidecar audios levels. * @param muted */ setAudioOutputMuted(muted: boolean): Observable; /** * Toggles master output audio muted. */ toggleAudioOutputMuteUnmute(): Observable; /** * @returns master output audio muted */ isAudioOutputMuted(): boolean; /** * Mutes master output audio. */ muteAudioOutput(): Observable; /** * Unmutes master output audio. */ unmuteAudioOutput(): Observable; /** * Fires when Main audio topology changes. For example, audio router is created. * @readonly */ onMainAudioChange$: Observable; /** * Fires on Main audio peak processor message * @readonly */ onMainAudioPeakProcessorMessage$: Observable; /** * Fires on Main audio input solo/mute action * @readonly */ onMainAudioInputSoloMute$: Observable; /** * @returns Main {@link AudioNode} */ getMainAudioNode(): AudioNode | undefined; /** * @returns Main audio state */ getMainAudioState(): OmpMainAudioState | undefined; /** * @returns Main audio router */ getMainAudioRouter(): OmpAudioRouter | undefined; /** * @returns Main audio input state */ getMainAudioInputSoloMuteState(): OmpMainAudioInputSoloMuteState | undefined; /** * @returns Main audio router initial/default connections */ getMainAudioRouterInitialRoutingConnections(): OmpAudioRoutingConnection[] | undefined; /** * Overrides main audio router initial/default connections * @param connections */ setMainAudioRouterInitialRoutingConnections(connections: OmpAudioRoutingConnection[]): Observable; /** * Creates Main audio router * * @param inputsNumber Number of inputs * @param outputsNumber Number of outputs */ createMainAudioRouter(inputsNumber: number, outputsNumber?: number): Observable; /** * Creates Main audio router * * @param inputsNumber Number of inputs * @param outputsNumberResolver Function for resolving number of router outputs. Provides {@link outputsNumberResolver.maxChannelCount} as function input */ createMainAudioRouterWithOutputsResolver(inputsNumber: number, outputsNumberResolver: (maxChannelCount: number) => number): Observable; /** * Creates Main audio peak processor * * @param audioMeterStandard default "peak-sample" * @returns observable with stream of {@link AudioPeakProcessorMessageEvent} events */ createMainAudioPeakProcessor(audioMeterStandard?: AudioMeterStandard): Observable>; /** * Updates Main audio routing connections * * @param connections */ updateMainAudioRouterConnections(connections: OmpAudioRoutingConnection[]): Observable; /** * Creates {@link OmpAudioEffectsGraph}'s from provided {@link effectsGraphDef}'s to slot provided through {@link effectsGraphConnection}.
* * If {@link effectsGraphConnection} specifies a router slot the following routing logic is used:
* * If {@link effectsGraphConnection.routingPath} is not provided {@link OmpAudioEffectsGraph}s will be set on all available routing paths.
* If {@link effectGraphConnection.routingPath.output} is not provided {@link OmpAudioEffectsGraph}s will be set on all available routing paths where {@link OmpAudioRoutingPath.input} = {@link effectGraphConnection.routingPath.input}.
* If {@link effectGraphConnection.routingPath.input} is not provided {@link OmpAudioEffectsGraph}s will be set on all available routing paths where {@link OmpAudioRoutingPath.output} = {@link effectGraphConnection.routingPath.output}.
* * @param effectsGraphDef * @param effectsGraphConnection */ setMainAudioEffectsGraphs(effectsGraphDef: OmpAudioEffectsGraphDef, effectsGraphConnection: OmpAudioEffectsGraphConnection): Observable; /** * Removes {@link OmpAudioEffectsGraph}'s from slot provided with {@link effectsGraphConnection}.
* * If {@link effectsGraphConnection} specifies a router slot the following routing logic is used:
* * If {@link effectsGraphConnection.routingPath} is not provided {@link OmpAudioEffectsGraph}s will be removed on all available routing paths.
* If {@link effectsGraphConnection.routingPath.output} is not provided {@link OmpAudioEffectsGraph}s will be removed on all available routing paths where {@link OmpAudioRoutingPath.input} = {@link effectsGraphConnection.routingPath.input}.
* If {@link effectsGraphConnection.routingPath.input} is not provided {@link OmpAudioEffectsGraph}s will be removed on all available routing paths where {@link OmpAudioRoutingPath.output} = {@link effectsGraphConnection.routingPath.output}.
* * @param effectsGraphConnection */ removeMainAudioEffectsGraphs(effectsGraphConnection: OmpAudioEffectsGraphConnection): Observable; /** * Sets {@link OmpAudioEffectParam} for audio effects that match {@link filter} on a given {@link effectGraphConnection.slot} * * @param param * @param effectGraphConnection * @param filter */ setMainAudioEffectsParams(param: OmpAudioEffectParam, effectGraphConnection: OmpAudioEffectsGraphConnection, filter?: OmpAudioEffectFilter): Observable; /** * Solo or unsolo (depending on current input state) given main audio router input * * @param routingPath */ toggleMainAudioRouterSolo(routingPath: OmpAudioRoutingInputType): Observable; /** * Mute or unmute (depending on current input state) given main audio router input * * @param routingPath */ toggleMainAudioRouterMute(routingPath: OmpAudioRoutingInputType): Observable; /** * Fires when Sidecar audio is created * @readonly */ onSidecarAudioCreate$: Observable; /** * Fires when Sidecar audio is loaded * @readonly */ onSidecarAudioLoaded$: Observable; /** * Fires when Sidecar audio is removed * @readonly */ onSidecarAudioRemove$: Observable; /** * Fires when Sidecar audio topology changes. For example, audio router is created. * @readonly */ onSidecarAudioChange$: Observable; /** * Fires when Sidecar audio volume changes. * @readonly */ onSidecarAudioVolumeChange$: Observable; /** * Fires on Sidecar audio peak processor message * @readonly */ onSidecarAudioPeakProcessorMessage$: Observable; /** * Fires on Sidecar audio input solo/mute action * @readonly */ onSidecarAudioInputSoloMute$: Observable; /** * Fires when any Sidecar audio is created, removed or changed * @readonly */ onSidecarAudiosChange$: Observable; /** * @returns Sidecar audios */ getSidecarAudios(): SidecarAudioApi[]; /** * @returns Sidecar audio * @param id Sidecar audio {@link OmpAudioTrack.id} */ getSidecarAudio(id: string): SidecarAudioApi | undefined; /** * @returns Sidecar audio state * @param id Sidecar audio {@link OmpAudioTrack.id} */ getSidecarAudioState(id: string): OmpSidecarAudioState | undefined; /** * @returns Sidecar audio input state * * @param id */ getSidecarAudioInputSoloMuteState(id: string): OmpSidecarAudioInputSoloMuteState | undefined; /** * @returns Sidecar audio router initial/default connections * * @param id */ getSidecarAudioRouterInitialRoutingConnections(id: string): OmpAudioRoutingConnection[] | undefined; /** * Overrides sidecar audio router initial/default connections * @param id * @param connections */ setSidecarAudioRouterInitialRoutingConnections(id: string, connections: OmpAudioRoutingConnection[]): Observable; /** * Creates new Sidecar audio track * @param track */ createSidecarAudioTrack(track: OmpAudioTrackCreateType): Observable; /** * Creates multiple Sidecar audio tracks * @param tracks */ createSidecarAudioTracks(tracks: OmpAudioTrackCreateType[]): Observable; /** * Removes Sidecar audio tracks * @param ids Sidecar audio {@link OmpAudioTrack}.id array */ removeSidecarAudioTracks(ids: string[]): Observable; /** * @returns Sidecar audio tracks */ getSidecarAudioTracks(): OmpAudioTrack[]; /** * @returns active Sidecar audio tracks */ getActiveSidecarAudioTracks(): OmpAudioTrack[]; /** * Activates Sidecar audio tracks * @param ids Sidecar audio track {@link OmpAudioTrack.id}s, if undefined changes will affect all tracks * @param deactivateOthers Set to true if other sidecar audios should be deactivated */ activateSidecarAudioTracks(ids: string[] | undefined, deactivateOthers: boolean | undefined): Observable; /** * Deactivates Sidecar audio tracks, if undefined changes will affect all tracks * @param ids Sidecar audio track {@link OmpAudioTrack.id}s */ deactivateSidecarAudioTracks(ids: string[] | undefined): Observable; /** * Sets sidecar audio volume. Unmutes audio. * @param volume * @param ids Sidecar audio track {@link OmpAudioTrack.id}s, if undefined changes will affect all tracks */ setSidecarVolume(volume: number, ids: string[] | undefined): Observable; /** * Sets sidecar audio muted / unmuted * @param muted muted (true) or unmuted (false) * @param ids Sidecar audio track {@link OmpAudioTrack.id}s, if undefined changes will affect all tracks */ setSidecarMuted(muted: boolean, ids: string[] | undefined): Observable; /** * Mutes sidecar audio * @param ids Sidecar audio track {@link OmpAudioTrack.id}s, if undefined changes will affect all tracks */ muteSidecar(ids: string[] | undefined): Observable; /** * Unmutes sidecar audio * @param ids Sidecar audio track {@link OmpAudioTrack.id}s, if undefined changes will affect all tracks */ unmuteSidecar(ids: string[] | undefined): Observable; /** * Removes all Sidecar audio tracks */ removeAllSidecarAudioTracks(): Observable; /** * Creates Sidecar audio router * * @param sidecarAudioTrackId id Sidecar audio {@link OmpAudioTrack.id} * @param inputsNumber * @param outputsNumber */ createSidecarAudioRouter(sidecarAudioTrackId: string, inputsNumber?: number, outputsNumber?: number): Observable; /** * * Updates Sidecar audio routing connections * * @param sidecarAudioTrackId id Sidecar audio {@link OmpAudioTrack.id} * @param connections */ updateSidecarAudioRouterConnections(sidecarAudioTrackId: string, connections: OmpAudioRoutingConnection[]): Observable; /** * Creates {@link OmpAudioEffectsGraph}'s from provided {@link effectsGraphDef}'s to slot provided through {@link effectsGraphConnection}.
* * If {@link effectsGraphConnection} specifies a router slot the following routing logic is used:
* * If {@link effectsGraphConnection.routingPath} is not provided {@link OmpAudioEffectsGraph}s will be set on all available routing paths.
* If {@link effectGraphConnection.routingPath.output} is not provided {@link OmpAudioEffectsGraph}s will be set on all available routing paths where {@link OmpAudioRoutingPath.input} = {@link effectGraphConnection.routingPath.input}.
* If {@link effectGraphConnection.routingPath.input} is not provided {@link OmpAudioEffectsGraph}s will be set on all available routing paths where {@link OmpAudioRoutingPath.output} = {@link effectGraphConnection.routingPath.output}.
* * @param sidecarAudioTrackId id Sidecar audio {@link OmpAudioTrack.id} * @param effectsGraphDef * @param effectsGraphConnection */ setSidecarAudioEffectsGraph(sidecarAudioTrackId: string, effectsGraphDef: OmpAudioEffectsGraphDef, effectsGraphConnection: OmpAudioEffectsGraphConnection): Observable; /** * Removes {@link OmpAudioEffectsGraph}'s from slot provided with {@link effectsGraphConnection}.
* * If {@link effectsGraphConnection} specifies a router slot the following routing logic is used:
* * If {@link effectsGraphConnection.routingPath} is not provided {@link OmpAudioEffectsGraph}s will be removed on all available routing paths.
* If {@link effectsGraphConnection.routingPath.output} is not provided {@link OmpAudioEffectsGraph}s will be removed on all available routing paths where {@link OmpAudioRoutingPath.input} = {@link effectsGraphConnection.routingPath.input}.
* If {@link effectsGraphConnection.routingPath.input} is not provided {@link OmpAudioEffectsGraph}s will be removed on all available routing paths where {@link OmpAudioRoutingPath.output} = {@link effectsGraphConnection.routingPath.output}.
* * @param sidecarAudioTrackId id Sidecar audio {@link OmpAudioTrack.id} * @param effectsGraphConnection */ removeSidecarAudioEffectsGraphs(sidecarAudioTrackId: string, effectsGraphConnection: OmpAudioEffectsGraphConnection): Observable; /** * Sets {@link OmpAudioEffectParam} for audio effects that match {@link filter} on a given {@link effectGraphConnection.slot} * * @param sidecarAudioTrackId id Sidecar audio {@link OmpAudioTrack.id} * @param param * @param effectGraphConnection * @param filter */ setSidecarAudioEffectsParams(sidecarAudioTrackId: string, param: OmpAudioEffectParam, effectGraphConnection: OmpAudioEffectsGraphConnection, filter?: OmpAudioEffectFilter): Observable; /** * Creates Sidecar audio peak processor * * @param sidecarAudioTrackId id Sidecar audio {@link OmpAudioTrack.id} * @param audioMeterStandard * @returns observable with stream of {@link AudioPeakProcessorMessageEvent} events */ createSidecarAudioPeakProcessor(sidecarAudioTrackId: string, audioMeterStandard?: AudioMeterStandard): Observable>; /** * Exports Main audio track as Sidecar audio track * * @param mainAudioTrackId Main audio track id */ exportMainAudioTrackToSidecar(mainAudioTrackId: string): Observable; /** * Exports Main audio tracks as Sidecar audio tracks * * @param mainAudioTrackIds */ exportMainAudioTracksToSidecar(mainAudioTrackIds: string[]): Observable; /** * Solo or unsolo (depending on current input state) given sidecar audio router input * @param sidecarAudioTrackId * @param routingPath */ toggleSidecarAudioRouterSolo(sidecarAudioTrackId: string, routingPath: OmpAudioRoutingInputType): Observable; /** * Mute or unmute (depending on current input state) given sidecar audio router input * @param sidecarAudioTrackId * @param routingPath */ toggleSidecarAudioRouterMute(sidecarAudioTrackId: string, routingPath: OmpAudioRoutingInputType): Observable; registerAudioEffect(effectType: string, effectFactory: OmpAudioEffectFactory): void; }