webaudiofont-ts-patched
Version:
Soundfonts for web. About of 2000 musical instruments. GM MIDI compatible.
177 lines (176 loc) • 7.44 kB
TypeScript
declare module "channel" {
export class WebAudioFontChannel {
audioContext: AudioContext;
input: GainNode;
band32: BiquadFilterNode;
band64: BiquadFilterNode;
band128: BiquadFilterNode;
band256: BiquadFilterNode;
band512: BiquadFilterNode;
band1k: BiquadFilterNode;
band2k: BiquadFilterNode;
band4k: BiquadFilterNode;
band8k: BiquadFilterNode;
band16k: BiquadFilterNode;
output: GainNode;
constructor(audioContext: AudioContext);
bandEqualizer(from: AudioNode, frequency: number): BiquadFilterNode;
}
}
declare module "otypes" {
export type WaveEnvelope = {
audioBufferSourceNode?: AudioBufferSourceNode | null;
target: AudioNode;
when: number;
duration: number;
cancel: () => void;
pitch: number;
preset: WavePreset;
};
export type WaveZone = {
keyRangeLow: number;
keyRangeHigh: number;
originalPitch: number;
coarseTune: number;
fineTune: number;
loopStart: number;
loopEnd: number;
buffer?: AudioBuffer;
sampleRate: number;
delay?: number;
ahdsr?: boolean | WaveAHDSR[];
sample?: string;
file?: string;
sustain?: number;
};
export type WavePreset = {
zones: WaveZone[];
};
export type WaveSlide = {
when: number;
delta: number;
};
export type WaveAHDSR = {
duration: number;
volume: number;
};
export type CachedPreset = {
variableName: string;
filePath: string;
};
export type NumPair = number[];
export type PresetInfo = {
variable: string;
url: string;
title: string;
pitch: number;
};
export type ChordQueue = {
when: number;
destination: AudioNode;
preset: WavePreset;
pitch: number;
duration: number;
volume?: number;
slides?: WaveSlide[];
};
}
declare module "loader" {
import { CachedPreset, NumPair, PresetInfo } from "otypes";
import { WebAudioFontPlayer } from "player";
export class WebAudioFontLoader {
cached: CachedPreset[];
player: WebAudioFontPlayer;
instrumentKeyArray: string[];
instrumentNamesArray: string[];
choosenInfos: NumPair[];
drumNamesArray: string[];
drumKeyArray: string[];
constructor(player: WebAudioFontPlayer);
startLoad(audioContext: AudioContext, filePath: string, variableName: string): void;
decodeAfterLoading(audioContext: AudioContext, variableName: string): void;
waitOrFinish(variableName: string, onFinish: () => void): void;
loaded(variableName: string): boolean;
progress(): number;
waitLoad(onFinish: () => void): void;
instrumentTitles: () => string[];
instrumentKeys(): string[];
instrumentInfo(n: number): PresetInfo;
findInstrument(program: number): number;
drumTitles(): string[];
drumKeys(): string[];
drumInfo(n: number): PresetInfo;
findDrum(nn: number): number;
}
}
declare module "reverberator" {
export class WebAudioFontReverberator {
audioContext: AudioContext;
output: GainNode;
input: BiquadFilterNode;
compressor: DynamicsCompressorNode;
compressorWet: GainNode;
compressorDry: GainNode;
convolver: AudioNode | ConvolverNode | null;
convolverInput: GainNode;
dry: GainNode;
wet: GainNode;
irrArrayBuffer: ArrayBuffer;
constructor(audioContext: AudioContext);
irr: string;
}
}
declare module "player" {
import { WebAudioFontChannel } from "channel";
import { WebAudioFontLoader } from "loader";
import { WaveEnvelope, WavePreset, WaveSlide, WaveZone } from "otypes";
import { WebAudioFontReverberator } from "reverberator";
export class WebAudioFontPlayer {
envelopes: WaveEnvelope[];
loader: WebAudioFontLoader;
afterTime: number;
nearZero: number;
createChannel(audioContext: AudioContext): WebAudioFontChannel;
createReverberator(audioContext: AudioContext): WebAudioFontReverberator;
limitVolume(volume: number | undefined): number;
queueChord(audioContext: AudioContext, target: AudioNode, preset: WavePreset, when: number, pitches: number[], duration: number, volume?: number, slides?: WaveSlide[][]): WaveEnvelope[];
queueStrumUp(audioContext: AudioContext, target: AudioNode, preset: WavePreset, when: number, pitches: number[], duration: number, volume?: number, slides?: WaveSlide[][]): WaveEnvelope[];
queueStrumDown(audioContext: AudioContext, target: AudioNode, preset: WavePreset, when: number, pitches: number[], duration: number, volume?: number, slides?: WaveSlide[][]): WaveEnvelope[];
queueStrum(audioContext: AudioContext, target: AudioNode, preset: WavePreset, when: number, pitches: number[], duration: number, volume?: number, slides?: WaveSlide[][]): WaveEnvelope[];
queueSnap(audioContext: AudioContext, target: AudioNode, preset: WavePreset, when: number, pitches: number[], duration: number, volume?: number, slides?: WaveSlide[][]): WaveEnvelope[];
resumeContext(audioContext: AudioContext): void;
queueWaveTable(audioContext: AudioContext, target: AudioNode, preset: WavePreset, when: number, pitch: number, duration: number, volume?: number, slides?: WaveSlide[]): WaveEnvelope | null;
noZeroVolume(n: number): number;
setupEnvelope(audioContext: AudioContext, envelope: WaveEnvelope, zone: WaveZone, volume: number, when: number, sampleDuration: number, noteDuration: number): void;
numValue(aValue: any, defValue: number): number;
findEnvelope(audioContext: AudioContext, target: AudioNode): WaveEnvelope;
adjustPreset: (audioContext: AudioContext, preset: WavePreset) => void;
adjustZone: (audioContext: AudioContext, zone: WaveZone) => void;
findZone(audioContext: AudioContext, preset: WavePreset, pitch: number): WaveZone | null;
cancelQueue(audioContext: AudioContext): void;
}
}
declare module "ticker" {
import { ChordQueue } from "otypes";
import { WebAudioFontPlayer } from "player";
export class WebAudioFontTicker {
stateStop: number;
statePlay: number;
stateEnd: number;
state: number;
stepDuration: number;
lastPosition: number;
playLoop(player: WebAudioFontPlayer, audioContext: AudioContext, loopStart: number, loopPosition: number, loopEnd: number, queue: ChordQueue[]): void;
startTicks(audioContext: AudioContext, onTick: (when: number, from: number, to: number) => void, loopStart: number, loopPosition: number, loopEnd: number, onEnd: (loopPosition: number) => void): void;
tick(audioContext: AudioContext, nextAudioTime: number, onTick: (when: number, from: number, to: number) => void, loopStart: number, loopPosition: number, loopEnd: number, onEnd: (loopPosition: number) => void): void;
cancel(): void;
}
}
declare module "index" {
export * from "player";
export * from "loader";
export * from "channel";
export * from "reverberator";
export * from "ticker";
export * from "otypes";
}