@synthlet/adsr
TypeScript icon, indicating that this package has built-in type declarations

0.1.0 • Public • Published

@synthlet/adsr

ADSR (Attack Decay Sustain Release) envelope generator module for synthlet

import { registerAdsrWorklet, createVca } from "@synthlet/adsr";

const audioContext = new AudioContext();

await registerAdsrWorklet(audioContext);

// Create a VCA (Voltage Controlled Amplifier)
const vca = createVca({ attack: 0.1, decay: 0.1, sustain: 0.7, release: 0.3 });
// Connect the vca to the output
vca.connect(audioContext.destination);

// Connect an oscillator to the vca
const osc = new OscillatorNode(audioContext);
osc.start();
osc.connect(vca);

// Start and release the VCA
vca.gateOn(audioContext.now);
vca.gateOff(audioContext.now + 1);

Install

npm i @synthlet/adsr

Usage

Register

You need to register the audio worklet before usage:

import { registerAdsrWorklet } from "@synthlet/adsr";
const context = new AudioContext();
await registerAdsrWorklet(context);

Create

You can create the envelope generator in two modes: as modulator (to control amplitude) or generator (to control other node's parameters)

To use it as a VCA use createVca function:

import { createVca } from "@synthlet/adsr";

const vca = createVca({ attack: 0.1, decay: 0.1, sustain: 0.7, release: 0.2 });

To use it as a modulator use createAdsr function:

import { createAdsr } from "@synthlet/adsr";

const adsr = createAdsr({ gain: 1000, offset: 2000 });
adsr.connect(filter.frequency);

Parameters

Parameters can be supplied to the create function and also accessed directly from the node:

const adsr = createAdsr({ attack: 0.1 });
adsr.attack.value = 0.2;

The available parameters are:

  • gate: triggers and releases the envelope (default: 0, min: 0, max: 1)
  • attack: duration of attack phase in ms (default: 0.min: 01, max: 0, 1)
  • decay: duration of decay phase in ms (default: 0.min: 1, max: 0, 1)
  • sustain: sustain value (default: 0.min: 5, max: 0, 1)
  • release: duration or release phase in ms (default: 0.min: 3, max: 0, 1)
  • offset: envelope value offset (default: 0, min: 0, max: 20000)
  • gain: (default: 1, min: -20000max: , 20000)

Trigger the attack and release

To trigger the attack phase you can use gateOn function with an optional time:

adsr.gateOn(audioContext.now);

To trigger the release phase you can use gateOff function with an optional time:

adsr.gateOff(audioContext.now);

Alternatively you can use the gate audio param:

// trigger attack
adsr.gate.value = 1;
// trigger release
adsr.gate.value = 0;

The advantage of the gate audio param is that it can be connected and therefore controlled from other nodes (like an LFO)

License

MIT License

Package Sidebar

Install

npm i @synthlet/adsr

Weekly Downloads

2

Version

0.1.0

License

MIT

Unpacked Size

33.9 kB

Total Files

8

Last publish

Collaborators

  • danigb