js-synthesizer
Version:
Synthesizer library for web-based JS program, using with Web Audio or etc.
111 lines (110 loc) • 5.69 kB
TypeScript
import { InterpolationValues, PlayerSetTempoType } from './Constants';
import ISequencer from './ISequencer';
import ISynthesizer from './ISynthesizer';
import SynthesizerSettings from './SynthesizerSettings';
import WorkletSoundfont from './WorkletSoundfont';
/** An synthesizer object with AudioWorkletNode */
export default class AudioWorkletNodeSynthesizer implements ISynthesizer {
constructor();
/** Audio node for this synthesizer */
get node(): AudioWorkletNode | null;
/**
* Create AudiWorkletNode instance
*/
createAudioNode(context: AudioContext, settings?: SynthesizerSettings): AudioWorkletNode;
isInitialized(): boolean;
init(_sampleRate: number, _settings?: SynthesizerSettings): void;
close(): void;
isPlaying(): boolean;
setInterpolation(value: InterpolationValues, channel?: number): void;
getGain(): number;
setGain(gain: number): void;
setChannelType(channel: number, isDrum: boolean): void;
waitForVoicesStopped(): Promise<void>;
loadSFont(bin: ArrayBuffer): Promise<number>;
unloadSFont(id: number): void;
unloadSFontAsync(id: number): Promise<void>;
/**
* Returns the `Soundfont` instance for specified SoundFont.
* @param sfontId loaded SoundFont id ({@link loadSFont} returns this)
* @return resolve with `Soundfont` instance (rejected if `sfontId` is not valid or loaded)
*/
getSFontObject(sfontId: number): Promise<WorkletSoundfont>;
getSFontBankOffset(id: number): Promise<number>;
setSFontBankOffset(id: number, offset: number): void;
render(): void;
midiNoteOn(chan: number, key: number, vel: number): void;
midiNoteOff(chan: number, key: number): void;
midiKeyPressure(chan: number, key: number, val: number): void;
midiControl(chan: number, ctrl: number, val: number): void;
midiProgramChange(chan: number, prognum: number): void;
midiChannelPressure(chan: number, val: number): void;
midiPitchBend(chan: number, val: number): void;
midiSysEx(data: Uint8Array): void;
midiPitchWheelSensitivity(chan: number, val: number): void;
midiBankSelect(chan: number, bank: number): void;
midiSFontSelect(chan: number, sfontId: number): void;
midiProgramSelect(chan: number, sfontId: number, bank: number, presetNum: number): void;
midiUnsetProgram(chan: number): void;
midiProgramReset(): void;
midiSystemReset(): void;
midiAllNotesOff(chan?: number): void;
midiAllSoundsOff(chan?: number): void;
midiSetChannelType(chan: number, isDrum: boolean): void;
resetPlayer(): Promise<void>;
closePlayer(): void;
isPlayerPlaying(): boolean;
addSMFDataToPlayer(bin: ArrayBuffer): Promise<void>;
playPlayer(): Promise<void>;
stopPlayer(): void;
retrievePlayerCurrentTick(): Promise<number>;
retrievePlayerTotalTicks(): Promise<number>;
retrievePlayerBpm(): Promise<number>;
retrievePlayerMIDITempo(): Promise<number>;
seekPlayer(ticks: number): void;
setPlayerLoop(loopTimes: number): void;
setPlayerTempo(tempoType: PlayerSetTempoType, tempo: number): void;
waitForPlayerStopped(): Promise<void>;
/**
* Creates a sequencer instance associated with this worklet node.
*/
createSequencer(): Promise<ISequencer>;
/**
* Hooks MIDI events sent by the player. The hook callback function defined on
* AudioWorkletGlobalScope object available in the worklet is used.
* @param callbackName hook callback function name available as 'AudioWorkletGlobalScope[callbackName]',
* or falsy value ('', null, or undefined) to unhook.
* The type of 'AudioWorkletGlobalScope[callbackName]' must be HookMIDIEventCallback.
* @param param any additional data passed to the callback.
* This data must be 'Transferable' data.
* @return Promise object that resolves when succeeded, or rejects when failed
*/
hookPlayerMIDIEventsByName(callbackName: string | null | undefined, param?: any): Promise<void>;
/**
* Registers the user-defined client to the sequencer.
* The client callback function defined on AudioWorkletGlobalScope
* object available in the worklet is used.
* The client can receive events in the time from sequencer process.
* @param seq the sequencer instance created by AudioWorkletNodeSynthesizer.createSequencer
* @param clientName the client name
* @param callbackName callback function name available as 'AudioWorkletGlobalScope[callbackName]',
* or falsy value ('', null, or undefined) to unhook.
* The type of 'AudioWorkletGlobalScope[callbackName]' must be SequencerClientCallback.
* @param param additional parameter passed to the callback
* @return Promise object that resolves with registered client id when succeeded, or rejects when failed
*/
registerSequencerClientByName(seq: ISequencer, clientName: string, callbackName: string, param: number): Promise<number>;
/**
* Call a function defined in the AudioWorklet.
*
* The function will receive two parameters; the first parameter is a Synthesizer instance
* (not AudioWorkletNodeSynthesizer instance), and the second is the data passed to 'param'.
* This method is useful when the script loaded in AudioWorklet wants to
* retrieve Synthesizer instance.
*
* @param name a function name (must be retrieved from AudioWorkletGlobalScope[name])
* @param param any parameter (must be Transferable)
* @return Promise object that resolves when the function process has done, or rejects when failed
*/
callFunction(name: string, param: any): Promise<void>;
}