{
  "$type": "at.atmosynth.module",
  "descriptionVersion": 1,
  "moduleId": "instrument-brass",
  "versionKey": "1",
  "name": "Brass",
  "description": "A blown voice that opens as it is held: a sawtooth pair with a resonant filter and a firm body.",
  "audioInputs": [
    {
      "id": "in",
      "label": "In"
    }
  ],
  "audioOutputs": [
    {
      "id": "out",
      "label": "Out"
    }
  ],
  "midiInputs": [
    {
      "id": "midi",
      "label": "Note"
    }
  ],
  "nodes": [
    {
      "id": "note",
      "kind": "midiInput",
      "options": {
        "midiInput": "midi"
      }
    },
    {
      "id": "in",
      "kind": "moduleInput",
      "options": {
        "input": "in"
      }
    },
    {
      "id": "osc1",
      "kind": "oscillator",
      "options": {
        "type": "sawtooth"
      }
    },
    {
      "id": "osc2",
      "kind": "oscillator",
      "options": {
        "type": "sawtooth"
      }
    },
    {
      "id": "tone",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "filter",
      "kind": "biquadFilter",
      "options": {
        "type": "lowpass"
      }
    },
    {
      "id": "vca",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "level",
      "kind": "gain",
      "options": {}
    },
    {
      "id": "out",
      "kind": "moduleOutput",
      "options": {
        "output": "out"
      }
    }
  ],
  "connections": [
    {
      "from": {
        "node": "osc1",
        "output": 0
      },
      "to": {
        "node": "tone",
        "input": 0
      }
    },
    {
      "from": {
        "node": "osc2",
        "output": 0
      },
      "to": {
        "node": "tone",
        "input": 0
      }
    },
    {
      "from": {
        "node": "in",
        "output": 0
      },
      "to": {
        "node": "tone",
        "input": 0
      }
    },
    {
      "from": {
        "node": "tone",
        "output": 0
      },
      "to": {
        "node": "filter",
        "input": 0
      }
    },
    {
      "from": {
        "node": "filter",
        "output": 0
      },
      "to": {
        "node": "vca",
        "input": 0
      }
    },
    {
      "from": {
        "node": "vca",
        "output": 0
      },
      "to": {
        "node": "level",
        "input": 0
      }
    },
    {
      "from": {
        "node": "level",
        "output": 0
      },
      "to": {
        "node": "out",
        "input": 0
      }
    }
  ],
  "automation": [
    {
      "id": "amp",
      "label": "Amplitude",
      "target": {
        "node": "vca",
        "param": "gain"
      },
      "breakpoints": [
        {
          "time": 0,
          "value": "0",
          "curve": "step"
        },
        {
          "time": 60,
          "value": "1",
          "curve": "linear"
        },
        {
          "time": 240,
          "value": "0.8",
          "curve": "linear"
        },
        {
          "time": 500,
          "value": "0",
          "curve": "linear"
        }
      ],
      "sustainAt": 2
    }
  ],
  "parameters": [
    {
      "id": "attack",
      "label": "Attack",
      "range": {
        "min": "0",
        "max": "4000"
      },
      "default": "60",
      "targets": [
        {
          "automation": "amp",
          "breakpoint": 1,
          "field": "time"
        }
      ]
    },
    {
      "id": "decay",
      "label": "Decay reaches sustain at",
      "range": {
        "min": "0",
        "max": "8000"
      },
      "default": "240",
      "targets": [
        {
          "automation": "amp",
          "breakpoint": 2,
          "field": "time"
        }
      ]
    },
    {
      "id": "sustain",
      "label": "Sustain level",
      "range": {
        "min": "0",
        "max": "1"
      },
      "default": "0.8",
      "targets": [
        {
          "automation": "amp",
          "breakpoint": 2,
          "field": "value"
        }
      ]
    },
    {
      "id": "release",
      "label": "Release ends at",
      "range": {
        "min": "0",
        "max": "12000"
      },
      "default": "500",
      "targets": [
        {
          "automation": "amp",
          "breakpoint": 3,
          "field": "time"
        }
      ]
    },
    {
      "id": "cutoff",
      "label": "Brightness (Hz)",
      "range": {
        "min": "20",
        "max": "20000"
      },
      "default": "2200",
      "targets": [
        {
          "node": "filter",
          "param": "frequency"
        }
      ]
    },
    {
      "id": "resonance",
      "label": "Resonance",
      "range": {
        "min": "0.0001",
        "max": "30"
      },
      "default": "7",
      "targets": [
        {
          "node": "filter",
          "param": "Q"
        }
      ]
    },
    {
      "id": "level",
      "label": "Level",
      "range": {
        "min": "0",
        "max": "2"
      },
      "default": "0.3",
      "targets": [
        {
          "node": "level",
          "param": "gain"
        }
      ]
    },
    {
      "id": "detune1",
      "label": "Detune 1 (cents)",
      "range": {
        "min": "-1200",
        "max": "1200"
      },
      "default": "0",
      "targets": [
        {
          "node": "osc1",
          "param": "detune"
        }
      ]
    },
    {
      "id": "detune2",
      "label": "Detune 2 (cents)",
      "range": {
        "min": "-1200",
        "max": "1200"
      },
      "default": "5",
      "targets": [
        {
          "node": "osc2",
          "param": "detune"
        }
      ]
    }
  ],
  "sampleSlots": [],
  "createdAt": "2026-08-28T00:00:00.000Z"
}