UNPKG

@polygonjs/polygonjs

Version:

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

52 lines (43 loc) 1.44 kB
/** * Applies a width factor to the mid/side seperation. * 0 is all mid and 1 is all side. * Algorithm found in [kvraudio forums](http://www.kvraudio.com/forum/viewtopic.php?t=212587). * ``` * Mid *= 2*(1-width)<br> * Side *= 2*width * * See description on [Tone.js](https://tonejs.github.io/) * */ import {StereoWidener} from 'tone/build/esm/effect/StereoWidener'; const DEFAULTS = {width: 0.5}; //StereoWidener.getDefaults(); import {TypedAudioNode} from './_Base'; import {NodeParamsConfig, ParamConfig} from '../utils/params/ParamsConfig'; import {AudioBuilder} from '../../../core/audio/AudioBuilder'; class StereoWidenerAudioParamsConfig extends NodeParamsConfig { /** @param width */ width = ParamConfig.FLOAT(DEFAULTS.width, { range: [0, 1], rangeLocked: [true, true], }); } const ParamsConfig = new StereoWidenerAudioParamsConfig(); export class StereoWidenerAudioNode extends TypedAudioNode<StereoWidenerAudioParamsConfig> { override paramsConfig = ParamsConfig; static override type() { return 'stereoWidener'; } override initializeNode() { this.io.inputs.setCount(1); } override cook(inputContents: AudioBuilder[]) { const audioBuilder = inputContents[0]; const effect = new StereoWidener(this.pv.width); const inputNode = audioBuilder.audioNode(); if (inputNode) { inputNode.connect(effect); } audioBuilder.setAudioNode(effect); this.setAudioBuilder(audioBuilder); } }