mpToValueAtTime(param.final,
                testDuration);
          });

          // Build routing: source → both panners
          source.connect(kRatePanner);
          source.connect(aRatePanner);

          // k‑rate result → channel‑0; a‑rate → channel‑1
          kRatePanner.connect(merger, 0, 0);
          aRatePanner.connect(merger, 0, 1);

          // Difference channel: k‑rate – a‑rate
          const inverter = new GainNode(context, {gain: -1});
          kRatePanner.conne