JSPM

@synthlet/adsr

0.1.0
    • ESM via JSPM
    • ES Module Entrypoint
    • Export Map
    • Keywords
    • License
    • Repository URL
    • TypeScript Types
    • README
    • Created
    • Published
    • Downloads 8
    • Score
      100M100P100Q37820F
    • License MIT

    Adsr generator audio worklet

    Package Exports

    • @synthlet/adsr
    • @synthlet/adsr/dist/index.js
    • @synthlet/adsr/dist/index.mjs

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@synthlet/adsr) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    Readme

    @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