wam-community
Version:
A collection of prebuilt Web Audio Modules ready for use
70 lines (59 loc) • 1.8 kB
JavaScript
/** @typedef {import('@webaudiomodules/api').WamParameter} IWamParameter */
/** @typedef {typeof import('@webaudiomodules/api').WamParameter} WamParameterContructor */
/** @typedef {import('@webaudiomodules/api').WamParameterInfo} WamParameterInfo */
/** @typedef {import('@webaudiomodules/api').AudioWorkletGlobalScope} AudioWorkletGlobalScope */
/** @typedef {import('./types').WamSDKBaseModuleScope} WamSDKBaseModuleScope */
/**
* @param {string} [moduleId]
* @returns {WamParameterContructor}
*/
const getWamParameter = (moduleId) => {
/** @type {AudioWorkletGlobalScope} */
// @ts-ignore
const audioWorkletGlobalScope = globalThis;
/** @implements {IWamParameter} */
class WamParameter {
/** @param {WamParameterInfo} info */
constructor(info) {
/** @readonly @type {WamParameterInfo} */
this.info = info;
/** @private @type {number} */
this._value = info.defaultValue;
}
/**
* Set current (denormalized) value
* @param {number} value
*/
set value(value) {
this._value = value;
}
/**
* Get current (denormalized) value
* @returns {number}
*/
get value() {
return this._value;
}
/**
* Set current value in normalized range
* @param {number} valueNorm
*/
set normalizedValue(valueNorm) {
this.value = this.info.denormalize(valueNorm);
}
/**
* Get current value in normalized range
* @returns {number}
*/
get normalizedValue() {
return this.info.normalize(this.value);
}
}
if (audioWorkletGlobalScope.AudioWorkletProcessor) {
/** @type {WamSDKBaseModuleScope} */
const ModuleScope = audioWorkletGlobalScope.webAudioModules.getModuleScope(moduleId);
if (!ModuleScope.WamParameter) ModuleScope.WamParameter = WamParameter;
}
return WamParameter;
};
export default getWamParameter;