{
  "$type": "at.atmosynth.module",
  "descriptionVersion": 1,
  "moduleId": "delay",
  "versionKey": "2",
  "name": "Delay",
  "description": "Repeats what passes through it. Delay time is how long a repeat waits, Feedback how much of it goes round again — the repeats die away unless that is near 1, where they will not. Dry level is what came in and Wet level the repeats, summed rather than crossfaded, so each is set on its own. Delay time is an input as well as a knob: a slow LFO into Time bends the repeats as they move, which is where chorus and flanging come from. The tail outlives the note that made it, so give this one instance for the whole patch — after the mixer, or declared shared — or each note takes its own repeats with it when it ends. Feedback and Wet are inputs too, each with a depth for how far a signal there moves it. Feedback is held inside the knob's own range however hard its input pushes, so a modulated delay can swell towards endless repeats and never past them into a runaway.",
  "audioInputs": [
    {
      "id": "in",
      "label": "In"
    },
    {
      "id": "time",
      "label": "Time"
    },
    {
      "id": "feedback",
      "label": "Feedback"
    },
    {
      "id": "wet",
      "label": "Wet"
    }
  ],
  "audioOutputs": [
    {
      "id": "out",
      "label": "Out"
    }
  ],
  "midiInputs": [],
  "nodes": [
    {
      "id": "in",
      "kind": "moduleInput",
      "options": {
        "input": "in"
      }
    },
    {
      "id": "dry",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "dl",
      "kind": "delay",
      "options": {
        "maxDelayTime": 2
      }
    },
    {
      "id": "fb",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "wet",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "timein",
      "kind": "moduleInput",
      "options": {
        "input": "time"
      }
    },
    {
      "id": "timedepth",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "out",
      "kind": "moduleOutput",
      "options": {
        "output": "out"
      }
    },
    {
      "id": "feedbackin",
      "kind": "moduleInput",
      "options": {
        "input": "feedback"
      }
    },
    {
      "id": "feedbackbase",
      "kind": "constantSource",
      "options": {}
    },
    {
      "id": "feedbackdepth",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "feedbackclamp",
      "kind": "waveShaper",
      "options": {
        "curve": [
          -1,
          -1,
          -1,
          -1,
          -1,
          -1,
          -1,
          -1,
          -1,
          -1,
          -1,
          -1,
          -1,
          -1,
          -1,
          -1,
          -1,
          -1,
          -1,
          -1,
          -1,
          "-0.95",
          "-0.9",
          "-0.85",
          "-0.8",
          "-0.75",
          "-0.7",
          "-0.65",
          "-0.6",
          "-0.55",
          "-0.5",
          "-0.45",
          "-0.4",
          "-0.35",
          "-0.3",
          "-0.25",
          "-0.2",
          "-0.15",
          "-0.1",
          "-0.05",
          "-0.05"
        ]
      }
    },
    {
      "id": "wetin",
      "kind": "moduleInput",
      "options": {
        "input": "wet"
      }
    },
    {
      "id": "wetdepth",
      "kind": "gain",
      "options": {}
    }
  ],
  "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": "dl",
        "input": 0
      }
    },
    {
      "from": {
        "node": "dl",
        "output": 0
      },
      "to": {
        "node": "fb",
        "input": 0
      }
    },
    {
      "from": {
        "node": "fb",
        "output": 0
      },
      "to": {
        "node": "dl",
        "input": 0
      }
    },
    {
      "from": {
        "node": "dl",
        "output": 0
      },
      "to": {
        "node": "wet",
        "input": 0
      }
    },
    {
      "from": {
        "node": "wet",
        "output": 0
      },
      "to": {
        "node": "out",
        "input": 0
      }
    },
    {
      "from": {
        "node": "timein",
        "output": 0
      },
      "to": {
        "node": "timedepth",
        "input": 0
      }
    },
    {
      "from": {
        "node": "timedepth",
        "output": 0
      },
      "to": {
        "node": "dl",
        "param": "delayTime"
      }
    },
    {
      "from": {
        "node": "feedbackbase",
        "output": 0
      },
      "to": {
        "node": "feedbackclamp",
        "input": 0
      }
    },
    {
      "from": {
        "node": "feedbackdepth",
        "output": 0
      },
      "to": {
        "node": "feedbackclamp",
        "input": 0
      }
    },
    {
      "from": {
        "node": "feedbackin",
        "output": 0
      },
      "to": {
        "node": "feedbackdepth",
        "input": 0
      }
    },
    {
      "from": {
        "node": "feedbackclamp",
        "output": 0
      },
      "to": {
        "node": "fb",
        "param": "gain"
      }
    },
    {
      "from": {
        "node": "wetin",
        "output": 0
      },
      "to": {
        "node": "wetdepth",
        "input": 0
      }
    },
    {
      "from": {
        "node": "wetdepth",
        "output": 0
      },
      "to": {
        "node": "wet",
        "param": "gain"
      }
    }
  ],
  "automation": [],
  "parameters": [
    {
      "id": "time",
      "label": "Delay time (s)",
      "range": {
        "min": "0.01",
        "max": "2"
      },
      "default": "0.3",
      "targets": [
        {
          "node": "dl",
          "param": "delayTime"
        }
      ]
    },
    {
      "id": "timeAmount",
      "label": "Time depth (s)",
      "range": {
        "min": "-0.05",
        "max": "0.05"
      },
      "default": "0.002",
      "targets": [
        {
          "node": "timedepth",
          "param": "gain"
        }
      ]
    },
    {
      "id": "feedback",
      "label": "Feedback",
      "range": {
        "min": "0",
        "max": "0.95"
      },
      "default": "0.35",
      "targets": [
        {
          "node": "feedbackbase",
          "param": "offset"
        }
      ]
    },
    {
      "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.5",
      "targets": [
        {
          "node": "wet",
          "param": "gain"
        }
      ]
    },
    {
      "id": "feedbackAmount",
      "label": "Feedback depth",
      "range": {
        "min": "-0.95",
        "max": "0.95"
      },
      "default": "0.3",
      "targets": [
        {
          "node": "feedbackdepth",
          "param": "gain"
        }
      ]
    },
    {
      "id": "wetAmount",
      "label": "Wet depth",
      "range": {
        "min": "-1",
        "max": "1"
      },
      "default": "0.5",
      "targets": [
        {
          "node": "wetdepth",
          "param": "gain"
        }
      ]
    }
  ],
  "sampleSlots": [],
  "createdAt": "2026-09-21T00:00:00.000Z"
}