@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
55 lines (45 loc) • 1.39 kB
text/typescript
/**
* creates a monoSynth
*
*
*/
import {TypedAudioNode} from './_Base';
import {NodeParamsConfig} from '../utils/params/ParamsConfig';
import {AudioBuilder} from '../../../core/audio/AudioBuilder';
import {MonoSynth} from 'tone/build/esm/instrument/MonoSynth';
import {PolySynth} from 'tone/build/esm/instrument/PolySynth';
import {ENVELOPE_DEFAULTS} from './Envelope';
import { AudioType } from '../../poly/registers/nodes/types/Audio';
class MonoSynthAudioParamsConfig extends NodeParamsConfig {}
const ParamsConfig = new MonoSynthAudioParamsConfig();
export class MonoSynthAudioNode extends TypedAudioNode<MonoSynthAudioParamsConfig> {
override paramsConfig = ParamsConfig;
static override type() {
return AudioType.MONO_SYNTH;
}
override initializeNode() {
this.io.inputs.setCount(0, 1);
}
override cook(inputContents: AudioBuilder[]) {
const envelopeBuilder = inputContents[0];
const envelopeParams = envelopeBuilder.envelopeParams() || ENVELOPE_DEFAULTS;
const synth = new PolySynth(MonoSynth, {
volume: -8,
oscillator: {
type: 'square8',
},
envelope: envelopeParams,
filterEnvelope: {
attack: 0.001,
decay: 0.7,
sustain: 0.1,
release: 0.8,
baseFrequency: 300,
octaves: 4,
},
});
const audioBuilder = new AudioBuilder();
audioBuilder.setInstrument(synth);
this.setAudioBuilder(audioBuilder);
}
}