@byomakase/omakase-player
Version:
## Omakase Player - Open source JavaScript framework for building frame accurate video experiences
415 lines (414 loc) • 18.9 kB
TypeScript
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<AudioLoadedEvent | undefined>;
/**
* Fires on audio track switched
* @readonly
*/
onAudioSwitched$: Observable<AudioSwitchedEvent>;
/**
* Fires on audio track updated
* @readonly
*/
onAudioUpdated$: Observable<AudioUpdatedEvent>;
/**
* Fires on master audio output volume change
* @readonly
*/
onAudioOutputVolumeChange$: Observable<VolumeChangeEvent>;
/**
* @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<void>;
/**
* Updates loaded audio track. Updateable properties are: {@link OmpAudioTrack.label}, {@link OmpAudioTrack.language}. Other changes will be ignored.
* @param audioTrack
*/
updateAudioTrack(audioTrack: OmpAudioTrack): Observable<void>;
/**
* @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<void>;
/**
* @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<void>;
/**
* Toggles master output audio muted.
*/
toggleAudioOutputMuteUnmute(): Observable<void>;
/**
* @returns master output audio muted
*/
isAudioOutputMuted(): boolean;
/**
* Mutes master output audio.
*/
muteAudioOutput(): Observable<void>;
/**
* Unmutes master output audio.
*/
unmuteAudioOutput(): Observable<void>;
/**
* Fires when Main audio topology changes. For example, audio router is created.
* @readonly
*/
onMainAudioChange$: Observable<MainAudioChangeEvent | undefined>;
/**
* Fires on Main audio peak processor message
* @readonly
*/
onMainAudioPeakProcessorMessage$: Observable<AudioPeakProcessorMessageEvent>;
/**
* Fires on Main audio input solo/mute action
* @readonly
*/
onMainAudioInputSoloMute$: Observable<MainAudioInputSoloMuteEvent | undefined>;
/**
* @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<void>;
/**
* Creates Main audio router
*
* @param inputsNumber Number of inputs
* @param outputsNumber Number of outputs
*/
createMainAudioRouter(inputsNumber: number, outputsNumber?: number): Observable<OmpAudioRouterState>;
/**
* 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<OmpAudioRouterState>;
/**
* Creates Main audio peak processor
*
* @param audioMeterStandard default "peak-sample"
* @returns observable with stream of {@link AudioPeakProcessorMessageEvent} events
*/
createMainAudioPeakProcessor(audioMeterStandard?: AudioMeterStandard): Observable<Observable<AudioPeakProcessorMessageEvent>>;
/**
* Updates Main audio routing connections
*
* @param connections
*/
updateMainAudioRouterConnections(connections: OmpAudioRoutingConnection[]): Observable<void>;
/**
* Creates {@link OmpAudioEffectsGraph}'s from provided {@link effectsGraphDef}'s to slot provided through {@link effectsGraphConnection}. </br>
*
* If {@link effectsGraphConnection} specifies a router slot the following routing logic is used: </br>
*
* If {@link effectsGraphConnection.routingPath} is not provided {@link OmpAudioEffectsGraph}s will be set on all available routing paths. </br>
* 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}. </br>
* 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}. </br>
*
* @param effectsGraphDef
* @param effectsGraphConnection
*/
setMainAudioEffectsGraphs(effectsGraphDef: OmpAudioEffectsGraphDef, effectsGraphConnection: OmpAudioEffectsGraphConnection): Observable<void>;
/**
* Removes {@link OmpAudioEffectsGraph}'s from slot provided with {@link effectsGraphConnection}. </br>
*
* If {@link effectsGraphConnection} specifies a router slot the following routing logic is used: </br>
*
* If {@link effectsGraphConnection.routingPath} is not provided {@link OmpAudioEffectsGraph}s will be removed on all available routing paths. </br>
* 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}. </br>
* 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}. </br>
*
* @param effectsGraphConnection
*/
removeMainAudioEffectsGraphs(effectsGraphConnection: OmpAudioEffectsGraphConnection): Observable<void>;
/**
* 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<void>;
/**
* Solo or unsolo (depending on current input state) given main audio router input
*
* @param routingPath
*/
toggleMainAudioRouterSolo(routingPath: OmpAudioRoutingInputType): Observable<void>;
/**
* Mute or unmute (depending on current input state) given main audio router input
*
* @param routingPath
*/
toggleMainAudioRouterMute(routingPath: OmpAudioRoutingInputType): Observable<void>;
/**
* Fires when Sidecar audio is created
* @readonly
*/
onSidecarAudioCreate$: Observable<SidecarAudioCreateEvent>;
/**
* Fires when Sidecar audio is loaded
* @readonly
*/
onSidecarAudioLoaded$: Observable<SidecarAudioLoadedEvent>;
/**
* Fires when Sidecar audio is removed
* @readonly
*/
onSidecarAudioRemove$: Observable<SidecarAudioRemoveEvent>;
/**
* Fires when Sidecar audio topology changes. For example, audio router is created.
* @readonly
*/
onSidecarAudioChange$: Observable<SidecarAudioChangeEvent>;
/**
* Fires when Sidecar audio volume changes.
* @readonly
*/
onSidecarAudioVolumeChange$: Observable<SidecarAudioVolumeChangeEvent>;
/**
* Fires on Sidecar audio peak processor message
* @readonly
*/
onSidecarAudioPeakProcessorMessage$: Observable<SidecarAudioPeakProcessorMessageEvent>;
/**
* Fires on Sidecar audio input solo/mute action
* @readonly
*/
onSidecarAudioInputSoloMute$: Observable<SidecarAudioInputSoloMuteEvent>;
/**
* Fires when any Sidecar audio is created, removed or changed
* @readonly
*/
onSidecarAudiosChange$: Observable<SidecarAudiosChangeEvent>;
/**
* @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<void>;
/**
* Creates new Sidecar audio track
* @param track
*/
createSidecarAudioTrack(track: OmpAudioTrackCreateType): Observable<OmpAudioTrack>;
/**
* Creates multiple Sidecar audio tracks
* @param tracks
*/
createSidecarAudioTracks(tracks: OmpAudioTrackCreateType[]): Observable<OmpAudioTrack[]>;
/**
* Removes Sidecar audio tracks
* @param ids Sidecar audio {@link OmpAudioTrack}.id array
*/
removeSidecarAudioTracks(ids: string[]): Observable<void>;
/**
* @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<void>;
/**
* 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<void>;
/**
* 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<void>;
/**
* 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<void>;
/**
* Mutes sidecar audio
* @param ids Sidecar audio track {@link OmpAudioTrack.id}s, if undefined changes will affect all tracks
*/
muteSidecar(ids: string[] | undefined): Observable<void>;
/**
* Unmutes sidecar audio
* @param ids Sidecar audio track {@link OmpAudioTrack.id}s, if undefined changes will affect all tracks
*/
unmuteSidecar(ids: string[] | undefined): Observable<void>;
/**
* Removes all Sidecar audio tracks
*/
removeAllSidecarAudioTracks(): Observable<void>;
/**
* Creates Sidecar audio router
*
* @param sidecarAudioTrackId id Sidecar audio {@link OmpAudioTrack.id}
* @param inputsNumber
* @param outputsNumber
*/
createSidecarAudioRouter(sidecarAudioTrackId: string, inputsNumber?: number, outputsNumber?: number): Observable<OmpAudioRouterState>;
/**
*
* Updates Sidecar audio routing connections
*
* @param sidecarAudioTrackId id Sidecar audio {@link OmpAudioTrack.id}
* @param connections
*/
updateSidecarAudioRouterConnections(sidecarAudioTrackId: string, connections: OmpAudioRoutingConnection[]): Observable<void>;
/**
* Creates {@link OmpAudioEffectsGraph}'s from provided {@link effectsGraphDef}'s to slot provided through {@link effectsGraphConnection}. </br>
*
* If {@link effectsGraphConnection} specifies a router slot the following routing logic is used: </br>
*
* If {@link effectsGraphConnection.routingPath} is not provided {@link OmpAudioEffectsGraph}s will be set on all available routing paths. </br>
* 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}. </br>
* 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}. </br>
*
* @param sidecarAudioTrackId id Sidecar audio {@link OmpAudioTrack.id}
* @param effectsGraphDef
* @param effectsGraphConnection
*/
setSidecarAudioEffectsGraph(sidecarAudioTrackId: string, effectsGraphDef: OmpAudioEffectsGraphDef, effectsGraphConnection: OmpAudioEffectsGraphConnection): Observable<void>;
/**
* Removes {@link OmpAudioEffectsGraph}'s from slot provided with {@link effectsGraphConnection}. </br>
*
* If {@link effectsGraphConnection} specifies a router slot the following routing logic is used: </br>
*
* If {@link effectsGraphConnection.routingPath} is not provided {@link OmpAudioEffectsGraph}s will be removed on all available routing paths. </br>
* 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}. </br>
* 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}. </br>
*
* @param sidecarAudioTrackId id Sidecar audio {@link OmpAudioTrack.id}
* @param effectsGraphConnection
*/
removeSidecarAudioEffectsGraphs(sidecarAudioTrackId: string, effectsGraphConnection: OmpAudioEffectsGraphConnection): Observable<void>;
/**
* 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<void>;
/**
* 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<Observable<AudioPeakProcessorMessageEvent>>;
/**
* Exports Main audio track as Sidecar audio track
*
* @param mainAudioTrackId Main audio track id
*/
exportMainAudioTrackToSidecar(mainAudioTrackId: string): Observable<OmpAudioTrack>;
/**
* Exports Main audio tracks as Sidecar audio tracks
*
* @param mainAudioTrackIds
*/
exportMainAudioTracksToSidecar(mainAudioTrackIds: string[]): Observable<OmpAudioTrack[]>;
/**
* Solo or unsolo (depending on current input state) given sidecar audio router input
* @param sidecarAudioTrackId
* @param routingPath
*/
toggleSidecarAudioRouterSolo(sidecarAudioTrackId: string, routingPath: OmpAudioRoutingInputType): Observable<void>;
/**
* Mute or unmute (depending on current input state) given sidecar audio router input
* @param sidecarAudioTrackId
* @param routingPath
*/
toggleSidecarAudioRouterMute(sidecarAudioTrackId: string, routingPath: OmpAudioRoutingInputType): Observable<void>;
registerAudioEffect(effectType: string, effectFactory: OmpAudioEffectFactory): void;
}