{
  "$type": "at.atmosynth.module",
  "descriptionVersion": 1,
  "moduleId": "noise-pink",
  "versionKey": "1",
  "name": "Pink noise",
  "description": "White noise with the top turned down evenly, three decibels every octave, so that each octave carries as much as the one below it rather than twice as much. That is the balance of rain, surf, a waterfall and the hiss of a room, and the one an ear hears as even: where white noise hisses, this rushes, and it sits under a mix without its top end taking over. Like white noise it is not pitched, so a note does not move it — shape it with an envelope for a hit, or leave it running underneath. Tone takes the top off it, wide open by default. The generator is the white noise module's own eleven lines of audio processor, unchanged, because no node in the description makes a random signal; the slope is ordinary nodes after it. It is Paul Kellet's pinking filter: six one-pole filters side by side with their corners spread across the audible range, so that their sum falls at three decibels an octave to within a tenth of one from 10 Hz to 15 kHz, and a short direct path (b6) that keeps the highest octave from falling off with them. Every gain in it is Kellet's multiplied by 0.11, which lets its tallest swings reach full scale the way white noise's do; on average it is quieter, because most of pink noise is small.",
  "audioInputs": [],
  "audioOutputs": [
    {
      "id": "out",
      "label": "Out"
    }
  ],
  "midiInputs": [],
  "nodes": [
    {
      "id": "gen",
      "kind": "audioWorklet",
      "options": {
        "code": "// White noise, a sample at a time: the one thing the node vocabulary cannot\n// make out of the nodes it has, so it is the only part written as code.\nclass AtmosynthNoise extends AudioWorkletProcessor {\n  process(inputs, outputs) {\n    for (const channel of outputs[0]) {\n      for (let index = 0; index < channel.length; index += 1) {\n        channel[index] = Math.random() * 2 - 1;\n      }\n    }\n    return true;\n  }\n}\n\nregisterProcessor('atmosynth-noise', AtmosynthNoise);\n",
        "declaredParams": [],
        "numberOfInputs": 0,
        "numberOfOutputs": 1,
        "processorName": "atmosynth-noise"
      }
    },
    {
      "id": "b0",
      "kind": "iirFilter",
      "options": {
        "feedback": [
          1,
          "-0.99886"
        ],
        "feedforward": [
          "0.00610697"
        ]
      }
    },
    {
      "id": "b1",
      "kind": "iirFilter",
      "options": {
        "feedback": [
          1,
          "-0.99332"
        ],
        "feedforward": [
          "0.00825835"
        ]
      }
    },
    {
      "id": "b2",
      "kind": "iirFilter",
      "options": {
        "feedback": [
          1,
          "-0.969"
        ],
        "feedforward": [
          "0.0169237"
        ]
      }
    },
    {
      "id": "b3",
      "kind": "iirFilter",
      "options": {
        "feedback": [
          1,
          "-0.8665"
        ],
        "feedforward": [
          "0.0341534"
        ]
      }
    },
    {
      "id": "b4",
      "kind": "iirFilter",
      "options": {
        "feedback": [
          1,
          "-0.55"
        ],
        "feedforward": [
          "0.0586247"
        ]
      }
    },
    {
      "id": "b5",
      "kind": "iirFilter",
      "options": {
        "feedback": [
          1,
          "0.7616"
        ],
        "feedforward": [
          "-0.00185878"
        ]
      }
    },
    {
      "id": "b6",
      "kind": "iirFilter",
      "options": {
        "feedback": [
          1
        ],
        "feedforward": [
          "0.058982",
          "0.0127519"
        ]
      }
    },
    {
      "id": "tone",
      "kind": "biquadFilter",
      "options": {
        "type": "lowpass"
      }
    },
    {
      "id": "out",
      "kind": "moduleOutput",
      "options": {
        "output": "out"
      }
    }
  ],
  "connections": [
    {
      "from": {
        "node": "gen",
        "output": 0
      },
      "to": {
        "node": "b0",
        "input": 0
      }
    },
    {
      "from": {
        "node": "gen",
        "output": 0
      },
      "to": {
        "node": "b1",
        "input": 0
      }
    },
    {
      "from": {
        "node": "gen",
        "output": 0
      },
      "to": {
        "node": "b2",
        "input": 0
      }
    },
    {
      "from": {
        "node": "gen",
        "output": 0
      },
      "to": {
        "node": "b3",
        "input": 0
      }
    },
    {
      "from": {
        "node": "gen",
        "output": 0
      },
      "to": {
        "node": "b4",
        "input": 0
      }
    },
    {
      "from": {
        "node": "gen",
        "output": 0
      },
      "to": {
        "node": "b5",
        "input": 0
      }
    },
    {
      "from": {
        "node": "gen",
        "output": 0
      },
      "to": {
        "node": "b6",
        "input": 0
      }
    },
    {
      "from": {
        "node": "b0",
        "output": 0
      },
      "to": {
        "node": "tone",
        "input": 0
      }
    },
    {
      "from": {
        "node": "b1",
        "output": 0
      },
      "to": {
        "node": "tone",
        "input": 0
      }
    },
    {
      "from": {
        "node": "b2",
        "output": 0
      },
      "to": {
        "node": "tone",
        "input": 0
      }
    },
    {
      "from": {
        "node": "b3",
        "output": 0
      },
      "to": {
        "node": "tone",
        "input": 0
      }
    },
    {
      "from": {
        "node": "b4",
        "output": 0
      },
      "to": {
        "node": "tone",
        "input": 0
      }
    },
    {
      "from": {
        "node": "b5",
        "output": 0
      },
      "to": {
        "node": "tone",
        "input": 0
      }
    },
    {
      "from": {
        "node": "b6",
        "output": 0
      },
      "to": {
        "node": "tone",
        "input": 0
      }
    },
    {
      "from": {
        "node": "tone",
        "output": 0
      },
      "to": {
        "node": "out",
        "input": 0
      }
    }
  ],
  "automation": [],
  "parameters": [
    {
      "id": "tone",
      "label": "Tone (Hz)",
      "range": {
        "min": "20",
        "max": "20000"
      },
      "default": "20000",
      "targets": [
        {
          "node": "tone",
          "param": "frequency"
        }
      ]
    }
  ],
  "sampleSlots": [],
  "createdAt": "2026-09-17T00:00:00.000Z"
}