{
  "schema": "throughline/patch",
  "schemaVersion": "2.23.0",
  "version": "2.23.0",
  "id": "build-a-synth-shaped-voice",
  "name": "Build a synth – 2 shaped voice",
  "createdAt": "2026-10-01T00:00:00.000Z",
  "updatedAt": "2026-10-01T00:00:00.000Z",
  "tempo": 120,
  "transportSource": "manual",
  "keySource": "manual",
  "keyContext": {
    "tonic": 60,
    "scaleId": "major"
  },
  "sampleRate": 48000,
  "blockSize": 128,
  "graph": {
    "id": "init",
    "version": "2.23.0",
    "nodes": [
      {
        "id": "output1",
        "defId": "io.audioOut",
        "scope": "global",
        "paramValues": {
          "gain": 0,
          "muted": 0
        },
        "position": {
          "x": 1952.5485714285714,
          "y": 200
        }
      },
      {
        "id": "io.midiIn_2",
        "defId": "io.midiIn",
        "scope": "global",
        "paramValues": {
          "channel": 0
        },
        "position": {
          "x": 116.22857142857144,
          "y": 64.48571428571425
        }
      },
      {
        "id": "midi.decode_3",
        "defId": "midi.decode",
        "scope": "global",
        "paramValues": {
          "legato": 0
        },
        "position": {
          "x": 509.7371428571429,
          "y": 64.48571428571425
        }
      },
      {
        "id": "osc.basic_4",
        "defId": "osc.basic",
        "scope": "global",
        "paramValues": {
          "waveform": "saw",
          "pitch": 60,
          "pulseWidth": 0.5,
          "detuneCents": 0,
          "fmDepth": 1,
          "throughZero": 0,
          "amp": 0.5,
          "unisonVoices": 1,
          "unisonDetuneCents": 0,
          "unisonSpread01": 0
        },
        "position": {
          "x": 1001.6228571428571,
          "y": -143.0285714285714
        }
      },
      {
        "id": "mod.adsr_5",
        "defId": "mod.adsr",
        "scope": "global",
        "paramValues": {
          "attack": 0.01,
          "decay": 0.2,
          "sustain": 0.7,
          "release": 0.3,
          "attackCurve": 0,
          "decayCurve": 0,
          "releaseCurve": 0
        },
        "position": {
          "x": 1345.9428571428573,
          "y": 521.0171428571429
        }
      },
      {
        "id": "amp.vca_6",
        "defId": "amp.vca",
        "scope": "global",
        "paramValues": {
          "gain": 1,
          "law": "exponential"
        },
        "position": {
          "x": 1657.6228571428571,
          "y": 64.48571428571425
        }
      },
      {
        "id": "lpf",
        "defId": "filter.lpf",
        "scope": "global",
        "paramValues": {
          "filterMode": "lp",
          "cutoff": 1000,
          "Q": 0.707,
          "mode": "biquad",
          "mix": 1
        },
        "position": {
          "x": 1329.6228571428571,
          "y": -23.27142857142858
        }
      },
      {
        "id": "math.mapRange_8",
        "defId": "math.mapRange",
        "scope": "global",
        "paramValues": {
          "inMin": 0,
          "inMax": 1,
          "outMin": 200,
          "outMax": 5000,
          "clamp": 1
        },
        "position": {
          "x": 1399.4275918367346,
          "y": 963.5564875538106
        }
      }
    ],
    "edges": [
      {
        "id": "edge_io.midiIn_2_midi_midi.decode_3_midi",
        "from": {
          "nodeId": "io.midiIn_2",
          "portId": "midi"
        },
        "to": {
          "nodeId": "midi.decode_3",
          "portId": "midi"
        }
      },
      {
        "id": "edge_midi.decode_3_pitch_osc.basic_4_pitch",
        "from": {
          "nodeId": "midi.decode_3",
          "portId": "pitch"
        },
        "to": {
          "nodeId": "osc.basic_4",
          "portId": "pitch"
        }
      },
      {
        "id": "edge_midi.decode_3_gate_mod.adsr_5_gate",
        "from": {
          "nodeId": "midi.decode_3",
          "portId": "gate"
        },
        "to": {
          "nodeId": "mod.adsr_5",
          "portId": "gate"
        }
      },
      {
        "id": "edge_mod.adsr_5_envelope_amp.vca_6_gain01",
        "from": {
          "nodeId": "mod.adsr_5",
          "portId": "envelope"
        },
        "to": {
          "nodeId": "amp.vca_6",
          "portId": "gain01"
        }
      },
      {
        "id": "edge_amp.vca_6_signal_output1_audio",
        "from": {
          "nodeId": "amp.vca_6",
          "portId": "signal"
        },
        "to": {
          "nodeId": "output1",
          "portId": "audio"
        }
      },
      {
        "id": "osc.basic_4-to-lpf-audio",
        "from": {
          "nodeId": "osc.basic_4",
          "portId": "signal"
        },
        "to": {
          "nodeId": "lpf",
          "portId": "audio"
        }
      },
      {
        "id": "edge_lpf_audio_amp.vca_6_signal",
        "from": {
          "nodeId": "lpf",
          "portId": "audio"
        },
        "to": {
          "nodeId": "amp.vca_6",
          "portId": "signal"
        }
      },
      {
        "id": "edge_mod.adsr_5_envelope_math.mapRange_8_x",
        "from": {
          "nodeId": "mod.adsr_5",
          "portId": "envelope"
        },
        "to": {
          "nodeId": "math.mapRange_8",
          "portId": "x"
        }
      },
      {
        "id": "edge_math.mapRange_8_y_lpf_cutoffHz",
        "from": {
          "nodeId": "math.mapRange_8",
          "portId": "y"
        },
        "to": {
          "nodeId": "lpf",
          "portId": "cutoffHz"
        }
      }
    ],
    "groups": [],
    "subgraphs": [],
    "viewport": {
      "x": 36.98690887382199,
      "y": 150.71323184512386,
      "zoom": 0.522365783975097
    }
  },
  "macros": []
}
