Skip to content
Voro
  1. Audio
  2. Audio FX

Harmonizer

Harmonizer adds pitch-shifted voices to a source and mixes them into one stereo output. By default it stacks fixed intervals above and below the input. It can also follow harmony from the music lane, taking its notes from a chord or scale source.

Insert it inline on a monophonic source such as a voice or lead. Wire audio into the audio input and route the output onward. For a fixed harmony, set the number of voices and the per-voice intervals. To follow live harmony, wire a chord or scale source and switch the mode so the voices track the incoming notes.

  • Input 0: audio is the signal to harmonize. It accepts mono or stereo PCM and is required.
  • Input 1: scale accepts a scale ring so voices stay in key. Optional.
  • Input 2: chord accepts a chord ring for chord-follow harmony. Optional.
  • Output 0: out emits stereo audio with the harmony mixed in.
  • Mode: where harmony comes from: fixed intervals, or following the chord input.
  • Numvoices: how many shifted voices are mixed in.
  • Interval1 to IntervalN: semitone offset for each voice in interval mode.
  • Wetdry: balance between the dry input and the harmonized voices.
  • Rootnote: root used when resolving scale and chord harmony.
  • A4hz: tuning reference for pitch conversion.
  • Interval mode is the simplest path: set the number of voices and the intervals you want and play.
  • Chord-follow mode lets symbolic harmony from the music operators drive the harmonized voices, the same way Bassline takes its harmony from a chord source.
  • Harmonizing works best on clean monophonic input. Dense or noisy sources track less reliably.

Inputs

  • in row required
    audio_pcm_f32_mono_v1audio_pcm_f32_stereo_v1
  • scale row
    scale_v1
  • chord row
    chord_event_v1
  • root row
    control_f32_v1
  • voices row
    note_voices_f32_v1

Outputs

  • out row
    audio_pcm_f32_stereo_v1
Numvoices (Numvoices) Int op('harmonizer').par.Numvoices
Default:
3
Range:
1 to 8
Interval1 (Interval1) Int op('harmonizer').par.Interval1
Default:
0
Range:
-24 to 24
Interval2 (Interval2) Int op('harmonizer').par.Interval2
Default:
4
Range:
-24 to 24
Interval3 (Interval3) Int op('harmonizer').par.Interval3
Default:
7
Range:
-24 to 24
Interval4 (Interval4) Int op('harmonizer').par.Interval4
Default:
12
Range:
-24 to 24
Interval5 (Interval5) Int op('harmonizer').par.Interval5
Default:
-12
Range:
-24 to 24
Interval6 (Interval6) Int op('harmonizer').par.Interval6
Default:
16
Range:
-24 to 24
Interval7 (Interval7) Int op('harmonizer').par.Interval7
Default:
19
Range:
-24 to 24
Interval8 (Interval8) Int op('harmonizer').par.Interval8
Default:
24
Range:
-24 to 24
Wetdry (Wetdry) Float op('harmonizer').par.Wetdry
Default:
0.5
Range:
0 to 1
Mode (Mode) Menu op('harmonizer').par.Mode
Default:
intervals
Options:
intervals, chord_event, note_voices
Rootmode (Rootmode) Menu op('harmonizer').par.Rootmode
Default:
param_midi
Options:
param_midi, control_midi, control_hertz
Rootnote (Rootnote) Float op('harmonizer').par.Rootnote
Default:
60
Range:
0 to 127
A4hz (A4hz) Float op('harmonizer').par.A4hz
Default:
440
Range:
1 to 20000
Rootchannel (Rootchannel) Int op('harmonizer').par.Rootchannel
Default:
0
Range:
0 to 63
Chordvoicing (Chordvoicing) Menu op('harmonizer').par.Chordvoicing
Default:
root
Options:
root, first_inv, second_inv, spread, drop2
Chordoctave (Chordoctave) Int op('harmonizer').par.Chordoctave
Default:
0
Range:
-4 to 4