{
  "format": "forge.graph/0",
  "name": "Room to Hall",
  "author": "Chirp",
  "license": "CC-BY-4.0",
  "remixed_from": null,
  "description": "Three reverbs in one, and one knob to move between them: a short, tight room, a medium plate and a long hall all run at once from the same diffused input, and Space fades from one to the next (room on the left, plate in the middle, hall on the right) at an even loudness. Decay lengthens all three together.",
  "tags": ["reverb", "room", "plate", "hall", "ambient", "stereo"],
  "face": {
    "knobs": [
      { "id": "space", "label": "Space", "default": 0.5,
        "controls": [ { "target": "space.v", "from": 0, "to": 1 } ] },
      { "id": "decay", "label": "Decay", "default": 0.55,
        "controls": [ { "target": "room_fb.amount", "from": 0.35, "to": 0.72 },
                      { "target": "plate_fb.amount", "from": 0.6, "to": 0.87 },
                      { "target": "hall_fb.amount", "from": 0.8, "to": 0.95 } ] },
      { "id": "predelay", "label": "Pre-dly", "default": 0.2,
        "controls": [ { "target": "pre.time", "from": 0.001, "to": 0.1 } ] },
      { "id": "tone", "label": "Tone", "default": 0.55,
        "controls": [ { "target": "tone.cutoff", "from": 1500, "to": 12000, "curve": "exp" } ] },
      { "id": "mix", "label": "Mix", "default": 0.35,
        "controls": [ { "target": "mixer.mix", "from": 0, "to": 1 } ] }
    ]
  },
  "nodes": {
    "pre": { "block": "delay", "set": { "max": 0.11, "glide": 200 }, "in": { "x": "in" } },
    "d1": { "block": "allpass", "set": { "time": 0.0047, "g": 0.75 }, "in": { "x": "pre" } },
    "d2": { "block": "allpass", "set": { "time": 0.0036, "g": 0.75 }, "in": { "x": "d1" } },
    "d3": { "block": "allpass", "set": { "time": 0.0127, "g": 0.62 }, "in": { "x": "d2" } },
    "drift": { "block": "lfo", "set": { "rate": 0.45, "stereo_phase": 0.5 } },

    "room_ap": { "block": "allpass", "set": { "time": 0.0083, "g": -0.6 }, "in": { "x": ["d3", "room_fb"] } },
    "room_a": { "block": "delay", "set": { "time": 0.031, "max": 0.04, "glide": 1 }, "in": { "x": "room_ap" } },
    "room_b": { "block": "delay", "set": { "time": 0.023, "max": 0.03, "glide": 1 }, "in": { "x": "room_a" } },
    "room_damp": { "block": "onepole", "set": { "cutoff": 7000 }, "in": { "x": "room_b" } },
    "room_fb": { "block": "gain", "in": { "x": "room_damp" } },

    "plate_ap": { "block": "allpass", "set": { "time": 0.0227, "g": -0.7 }, "in": { "x": ["d3", "plate_fb"] } },
    "plate_a": { "block": "delay", "set": { "time": 0.089, "max": 0.1, "glide": 1 }, "in": { "x": "plate_ap" } },
    "plate_ap2": { "block": "allpass", "set": { "time": 0.0181, "g": 0.6 }, "in": { "x": "plate_a" } },
    "plate_b": { "block": "delay", "set": { "time": 0.071, "max": 0.08, "glide": 1 }, "in": { "x": "plate_ap2" } },
    "plate_damp": { "block": "onepole", "set": { "cutoff": 6000 }, "in": { "x": "plate_b" } },
    "plate_fb": { "block": "gain", "in": { "x": "plate_damp" } },

    "hall_ap": { "block": "allpass", "set": { "time": 0.061, "g": -0.65 }, "in": { "x": ["d3", "hall_fb"] } },
    "hall_a": { "block": "delay", "set": { "time": 0.187, "max": 0.2, "glide": 1 }, "in": { "x": "hall_ap" } },
    "hall_ap2": { "block": "allpass", "set": { "time": 0.079, "g": 0.6 }, "in": { "x": "hall_a" } },
    "hall_b": { "block": "delay", "set": { "time": 0.159, "max": 0.17, "glide": 1 }, "in": { "x": "hall_ap2" } },
    "hall_damp": { "block": "onepole", "set": { "cutoff": 3800 }, "in": { "x": "hall_b" } },
    "hall_fb": { "block": "gain", "in": { "x": "hall_damp" } },

    "space": { "block": "value", "mono": true },
    "blend3": { "block": "formula",
                "set": { "expr": "a * sqrt(clamp(1 - 2 * d, 0, 1)) + b * sqrt(1 - abs(2 * d - 1)) + c * sqrt(clamp(2 * d - 1, 0, 1))" },
                "in": { "a": ["room_a", "room_damp"], "b": ["plate_a", "plate_damp"], "c": ["hall_a", "hall_damp"], "d": "space" } },
    "tone": { "block": "onepole", "in": { "x": "blend3" } },
    "wet": { "block": "gain", "set": { "amount": 0.6 }, "in": { "x": "tone:lp" } },
    "mixer": { "block": "blend", "in": { "dry": "in", "wet": "wet" } }
  },
  "mods": {
    "plate_drift": { "from": "drift:sine", "target": "plate_ap.time", "amount": 0.0005 },
    "hall_drift": { "from": "drift:tri", "target": "hall_ap.time", "amount": 0.0009 }
  },
  "layout": {
    "in": [20, 200], "pre": [260, 200], "d1": [500, 200], "d2": [740, 200], "d3": [980, 200],
    "room_ap": [1240, 20], "room_a": [1480, 20], "room_b": [1720, 20], "room_damp": [1960, 20], "room_fb": [1960, 120],
    "plate_ap": [1240, 300], "plate_a": [1480, 300], "plate_ap2": [1720, 300], "plate_b": [1960, 300], "plate_damp": [2200, 300], "plate_fb": [2200, 400],
    "hall_ap": [1240, 580], "hall_a": [1480, 580], "hall_ap2": [1720, 580], "hall_b": [1960, 580], "hall_damp": [2200, 580], "hall_fb": [2200, 680],
    "drift": [1240, 840], "space": [2440, 520],
    "blend3": [2480, 300], "tone": [2720, 300], "wet": [2960, 300], "mixer": [3200, 200], "out": [3440, 200]
  },
  "out": "mixer"
}
