{
  "$type": "at.atmosynth.module",
  "descriptionVersion": 1,
  "moduleId": "expression",
  "versionKey": "2",
  "name": "Expression",
  "description": "What the finger playing a note is doing, as three signals to patch anywhere. Pressure is how hard the note is being pressed *now*, rising and falling under a finger that stays down; Slide is the other direction a finger moves, across a key rather than into it; Bend is how far the note has been pulled from the one that was pressed, in semitones — the pitch already follows it everywhere, and this is that same movement offered as something to move anything else with. Route the note here as well as to the oscillator, then patch an output into whatever it should open, brighten or widen; how far it goes is set where it arrives, as with any other modulation here. Pressure follows two kinds of controller: an MPE keyboard, which plays a channel per note, and any ordinary controller that sends poly key pressure — the aftertouch a pad grid sends per pad, which names the note it is about and so needs no channel of its own. Slide and Bend still need MPE, because nothing in ordinary MIDI says which note they moved. What a controller does not send holds still rather than goes quiet: Pressure rests at how hard the note was struck, Slide at the centre and Bend at nothing, so a patch built on them is still a patch when it is played with a mouse.",
  "audioInputs": [],
  "audioOutputs": [
    {
      "id": "pressure",
      "label": "Pressure"
    },
    {
      "id": "slide",
      "label": "Slide"
    },
    {
      "id": "bend",
      "label": "Bend"
    }
  ],
  "midiInputs": [
    {
      "id": "midi",
      "label": "Note"
    }
  ],
  "nodes": [
    {
      "id": "press",
      "kind": "midiInput",
      "options": {
        "midiInput": "midi",
        "signal": "pressure"
      }
    },
    {
      "id": "slide",
      "kind": "midiInput",
      "options": {
        "midiInput": "midi",
        "signal": "timbre"
      }
    },
    {
      "id": "bendin",
      "kind": "midiInput",
      "options": {
        "midiInput": "midi",
        "signal": "bend"
      }
    },
    {
      "id": "pressout",
      "kind": "moduleOutput",
      "options": {
        "output": "pressure"
      }
    },
    {
      "id": "slideout",
      "kind": "moduleOutput",
      "options": {
        "output": "slide"
      }
    },
    {
      "id": "bendout",
      "kind": "moduleOutput",
      "options": {
        "output": "bend"
      }
    }
  ],
  "connections": [
    {
      "from": {
        "node": "press",
        "output": 0
      },
      "to": {
        "node": "pressout",
        "input": 0
      }
    },
    {
      "from": {
        "node": "slide",
        "output": 0
      },
      "to": {
        "node": "slideout",
        "input": 0
      }
    },
    {
      "from": {
        "node": "bendin",
        "output": 0
      },
      "to": {
        "node": "bendout",
        "input": 0
      }
    }
  ],
  "automation": [],
  "parameters": [],
  "sampleSlots": [],
  "createdAt": "2026-09-04T00:00:00.000Z"
}