@byomakase/omakase-player
Version:
## Omakase Player - Open source JavaScript framework for building frame accurate video experiences
107 lines (106 loc) • 5.67 kB
TypeScript
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;
}