Skip to content
Voro
  1. Audio
  2. Compose

Canon

Canon takes a stream of note voices and copies it into several layers that move at related tempo ratios. Each layer plays the same material at a different speed or phase, so a single line becomes a web of interlocking parts. It is a fast way to build dense polyphony or Nancarrow-style tempo canons from one source.

Wire your note source into Input 0 and a timeline clock into Input 1. Set Voicecount, choose a Mode, and dial the per-layer Ratio values. The out voices carry every layer at once and drive a polyphonic instrument. Use the input mode to decide whether Canon follows your live notes or pools them first.

  • Input 0: voices note voices to layer. Required.
  • Input 1: timeline timeline clock. Required.
  • Output 0: out emits all canon layers as note voices.
  • Mode: layer relationship. raw, mensural, phasing, hocket, crab, or strum.
  • Inputmode: snapshot, hold, soak, or swarm for how live notes are gathered.
  • Voicecount: how many layers are generated, up to eight.
  • Ratio1 to Ratio8: the tempo ratio for each layer.
  • Gate, Density, Velocityscale: note length, how many notes fire, and level.
  • Spread: pitch offset between layers in semitones.
  • Offsetbeats and Phasejitter: timing offset and randomized phase between layers.
  • Humanize: timing and velocity looseness.
  • Soak and Inertia: input pool fill rate and stability.
  • Foldrange with Low and High: fold layered pitches back into a note range.
  • Sourcewalk and Seed: source stepping behavior and repeatable randomness.
  • More voices and wider ratios make denser, more complex textures.
  • crab runs a layer in reverse and hocket splits notes across layers for interlocking patterns.
  • Use Foldrange with Low and High to keep fast high layers from drifting out of a usable register.

Inputs

  • voices row required
    note_voices_f32_v1
  • timeline row
    timeline_state_f32_v1

Outputs

  • out row
    note_voices_f32_v1
Mode (Mode) Menu op('canon').par.Mode
Default:
raw
Options:
raw, mensural, phasing, hocket, crab, strum
Inputmode (Inputmode) Menu op('canon').par.Inputmode
Default:
soak
Options:
snapshot, hold, soak, swarm
Voicecount (Voicecount) Int op('canon').par.Voicecount
Default:
4
Range:
1 to 8
Gate (Gate) Float op('canon').par.Gate
Default:
0.18
Range:
0 to 1
Density (Density) Float op('canon').par.Density
Default:
1
Range:
0 to 1
Velocityscale (Velocityscale) Float op('canon').par.Velocityscale
Default:
0.9
Range:
0 to 2
Spread (Spread) Float op('canon').par.Spread
Default:
7
Range:
-36 to 36
Offsetbeats (Offsetbeats) Float op('canon').par.Offsetbeats
Default:
0.125
Range:
-8 to 8
Phasejitter (Phasejitter) Float op('canon').par.Phasejitter
Default:
0
Range:
0 to 1
Humanize (Humanize) Float op('canon').par.Humanize
Default:
0
Range:
0 to 1
Soak (Soak) Float op('canon').par.Soak
Default:
0.55
Range:
0 to 1
Inertia (Inertia) Float op('canon').par.Inertia
Default:
0.15
Range:
0 to 1
Ratio1 (Ratio1) Float op('canon').par.Ratio1
Default:
1
Range:
-16 to 16
Ratio2 (Ratio2) Float op('canon').par.Ratio2
Default:
1.25
Range:
-16 to 16
Ratio3 (Ratio3) Float op('canon').par.Ratio3
Default:
1.5
Range:
-16 to 16
Ratio4 (Ratio4) Float op('canon').par.Ratio4
Default:
1.6667
Range:
-16 to 16
Ratio5 (Ratio5) Float op('canon').par.Ratio5
Default:
0.75
Range:
-16 to 16
Ratio6 (Ratio6) Float op('canon').par.Ratio6
Default:
2
Range:
-16 to 16
Ratio7 (Ratio7) Float op('canon').par.Ratio7
Default:
2.5
Range:
-16 to 16
Ratio8 (Ratio8) Float op('canon').par.Ratio8
Default:
3
Range:
-16 to 16
Sourcewalk (Sourcewalk) Toggle op('canon').par.Sourcewalk
Default:
On
Options:
Off, On
Foldrange (Foldrange) Toggle op('canon').par.Foldrange
Default:
On
Options:
Off, On
Low (Low) Float op('canon').par.Low
Default:
36
Range:
0 to 127
High (High) Float op('canon').par.High
Default:
96
Range:
0 to 127
Seed (Seed) Int op('canon').par.Seed
Default:
23
Range:
-100000 to 100000