• Jump To … +
    index.js conga.js cowbell.js hihat.js kick.js mini.js monosynth.js pluck.js snare.js tom.js tonewheel.js delay.js feedback-comb-filter.js filter.js gain-envelope.js gain.js lfo.js mono-buffer.js noise.js osc-bank.js osc.js pulse.js sample.js soft-clipper.js source.js vca.js vcf.js vco.js wave-shaper.js synth.js
  • gain-envelope.js

  • ¶
    import { triggerAdsr } from "../synth"
    import Gain from "./gain"
    
    const SILENCE = { gain: 0 }
    /**
     * Create a Gain envelope. Any audio source can be connected to an
     * audio envelope.
     *
     * @example
     * const [osc, adsr] = connect(Osc(ac), GainEnvelope(ac))
     * adsr.trigger()
     */
    export default function GainEnvelope (ac, state) {
      const env = Gain(ac, SILENCE)
      state = Object.assign({}, GainEnvelope.defaultState, state)
    
      env.update = (newState) => {
        state = Object.assign(state, newState)
        return env
      }
      env.inspect = () => state
    
      env.trigger = function (time, dur) {
        if (!time) time = ac.currentTime
        const release = triggerAdsr(time, env.gain, state)
        if (dur) release(time + dur)
        return release
      }
      return env
    }
    
    GainEnvelope.params = [
      "base",
      "peak",
      "attack",
      "decay",
      "sustain",
      "release",
    ]
  • ¶

    default values

    GainEnvelope.defaultState = {
      peak: 1,
      attack: 0.01,
      decay: 0.2,
    }