UNPKG

@polygonjs/polygonjs

Version:

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

58 lines (57 loc) 1.57 kB
"use strict"; import { FeedbackDelay } from "tone/build/esm/effect/FeedbackDelay"; const DEFAULTS = { delayTime: 0.25, feedback: 0.125, maxDelay: 1 // wet: 1, }; import { TypedAudioNode } from "./_Base"; import { NodeParamsConfig, ParamConfig } from "../utils/params/ParamsConfig"; class FeedbackDelayAudioParamsConfig extends NodeParamsConfig { constructor() { super(...arguments); /** @param delayTime */ this.delayTime = ParamConfig.FLOAT(DEFAULTS.delayTime, { range: [0, 1], rangeLocked: [true, false] }); /** @param maxDelay */ this.maxDelay = ParamConfig.FLOAT(DEFAULTS.maxDelay, { range: [0, 1], rangeLocked: [true, false] }); /** @param feedback */ this.feedback = ParamConfig.FLOAT(DEFAULTS.feedback, { range: [0, 1], rangeLocked: [true, false] }); } } const ParamsConfig = new FeedbackDelayAudioParamsConfig(); export class FeedbackDelayAudioNode extends TypedAudioNode { constructor() { super(...arguments); this.paramsConfig = ParamsConfig; } static type() { return "feedbackDelay"; } initializeNode() { this.io.inputs.setCount(1); } cook(inputContents) { const audioBuilder = inputContents[0]; const effect = new FeedbackDelay({ delayTime: this.pv.delayTime, maxDelay: this.pv.maxDelay, feedback: this.pv.feedback }); const inputNode = audioBuilder.audioNode(); if (inputNode) { inputNode.connect(effect); } audioBuilder.setAudioNode(effect); this.setAudioBuilder(audioBuilder); } }