UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

94 lines (93 loc) 2.66 kB
"use strict"; import { AutoWah } from "tone/build/esm/effect/AutoWah"; const DEFAULTS = { // Q: 2, baseFrequency: 100, follower: 0.2, // gain: 2, octaves: 6, sensitivity: 0 // wet: 1, }; import { TypedAudioNode } from "./_Base"; import { NodeParamsConfig, ParamConfig } from "../utils/params/ParamsConfig"; import { effectParamsOptions } from "./utils/EffectsController"; const paramCallback = (node) => { AutoWahAudioNode.PARAM_CALLBACK_updateEffect(node); }; class AutoWahAudioParamsConfig extends NodeParamsConfig { constructor() { super(...arguments); /** @param baseFrequency */ this.baseFrequency = ParamConfig.FLOAT(DEFAULTS.baseFrequency, { range: [0, 1e3], rangeLocked: [true, false], ...effectParamsOptions(paramCallback) }); /** @param octaves */ this.octaves = ParamConfig.FLOAT(DEFAULTS.octaves, { range: [0, 10], rangeLocked: [true, false], ...effectParamsOptions(paramCallback) }); /** @param sensitivity */ this.sensitivity = ParamConfig.FLOAT(DEFAULTS.sensitivity, { range: [0, 1], rangeLocked: [true, false], ...effectParamsOptions(paramCallback) }); /** @param follower */ this.follower = ParamConfig.FLOAT(DEFAULTS.follower, { range: [0, 1], rangeLocked: [true, false], ...effectParamsOptions(paramCallback) }); } // TODO: promote filter params } const ParamsConfig = new AutoWahAudioParamsConfig(); export class AutoWahAudioNode extends TypedAudioNode { constructor() { super(...arguments); this.paramsConfig = ParamsConfig; } static type() { return "autoWah"; } initializeNode() { this.io.inputs.setCount(1); } cook(inputContents) { const audioBuilder = inputContents[0]; const effect = this._effect(); const inputNode = audioBuilder.audioNode(); if (inputNode) { inputNode.connect(effect); } audioBuilder.setAudioNode(effect); this.setAudioBuilder(audioBuilder); } _effect() { return this.__effect__ = this.__effect__ || this._createEffect(); } _createEffect() { return new AutoWah({ baseFrequency: this.pv.baseFrequency, octaves: this.pv.octaves, sensitivity: this.pv.sensitivity, // Q: this.pv.Q, // gain: this.pv.gain, follower: this.pv.follower }); } static PARAM_CALLBACK_updateEffect(node) { node._updateEffect(); } _updateEffect() { const effect = this._effect(); effect.baseFrequency = this.pv.baseFrequency; effect.octaves = this.pv.octaves; effect.sensitivity = this.pv.sensitivity; effect.follower = this.pv.follower; } }