UNPKG

@polygonjs/polygonjs

Version:

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

98 lines (97 loc) 2.63 kB
"use strict"; import { Phaser } from "tone/build/esm/effect/Phaser"; const DEFAULTS = { Q: 10, baseFrequency: 350, frequency: 0.5, octaves: 3, stages: 10 }; import { TypedAudioNode } from "./_Base"; import { NodeParamsConfig, ParamConfig } from "../utils/params/ParamsConfig"; import { effectParamsOptions } from "./utils/EffectsController"; const paramCallback = (node) => { PhaserAudioNode.PARAM_CALLBACK_updateEffect(node); }; class PhaserAudioParamsConfig extends NodeParamsConfig { constructor() { super(...arguments); /** @param frequency */ this.frequency = ParamConfig.FLOAT(DEFAULTS.frequency, { range: [0, 1e3], rangeLocked: [true, false] }); /** @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.stages = ParamConfig.FLOAT(DEFAULTS.stages, { range: [0, 1], rangeLocked: [true, false] }); /** @param Q */ this.Q = ParamConfig.FLOAT(DEFAULTS.Q, { range: [0, 1], rangeLocked: [true, false] }); } } const ParamsConfig = new PhaserAudioParamsConfig(); export class PhaserAudioNode extends TypedAudioNode { constructor() { super(...arguments); this.paramsConfig = ParamsConfig; } static type() { return "phaser"; } initializeNode() { this.io.inputs.setCount(1); } cook(inputContents) { const audioBuilder = inputContents[0]; this._resetEffect(); 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 Phaser({ frequency: this.pv.frequency, baseFrequency: this.pv.baseFrequency, octaves: this.pv.octaves, stages: this.pv.stages, Q: this.pv.Q }); } _resetEffect() { if (this.__effect__) { this.__effect__.dispose(); this.__effect__ = void 0; } } static PARAM_CALLBACK_updateEffect(node) { node._updateEffect(); } _updateEffect() { const effect = this._effect(); effect.baseFrequency = this.pv.baseFrequency; effect.octaves = this.pv.octaves; } }