{
  "$type": "at.atmosynth.module",
  "descriptionVersion": 1,
  "moduleId": "chorus",
  "versionKey": "1",
  "name": "Chorus",
  "description": "Two of the same sound, one of them a little late and always moving — which is what makes one voice sound like several. There are two moving copies, one to each side, wandering opposite ways: what widens the sound is the two disagreeing. Delay is how far behind they sit, Depth how far they wander either side of that, and Rate how quickly; slow and shallow is a chorus, and a shorter delay with more depth heads towards a flanger. Nothing goes round again, so it thickens rather than repeats. Dry level is what came in, straight up the middle, Wet level the two moving copies, and Spread how far apart they are placed. Rate is an input as well as a knob.",
  "audioInputs": [
    {
      "id": "in",
      "label": "In"
    },
    {
      "id": "rate",
      "label": "Rate"
    }
  ],
  "audioOutputs": [
    {
      "id": "out",
      "label": "Out"
    }
  ],
  "midiInputs": [],
  "nodes": [
    {
      "id": "in",
      "kind": "moduleInput",
      "options": {
        "input": "in"
      }
    },
    {
      "id": "dry",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "dlL",
      "kind": "delay",
      "options": {
        "maxDelayTime": "0.1"
      }
    },
    {
      "id": "dlR",
      "kind": "delay",
      "options": {
        "maxDelayTime": "0.1"
      }
    },
    {
      "id": "wetL",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "wetR",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "panL",
      "kind": "stereoPanner",
      "options": {}
    },
    {
      "id": "panR",
      "kind": "stereoPanner",
      "options": {}
    },
    {
      "id": "lfo",
      "kind": "oscillator",
      "options": {
        "type": "sine"
      }
    },
    {
      "id": "depthgain",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "invert",
      "kind": "waveShaper",
      "options": {
        "curve": [
          1,
          -1
        ]
      }
    },
    {
      "id": "spread",
      "kind": "constantSource",
      "options": {}
    },
    {
      "id": "spreadgain",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "spreadinvert",
      "kind": "waveShaper",
      "options": {
        "curve": [
          1,
          -1
        ]
      }
    },
    {
      "id": "ratein",
      "kind": "moduleInput",
      "options": {
        "input": "rate"
      }
    },
    {
      "id": "ratedepth",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "out",
      "kind": "moduleOutput",
      "options": {
        "output": "out"
      }
    }
  ],
  "connections": [
    {
      "from": {
        "node": "in",
        "output": 0
      },
      "to": {
        "node": "dry",
        "input": 0
      }
    },
    {
      "from": {
        "node": "dry",
        "output": 0
      },
      "to": {
        "node": "out",
        "input": 0
      }
    },
    {
      "from": {
        "node": "in",
        "output": 0
      },
      "to": {
        "node": "dlL",
        "input": 0
      }
    },
    {
      "from": {
        "node": "in",
        "output": 0
      },
      "to": {
        "node": "dlR",
        "input": 0
      }
    },
    {
      "from": {
        "node": "dlL",
        "output": 0
      },
      "to": {
        "node": "wetL",
        "input": 0
      }
    },
    {
      "from": {
        "node": "dlR",
        "output": 0
      },
      "to": {
        "node": "wetR",
        "input": 0
      }
    },
    {
      "from": {
        "node": "wetL",
        "output": 0
      },
      "to": {
        "node": "panL",
        "input": 0
      }
    },
    {
      "from": {
        "node": "wetR",
        "output": 0
      },
      "to": {
        "node": "panR",
        "input": 0
      }
    },
    {
      "from": {
        "node": "panL",
        "output": 0
      },
      "to": {
        "node": "out",
        "input": 0
      }
    },
    {
      "from": {
        "node": "panR",
        "output": 0
      },
      "to": {
        "node": "out",
        "input": 0
      }
    },
    {
      "from": {
        "node": "lfo",
        "output": 0
      },
      "to": {
        "node": "depthgain",
        "input": 0
      }
    },
    {
      "from": {
        "node": "depthgain",
        "output": 0
      },
      "to": {
        "node": "dlR",
        "param": "delayTime"
      }
    },
    {
      "from": {
        "node": "depthgain",
        "output": 0
      },
      "to": {
        "node": "invert",
        "input": 0
      }
    },
    {
      "from": {
        "node": "invert",
        "output": 0
      },
      "to": {
        "node": "dlL",
        "param": "delayTime"
      }
    },
    {
      "from": {
        "node": "spread",
        "output": 0
      },
      "to": {
        "node": "spreadgain",
        "input": 0
      }
    },
    {
      "from": {
        "node": "spreadgain",
        "output": 0
      },
      "to": {
        "node": "panR",
        "param": "pan"
      }
    },
    {
      "from": {
        "node": "spreadgain",
        "output": 0
      },
      "to": {
        "node": "spreadinvert",
        "input": 0
      }
    },
    {
      "from": {
        "node": "spreadinvert",
        "output": 0
      },
      "to": {
        "node": "panL",
        "param": "pan"
      }
    },
    {
      "from": {
        "node": "ratein",
        "output": 0
      },
      "to": {
        "node": "ratedepth",
        "input": 0
      }
    },
    {
      "from": {
        "node": "ratedepth",
        "output": 0
      },
      "to": {
        "node": "lfo",
        "param": "frequency"
      }
    }
  ],
  "automation": [],
  "parameters": [
    {
      "id": "rate",
      "label": "Rate (Hz)",
      "range": {
        "min": "0.05",
        "max": "8"
      },
      "default": "0.6",
      "targets": [
        {
          "node": "lfo",
          "param": "frequency"
        }
      ]
    },
    {
      "id": "rateAmount",
      "label": "Rate amount (Hz)",
      "range": {
        "min": "0",
        "max": "4"
      },
      "default": "0.5",
      "targets": [
        {
          "node": "ratedepth",
          "param": "gain"
        }
      ]
    },
    {
      "id": "shape",
      "label": "Shape",
      "values": [
        "sine",
        "triangle"
      ],
      "default": "sine",
      "targets": [
        {
          "node": "lfo",
          "option": "type"
        }
      ]
    },
    {
      "id": "delay",
      "label": "Delay (s)",
      "range": {
        "min": "0.006",
        "max": "0.05"
      },
      "default": "0.02",
      "targets": [
        {
          "node": "dlL",
          "param": "delayTime"
        },
        {
          "node": "dlR",
          "param": "delayTime"
        }
      ]
    },
    {
      "id": "depth",
      "label": "Depth (s)",
      "range": {
        "min": "0",
        "max": "0.005"
      },
      "default": "0.003",
      "targets": [
        {
          "node": "depthgain",
          "param": "gain"
        }
      ]
    },
    {
      "id": "dry",
      "label": "Dry level",
      "range": {
        "min": "0",
        "max": "1"
      },
      "default": "1",
      "targets": [
        {
          "node": "dry",
          "param": "gain"
        }
      ]
    },
    {
      "id": "wet",
      "label": "Wet level",
      "range": {
        "min": "0",
        "max": "1"
      },
      "default": "0.7",
      "targets": [
        {
          "node": "wetL",
          "param": "gain"
        },
        {
          "node": "wetR",
          "param": "gain"
        }
      ]
    },
    {
      "id": "spread",
      "label": "Spread",
      "range": {
        "min": "0",
        "max": "1"
      },
      "default": "1",
      "targets": [
        {
          "node": "spreadgain",
          "param": "gain"
        }
      ]
    }
  ],
  "sampleSlots": [],
  "createdAt": "2026-08-29T00:00:00.000Z"
}