{
  "format": "forge.graph/0",
  "name": "Harmonizer",
  "author": "Chirp",
  "license": "CC-BY-4.0",
  "remixed_from": null,
  "description": "Adds a second voice at a fixed interval: an octave down, a fourth, a fifth or an octave up. Detune lets the voice drift a little, like a second player.",
  "tags": ["pitch", "harmonizer", "octave"],
  "face": {
    "knobs": [
      { "id": "mix", "label": "Mix", "default": 0.4,
        "controls": [ { "target": "mixer.mix", "from": 0, "to": 1 } ] },
      { "id": "detune", "label": "Detune", "default": 0.2,
        "controls": [ { "target": "mods.drift", "from": 0, "to": 0.03, "curve": "square" } ] },
      { "id": "tone", "label": "Tone", "default": 0.6,
        "controls": [ { "target": "tone.cutoff", "from": 1200, "to": 12000, "curve": "exp" } ] }
    ],
    "menus": [
      { "id": "interval", "label": "Interval", "options": ["Oct down", "Fourth", "Fifth", "Oct up"], "default": 2,
        "controls": [ { "target": "voice.ratio", "values": [0.5, 1.3348, 1.4983, 2] } ] }
    ]
  },
  "nodes": {
    "wander": { "block": "random", "mono": true, "set": { "rate": 0.7, "seed": 17 } },
    "voice": { "block": "pitch", "set": { "window": 0.045 }, "in": { "x": "in" } },
    "tone": { "block": "onepole", "in": { "x": "voice" } },
    "mixer": { "block": "blend", "in": { "dry": "in", "wet": "tone" } }
  },
  "mods": {
    "drift": { "from": "wander", "target": "voice.ratio", "amount": 0 }
  },
  "out": "mixer"
}
