import { OmpAudioEffectConnectionDef, OmpAudioEffectDef, OmpAudioEffectsGraphDef } from './model'; import { OmpAudioNodeParam, OmpAudioNodeValueParam } from './omp-web-audio'; import { OmpAudioEffectParamType } from '../video/model'; import { Observable, ReplaySubject } from 'rxjs'; /** * Implementation of {@link OmpAudioEffectDef} */ export interface OmpAudioEffect { /** * Converts effect to effect definition */ toDef(): OmpAudioEffectDef; /** * Returns input audio nodes */ getInputNodes(): AudioNode[]; /** * Returns output audio nodes */ getOutputNode(): AudioNode; /** * Returns all audio nodes */ getNodes(): AudioNode[]; /** * Effect's id. Unique at {@link OmpAudioEffectsGraph} level. */ id: string; /** * Effect's effect type. Used for dynamic effect instantiation. */ effectType: string; /** * Arbitrary values used to describe the effect */ attrs: Map; /** * Signals when effect is fully initialized. */ onReady$: Observable; /** * Sets effect parameter. * * @param param */ setParam(param: OmpAudioEffectParam): void; /** * Returns all effect parameters */ getParams(): OmpAudioEffectParamType[] | undefined; /** * Destroys all effect's nodes and sets up the effect to be garbage collected */ destroy(): void; } export declare class DefaultOmpAudioEffectDef implements OmpAudioEffectDef { id: string; effectType: string; attrs?: Record; connections?: OmpAudioEffectConnectionDef[]; audioParams?: OmpAudioEffectParamType[]; constructor(id: string, effectType: string); withAttrs(attrs: Record): DefaultOmpAudioEffectDef; outputTo(...effectConnections: (string | OmpAudioEffectConnectionDef)[]): DefaultOmpAudioEffectDef; addParam(audioParam: OmpAudioEffectParamType): this; } export declare class OmpAudioEffectsGraphDefBuilder { protected _effectDefs: OmpAudioEffectDef[]; protected _effectDefsMap: Map; protected _sourceEffectDefs?: OmpAudioEffectDef[]; protected _destinationEffectDefs?: OmpAudioEffectDef[]; private constructor(); static instance(): OmpAudioEffectsGraphDefBuilder; addEffects(effectDefs: OmpAudioEffectDef[]): this; addEffect(node: OmpAudioEffectDef): this; connections(connections: [{ from: string; to: string; }]): this; connect(sourceNodeId: string, destinationNodeId: string): this; sourceEffectsIds(ids: string[]): this; destinationEffectsIds(ids: string[]): this; build(): OmpAudioEffectsGraphDef; } /** * Audio effects graph definition. Contains {@link OmpAudioEffectDef}'s */ export declare class DefaultOmpAudioEffectsGraphDef implements OmpAudioEffectsGraphDef { effectDefs: OmpAudioEffectDef[]; sourceEffectIds: string[]; destinationEffectIds: string[]; private constructor(); static create(...effects: OmpAudioEffectDef[]): DefaultOmpAudioEffectsGraphDef; } export declare class OmpAudioEffectParam extends OmpAudioNodeParam { } export declare class OmpAudioEffectGainParam extends OmpAudioEffectParam { protected readonly _valueParam: OmpAudioNodeValueParam; constructor(gain?: number); setGain(gain: number): void; } export declare class OmpAudioEffectDelayTimeParam extends OmpAudioEffectParam { protected readonly _valueParam: OmpAudioNodeValueParam; constructor(delayTime?: number); setDelayTime(delayTime: number): void; } export type OmpAudioEffectFactory = (ctx: AudioContext, effectDef: OmpAudioEffectDef) => OmpAudioEffect; export declare class OmpAudioEffectsRegistry { private static _instance?; private registry; private constructor(); static get instance(): OmpAudioEffectsRegistry; register(name: string, effect: OmpAudioEffectFactory): void; get(name: string): OmpAudioEffectFactory | undefined; } /** * Gain effect */ export declare class OmpGainEffect implements OmpAudioEffect { private _gainNode; private _def; readonly id: string; readonly effectType: string; attrs: Map; onReady$: ReplaySubject; constructor(audioContext: AudioContext, def: OmpAudioEffectDef); private extractGainParamFromDef; getInputNodes(): AudioNode[]; getOutputNode(): AudioNode; getNodes(): AudioNode[]; getParams(): OmpAudioEffectParamType[] | undefined; toDef(): OmpAudioEffectDef; setParam(param: OmpAudioEffectParam): void; private updateDefParam; destroy(): void; static createDef(id: string, gain: number): DefaultOmpAudioEffectDef; } /** * Delay effect */ export declare class OmpDelayEffect implements OmpAudioEffect { private _delayNode; private _def; readonly id: string; readonly effectType: string; attrs: Map; onReady$: ReplaySubject; constructor(audioContext: AudioContext, def: OmpAudioEffectDef); private extractDelayTimeParamFromDef; getInputNodes(): AudioNode[]; getOutputNode(): AudioNode; getNodes(): AudioNode[]; getParams(): OmpAudioEffectParamType[] | undefined; toDef(): OmpAudioEffectDef; setParam(param: OmpAudioEffectParam): void; private updateDefParam; destroy(): void; static createDef(id: string, delayTime: number): DefaultOmpAudioEffectDef; } /** * Filter values used for filtering {@link OmpAudioEffect}'s */ export interface OmpAudioEffectFilter { /** * {@link OmpAudioEffect.id} */ id?: string; /** * {@link OmpAudioEffect.type} */ effectType?: string; /** * {@link OmpAudioEffect.attrs} */ attrs?: Record; } /** * Audio effects graph. Implementation corresponds to definition {@link OmpAudioEffectsGraph.toDef} */ export declare class OmpAudioEffectsGraph { private audioContext; private def; protected _effects: OmpAudioEffect[]; protected _effectsById: Map; protected _sourceEffects: OmpAudioEffect[]; protected _destinationEffects: OmpAudioEffect[]; protected _initialized: boolean; get initialized(): boolean; constructor(audioContext: AudioContext, def: OmpAudioEffectsGraphDef); initialize(): Observable; /** * Finds all {@link OmpAudioEffect}'s that correspond to {@link filter} * * @param filter */ findAudioEffects(filter?: OmpAudioEffectFilter): OmpAudioEffect[]; /** * Audio effects graph input {@link OmpAudioEffect}'s */ get sourceEffects(): OmpAudioEffect[]; /** * Audio effects graph output {@link OmpAudioEffect}'s */ get destinationEffects(): OmpAudioEffect[]; toDef(): OmpAudioEffectsGraphDef; destroy(): void; } export declare class OmpAudioEffectsUtil { /** * Calculates crossfade gain value for {@link value} and {@link curve} * * @param value in [0, 1] range * @param curve */ static crossfadeGain(value: number, curve?: 'linear' | 'equal-power' | 'log' | 'sigmoid'): { left: number; right: number; }; }