{
  "$type": "at.atmosynth.module",
  "descriptionVersion": 1,
  "moduleId": "sine-shaper",
  "versionKey": "2",
  "name": "Sine Shaper",
  "description": "A sine laid across the sound rather than a ceiling put over it. Quiet parts pass almost as they came; as the sound is driven harder the curve turns back on itself instead of flattening, so a peak that goes further comes back down and out the other side. That folding is where the harmonics come from, and it is why they arrive high up and in bunches rather than as warmth spreading gradually upward — a sine shaper folds where a saturator clips. Drive is the gain into the curve and is the whole of the effect: at the low end the sound is barely bent and simply quieter, at the top it has been turned through the curve several times and little of the pitch it went in with is left at the front of it. The curve stops on a crest, so a sound driven past the end of its range leans on that instead of falling through the zero beyond. Dry/wet is the blend: at nothing what came in, at everything only the folded copy, and in between both at once with nothing between them to smear one against the other — which is what lets a fold sit under a clean sound rather than replace it. The fold itself is worked out at four times the rate and filtered back down, because a curve that turns this often makes harmonics far above what the rate can hold, and those come back down the spectrum as a ring against the note rather than as part of it — worst at the top of the keyboard, where the note has the most room above it to fold into. The clean half runs through the same oversampler with a straight line for a curve, so both halves are held back by exactly whatever that costs and the blend stays sample-aligned whatever a browser charges for it. That straight line passes anything up to eight times full scale untouched, which is further than the fold reaches at any drive. Drive is an input as well, with a depth for how far a signal there moves it: an LFO into it sweeps the folds through the sound.",
  "audioInputs": [
    {
      "id": "in",
      "label": "In"
    },
    {
      "id": "drive",
      "label": "Drive"
    }
  ],
  "audioOutputs": [
    {
      "id": "out",
      "label": "Out"
    }
  ],
  "midiInputs": [],
  "nodes": [
    {
      "id": "in",
      "kind": "moduleInput",
      "options": {
        "input": "in"
      }
    },
    {
      "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": "shaper",
      "kind": "waveShaper",
      "options": {
        "curve": "sine",
        "oversample": "4x"
      }
    },
    {
      "id": "wet",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "mixsrc",
      "kind": "constantSource",
      "options": {}
    },
    {
      "id": "mixdepth",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "mixinvert",
      "kind": "waveShaper",
      "options": {
        "curve": [
          1,
          -1
        ]
      }
    },
    {
      "id": "spanset",
      "kind": "waveShaper",
      "options": {
        "curve": [
          "0.9292644697369354",
          "-0.9292644697369354"
        ]
      }
    },
    {
      "id": "drytrimset",
      "kind": "waveShaper",
      "options": {
        "curve": [
          0,
          "-0.875"
        ]
      }
    },
    {
      "id": "dryliftset",
      "kind": "waveShaper",
      "options": {
        "curve": [
          0,
          7
        ]
      }
    },
    {
      "id": "out",
      "kind": "moduleOutput",
      "options": {
        "output": "out"
      }
    },
    {
      "id": "drivein",
      "kind": "moduleInput",
      "options": {
        "input": "drive"
      }
    },
    {
      "id": "drivedepth",
      "kind": "gain",
      "options": {}
    }
  ],
  "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": "shaper",
        "output": 0
      },
      "to": {
        "node": "wet",
        "input": 0
      }
    },
    {
      "from": {
        "node": "wet",
        "output": 0
      },
      "to": {
        "node": "out",
        "input": 0
      }
    },
    {
      "from": {
        "node": "mixsrc",
        "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": "mixsrc",
        "output": 0
      },
      "to": {
        "node": "spanset",
        "input": 0
      }
    },
    {
      "from": {
        "node": "spanset",
        "output": 0
      },
      "to": {
        "node": "span",
        "param": "gain"
      }
    },
    {
      "from": {
        "node": "mixsrc",
        "output": 0
      },
      "to": {
        "node": "drytrimset",
        "input": 0
      }
    },
    {
      "from": {
        "node": "drytrimset",
        "output": 0
      },
      "to": {
        "node": "drytrim",
        "param": "gain"
      }
    },
    {
      "from": {
        "node": "mixsrc",
        "output": 0
      },
      "to": {
        "node": "dryliftset",
        "input": 0
      }
    },
    {
      "from": {
        "node": "dryliftset",
        "output": 0
      },
      "to": {
        "node": "drylift",
        "param": "gain"
      }
    },
    {
      "from": {
        "node": "drivein",
        "output": 0
      },
      "to": {
        "node": "drivedepth",
        "input": 0
      }
    },
    {
      "from": {
        "node": "drivedepth",
        "output": 0
      },
      "to": {
        "node": "drive",
        "param": "gain"
      }
    }
  ],
  "automation": [],
  "parameters": [
    {
      "id": "drive",
      "label": "Drive",
      "range": {
        "min": "0.25",
        "max": "14"
      },
      "default": "3.25",
      "targets": [
        {
          "node": "drive",
          "param": "gain"
        }
      ]
    },
    {
      "id": "mix",
      "label": "Dry/wet",
      "range": {
        "min": "0",
        "max": "1"
      },
      "default": "1",
      "targets": [
        {
          "node": "wet",
          "param": "gain"
        },
        {
          "node": "mixdepth",
          "param": "gain"
        }
      ]
    },
    {
      "id": "driveAmount",
      "label": "Drive depth",
      "range": {
        "min": "-14",
        "max": "14"
      },
      "default": "4",
      "targets": [
        {
          "node": "drivedepth",
          "param": "gain"
        }
      ]
    }
  ],
  "sampleSlots": [],
  "createdAt": "2026-09-21T00:00:00.000Z"
}