{
  "$type": "at.atmosynth.module",
  "descriptionVersion": 1,
  "moduleId": "oscilloscope",
  "versionKey": "1",
  "name": "Oscilloscope",
  "description": "A window onto the signal passing through it: what arrives at In is drawn on the block itself, cycle by cycle, and leaves at Out exactly as it came. It changes nothing — an analyser is the one node in Web Audio whose whole purpose is to be looked at — so it can be dropped into the middle of a chain to see what a stage is doing to the wave, or run as a branch beside the path the sound already takes, at no cost to either. Its Out is nothing more than where the signal carries on from: wire it on when the scope stands in the middle of a chain, and leave it where the sound already has its own way to the output — what arrives at In is drawn either way. What it is for is the questions a level meter cannot answer: whether a waveshaper is clipping the tops off or rounding them, what a filter has left of a saw, how far a ring modulator has moved a tone from the shape it started as, and whether two oscillators are beating against each other or sitting still. The trace locks to the wave rather than sliding along it — it is anchored where the signal last rose through zero and holds about two cycles of whatever it finds, so a steady note stands still and a note that is moving is seen to move. The screen is drawn full scale and never scaled to fit: a quiet signal is a small wave, because that is what a quiet signal is, and how loud a patch is on the way out is the meter's question rather than this one. It carries no knobs on purpose — there is nothing here to set, and nothing set here would be heard by anybody. Built per voice it shows one note's own signal; shared, it shows what every voice sums to at that point. Switched off it stops looking, and passes what reaches it through untouched.",
  "audioInputs": [
    {
      "id": "in",
      "label": "In"
    }
  ],
  "audioOutputs": [
    {
      "id": "out",
      "label": "Out"
    }
  ],
  "midiInputs": [],
  "nodes": [
    {
      "id": "in",
      "kind": "moduleInput",
      "options": {
        "input": "in"
      }
    },
    {
      "id": "screen",
      "kind": "analyser",
      "options": {
        "fftSize": 2048,
        "smoothingTimeConstant": 0
      }
    },
    {
      "id": "out",
      "kind": "moduleOutput",
      "options": {
        "output": "out"
      }
    }
  ],
  "connections": [
    {
      "from": {
        "node": "in",
        "output": 0
      },
      "to": {
        "node": "out",
        "input": 0
      }
    },
    {
      "from": {
        "node": "in",
        "output": 0
      },
      "to": {
        "node": "screen",
        "input": 0
      }
    }
  ],
  "automation": [],
  "parameters": [],
  "sampleSlots": [],
  "createdAt": "2026-09-08T00:00:00.000Z"
}