UNPKG

@polygonjs/polygonjs

Version:

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

52 lines (51 loc) 1.53 kB
"use strict"; import { TypedAudioNode } from "./_Base"; import { NodeParamsConfig, ParamConfig } from "../utils/params/ParamsConfig"; import { AudioBuilder } from "../../../core/audio/AudioBuilder"; import { ENVELOPE_DEFAULTS } from "./Envelope"; import { Synth } from "tone/build/esm/instrument/Synth"; import { AudioType } from "../../poly/registers/nodes/types/Audio"; const SYNTH_DEFAULTS = { detune: 0, portamento: 0 }; class SynthAudioParamsConfig extends NodeParamsConfig { constructor() { super(...arguments); /** @param The glide time between notes. */ this.portamento = ParamConfig.FLOAT(SYNTH_DEFAULTS.portamento, { range: [0, 1], rangeLocked: [true, false] }); } } const ParamsConfig = new SynthAudioParamsConfig(); export class SynthAudioNode extends TypedAudioNode { constructor() { super(...arguments); this.paramsConfig = ParamsConfig; } static type() { return AudioType.SYNTH; } initializeNode() { this.io.inputs.setCount(0, 1); } cook(inputContents) { const envelopeBuilder = inputContents[0]; const envelopeParams = envelopeBuilder.envelopeParams() || ENVELOPE_DEFAULTS; const synth = new Synth({ volume: 0, oscillator: { type: "amtriangle", harmonicity: 0.5, modulationType: "sine" }, envelope: envelopeParams, portamento: this.pv.portamento }); const audioBuilder = new AudioBuilder(); audioBuilder.setInstrument(synth); this.setAudioBuilder(audioBuilder); } }