{
  "$type": "at.atmosynth.module",
  "descriptionVersion": 1,
  "moduleId": "drive",
  "versionKey": "1",
  "name": "Drive",
  "description": "Warm saturation: the sound pushed into a soft curve that rounds its peaks off rather than cutting them, so it thickens and grows a gentle edge instead of buzzing. Drive is how hard it is pushed. Low down only the loudest moments are leant on and the sound is fuller rather than different; turned up it compresses, sustains and rasps, and at the top of its range what is left is close to a square with its corners worn off. A plain saturation of that kind adds only odd harmonics, which is what makes a clipped sound hollow and hard. Warmth is what adds the even ones: it leans the curve to one side, so the top of the wave is rounded sooner than the bottom, the way a valve stage is, and the second harmonic that puts under the note is an octave above it and sits with it rather than against it. At nothing the curve is symmetrical and the sound is clean-edged; the more there is, the rounder and thicker. Leaning a curve to one side moves the middle of the sound as well, so the module takes back exactly where silence would have sat, and the drift that is left while a loud note sounds is filtered away below anything anybody can hear — silence in is silence out, at every setting. Tone is a gentle slope over the top of the driven copy, where the fizz a harder drive makes lives: down at a kilohertz or two it is a dark, woolly amplifier, wide open it is bright. Dry/wet keeps the sound that went in beside the driven one, which is how a saturation sits under a clean sound instead of replacing it, and Level is how loud the driven copy is, because driving a sound harder also makes it louder. The curve is worked out at four times the rate and filtered back down, so the harmonics a hard drive makes above what the rate can hold are not folded back under the note, and the clean half runs through the same oversampler with a straight line for a curve, so the two halves stay aligned sample for sample when they are blended.",
  "audioInputs": [
    {
      "id": "in",
      "label": "In"
    }
  ],
  "audioOutputs": [
    {
      "id": "out",
      "label": "Out"
    }
  ],
  "midiInputs": [],
  "nodes": [
    {
      "id": "in",
      "kind": "moduleInput",
      "options": {
        "input": "in"
      }
    },
    {
      "id": "one",
      "kind": "constantSource",
      "options": {}
    },
    {
      "id": "dry",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "drytrim",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "dryflat",
      "kind": "waveShaper",
      "options": {
        "curve": "linear",
        "oversample": "4x"
      }
    },
    {
      "id": "drylift",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "drive",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "span",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "bias",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "shaper",
      "kind": "waveShaper",
      "options": {
        "curve": "soft",
        "oversample": "4x"
      }
    },
    {
      "id": "rest",
      "kind": "waveShaper",
      "options": {
        "curve": "soft",
        "oversample": "4x"
      }
    },
    {
      "id": "restinvert",
      "kind": "waveShaper",
      "options": {
        "curve": [
          1,
          -1
        ]
      }
    },
    {
      "id": "sat",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "dcblock",
      "kind": "biquadFilter",
      "options": {
        "type": "highpass"
      }
    },
    {
      "id": "tone",
      "kind": "biquadFilter",
      "options": {
        "type": "lowpass"
      }
    },
    {
      "id": "level",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "wet",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "mixdepth",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "mixinvert",
      "kind": "waveShaper",
      "options": {
        "curve": [
          1,
          -1
        ]
      }
    },
    {
      "id": "spanset",
      "kind": "waveShaper",
      "options": {
        "curve": [
          "0.6",
          "-0.6"
        ]
      }
    },
    {
      "id": "drytrimset",
      "kind": "waveShaper",
      "options": {
        "curve": [
          0,
          "-0.875"
        ]
      }
    },
    {
      "id": "dryliftset",
      "kind": "waveShaper",
      "options": {
        "curve": [
          0,
          7
        ]
      }
    },
    {
      "id": "dcblockset",
      "kind": "waveShaper",
      "options": {
        "curve": [
          330,
          -330
        ]
      }
    },
    {
      "id": "toneqset",
      "kind": "waveShaper",
      "options": {
        "curve": [
          "4.0103",
          "-4.0103"
        ]
      }
    },
    {
      "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": "drytrim",
        "input": 0
      }
    },
    {
      "from": {
        "node": "drytrim",
        "output": 0
      },
      "to": {
        "node": "dryflat",
        "input": 0
      }
    },
    {
      "from": {
        "node": "dryflat",
        "output": 0
      },
      "to": {
        "node": "drylift",
        "input": 0
      }
    },
    {
      "from": {
        "node": "drylift",
        "output": 0
      },
      "to": {
        "node": "out",
        "input": 0
      }
    },
    {
      "from": {
        "node": "in",
        "output": 0
      },
      "to": {
        "node": "drive",
        "input": 0
      }
    },
    {
      "from": {
        "node": "drive",
        "output": 0
      },
      "to": {
        "node": "span",
        "input": 0
      }
    },
    {
      "from": {
        "node": "span",
        "output": 0
      },
      "to": {
        "node": "shaper",
        "input": 0
      }
    },
    {
      "from": {
        "node": "one",
        "output": 0
      },
      "to": {
        "node": "bias",
        "input": 0
      }
    },
    {
      "from": {
        "node": "bias",
        "output": 0
      },
      "to": {
        "node": "shaper",
        "input": 0
      }
    },
    {
      "from": {
        "node": "bias",
        "output": 0
      },
      "to": {
        "node": "rest",
        "input": 0
      }
    },
    {
      "from": {
        "node": "rest",
        "output": 0
      },
      "to": {
        "node": "restinvert",
        "input": 0
      }
    },
    {
      "from": {
        "node": "shaper",
        "output": 0
      },
      "to": {
        "node": "sat",
        "input": 0
      }
    },
    {
      "from": {
        "node": "restinvert",
        "output": 0
      },
      "to": {
        "node": "sat",
        "input": 0
      }
    },
    {
      "from": {
        "node": "sat",
        "output": 0
      },
      "to": {
        "node": "dcblock",
        "input": 0
      }
    },
    {
      "from": {
        "node": "dcblock",
        "output": 0
      },
      "to": {
        "node": "tone",
        "input": 0
      }
    },
    {
      "from": {
        "node": "tone",
        "output": 0
      },
      "to": {
        "node": "level",
        "input": 0
      }
    },
    {
      "from": {
        "node": "level",
        "output": 0
      },
      "to": {
        "node": "wet",
        "input": 0
      }
    },
    {
      "from": {
        "node": "wet",
        "output": 0
      },
      "to": {
        "node": "out",
        "input": 0
      }
    },
    {
      "from": {
        "node": "one",
        "output": 0
      },
      "to": {
        "node": "mixdepth",
        "input": 0
      }
    },
    {
      "from": {
        "node": "mixdepth",
        "output": 0
      },
      "to": {
        "node": "mixinvert",
        "input": 0
      }
    },
    {
      "from": {
        "node": "mixinvert",
        "output": 0
      },
      "to": {
        "node": "dry",
        "param": "gain"
      }
    },
    {
      "from": {
        "node": "one",
        "output": 0
      },
      "to": {
        "node": "spanset",
        "input": 0
      }
    },
    {
      "from": {
        "node": "spanset",
        "output": 0
      },
      "to": {
        "node": "span",
        "param": "gain"
      }
    },
    {
      "from": {
        "node": "one",
        "output": 0
      },
      "to": {
        "node": "drytrimset",
        "input": 0
      }
    },
    {
      "from": {
        "node": "drytrimset",
        "output": 0
      },
      "to": {
        "node": "drytrim",
        "param": "gain"
      }
    },
    {
      "from": {
        "node": "one",
        "output": 0
      },
      "to": {
        "node": "dryliftset",
        "input": 0
      }
    },
    {
      "from": {
        "node": "dryliftset",
        "output": 0
      },
      "to": {
        "node": "drylift",
        "param": "gain"
      }
    },
    {
      "from": {
        "node": "one",
        "output": 0
      },
      "to": {
        "node": "dcblockset",
        "input": 0
      }
    },
    {
      "from": {
        "node": "dcblockset",
        "output": 0
      },
      "to": {
        "node": "dcblock",
        "param": "frequency"
      }
    },
    {
      "from": {
        "node": "one",
        "output": 0
      },
      "to": {
        "node": "toneqset",
        "input": 0
      }
    },
    {
      "from": {
        "node": "toneqset",
        "output": 0
      },
      "to": {
        "node": "tone",
        "param": "Q"
      }
    }
  ],
  "automation": [],
  "parameters": [
    {
      "id": "drive",
      "label": "Drive",
      "range": {
        "min": "0.5",
        "max": "24"
      },
      "default": "3",
      "targets": [
        {
          "node": "drive",
          "param": "gain"
        }
      ]
    },
    {
      "id": "warmth",
      "label": "Warmth",
      "range": {
        "min": "0",
        "max": "0.25"
      },
      "default": "0.12",
      "targets": [
        {
          "node": "bias",
          "param": "gain"
        }
      ]
    },
    {
      "id": "tone",
      "label": "Tone (Hz)",
      "range": {
        "min": "500",
        "max": "20000"
      },
      "default": "5000",
      "targets": [
        {
          "node": "tone",
          "param": "frequency"
        }
      ]
    },
    {
      "id": "mix",
      "label": "Dry/wet",
      "range": {
        "min": "0",
        "max": "1"
      },
      "default": "1",
      "targets": [
        {
          "node": "wet",
          "param": "gain"
        },
        {
          "node": "mixdepth",
          "param": "gain"
        }
      ]
    },
    {
      "id": "level",
      "label": "Level",
      "range": {
        "min": "0",
        "max": "2"
      },
      "default": "0.7",
      "targets": [
        {
          "node": "level",
          "param": "gain"
        }
      ]
    }
  ],
  "sampleSlots": [],
  "createdAt": "2026-09-21T00:00:00.000Z"
}