Skip to content

CV Generators

CV (Control Voltage) generators produce modulation signals to dynamically control parameters of other modules.

LFO (Low Frequency Oscillator)

Creates cyclic modulation at sub-audio and audio rates.

Rate: 0.01 Hz - 20 Hz (or higher)
Waveforms: Sine, triangle, square, sawtooth
API: LFO

tsx
<LFO output={ref} rate={2} waveform="sine" depth={1} />

Common uses:

  • Vibrato (pitch modulation)
  • Tremolo (amplitude modulation)
  • Filter sweeps
  • Panning modulation

ADSR (Envelope Generator)

Creates attack-decay-sustain-release envelopes for one-shot modulation.

Stages: Attack → Decay → Sustain → Release
API: ADSR

tsx
<ADSR output={ref} attack={0.1} decay={0.2} sustain={0.7} release={0.5}>
  {({ trigger, release }) => (
    <button onMouseDown={trigger} onMouseUp={release}>
      Trigger
    </button>
  )}
</ADSR>

Common uses:

  • Filter envelopes
  • Amplitude envelopes
  • Pitch envelopes
  • Parameter automation

Sequencer

Creates stepped patterns with multiple values.

Steps: 1-64 steps (configurable)
API: Sequencer

tsx
<Sequencer output={ref} steps={[1, 0, 0.5, 0, 0.7, 0, 1, 0]} bpm={120}>
  {({ isPlaying, play, stop }) => (
    <button onClick={isPlaying ? stop : play}>
      {isPlaying ? 'Stop' : 'Play'}
    </button>
  )}
</Sequencer>

Common uses:

  • Melodic sequences
  • Rhythmic patterns
  • Parameter stepping
  • Gating patterns

Clock

Provides timing/tempo synchronization.

BPM: 20-300 BPM
API: Clock

tsx
<Clock output={ref} bpm={120} />

Common uses:

  • Syncing LFOs
  • Syncing sequencers
  • Master tempo control
  • Rhythmic modulation

Usage Examples

Filter Sweep with LFO

tsx
const audio = useModStream();
const lfo = useModStream();
const output = useModStream();

<ToneGenerator output={audio} frequency={110} />
<LFO output={lfo} rate={0.5} waveform="sine" />
<Filter
  input={audio}
  output={output}
  cvInput={lfo}
  cvTarget="frequency"
  cvAmount={5000}
/>

Envelope-Controlled Filter

tsx
const audio = useModStream();
const env = useModStream();
const output = useModStream();

<NoiseGenerator output={audio} />
<ADSR output={env} attack={0.01} decay={0.1} sustain={0} release={0.2} />
<Filter
  input={audio}
  output={output}
  cvInput={env}
  cvTarget="frequency"
  cvAmount={8000}
/>

Sequenced Melody

tsx
const seq = useModStream();
const tone = useModStream();

<Sequencer output={seq} steps={[0, 0.25, 0.5, 0.75, 1, 0.75, 0.5, 0.25]} />
<ToneGenerator
  output={tone}
  cvInput={seq}
  cvTarget="frequency"
  cvAmount={880}
  frequency={220}
/>

Next Steps

Released under the MIT License.