diff --git a/src/utils/autoplay-audio-context-fix.js b/src/utils/autoplay-audio-context-fix.js
new file mode 100644
index 0000000000000000000000000000000000000000..9a332d423ad7b6d4b0bc1177e7f3b436c3c783c1
--- /dev/null
+++ b/src/utils/autoplay-audio-context-fix.js
@@ -0,0 +1,25 @@
+/**
+ * Mobile Safari and Chrome will start Audio contexts in a "suspended" state.
+ * A user interaction (touch event) is needed in order to resume the AudioContext.
+ */
+const iDevices = /\biPhone.*Mobile|\biPod|\biPad|AppleCoreMedia/;
+
+if (iDevices.test(navigator.userAgent) || /Chrome/.test(navigator.userAgent)) {
+  document.addEventListener("DOMContentLoaded", () => {
+    const ctx = THREE.AudioContext.getContext();
+
+    function resume() {
+      ctx.resume();
+
+      setTimeout(function() {
+        if (ctx.state === "running") {
+          document.body.removeEventListener("touchend", resume, false);
+          document.body.removeEventListener("mouseup", resume, false);
+        }
+      }, 0);
+    }
+
+    document.body.addEventListener("touchend", resume, false);
+    document.body.addEventListener("mouseup", resume, false);
+  });
+}