@byomakase/omakase-player
Version:
## Omakase Player - Open source JavaScript framework for building frame accurate video experiences
220 lines (219 loc) • 7.21 kB
TypeScript
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<string, any>;
/**
* Signals when effect is fully initialized.
*/
onReady$: Observable<void>;
/**
* 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<string, any>;
connections?: OmpAudioEffectConnectionDef[];
audioParams?: OmpAudioEffectParamType[];
constructor(id: string, effectType: string);
withAttrs(attrs: Record<string, any>): DefaultOmpAudioEffectDef;
outputTo(...effectConnections: (string | OmpAudioEffectConnectionDef)[]): DefaultOmpAudioEffectDef;
addParam(audioParam: OmpAudioEffectParamType): this;
}
export declare class OmpAudioEffectsGraphDefBuilder {
protected _effectDefs: OmpAudioEffectDef[];
protected _effectDefsMap: Map<string, OmpAudioEffectDef>;
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<string, any>;
onReady$: ReplaySubject<void>;
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<string, any>;
onReady$: ReplaySubject<void>;
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<string, any>;
}
/**
* Audio effects graph. Implementation corresponds to definition {@link OmpAudioEffectsGraph.toDef}
*/
export declare class OmpAudioEffectsGraph {
private audioContext;
private def;
protected _effects: OmpAudioEffect[];
protected _effectsById: Map<string, OmpAudioEffect>;
protected _sourceEffects: OmpAudioEffect[];
protected _destinationEffects: OmpAudioEffect[];
protected _initialized: boolean;
get initialized(): boolean;
constructor(audioContext: AudioContext, def: OmpAudioEffectsGraphDef);
initialize(): Observable<void>;
/**
* 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;
};
}