gain.gain.setValueAtTime(0.000001, ctx.currentTime);
  gain.gain.exponentialRampToValueAtTime(1, ctx.currentTime + 0.5);
  gain.gain.setValueAtTime(1, ctx.currentTime + 1);
  gain.gain.setTargetAtTime(0, ctx.currentTime + 1.5, 0.3);
  gain.gain.setValueAtTime(0.00001, ctx.currentTime + 2.5);