Audio: unlock on first user gesture after restore

When audio was previously enabled, registers one-shot click/touch/key
listener to init AudioContext on first interaction. Any tap on the
page is enough — no need to toggle the checkbox.
This commit is contained in:
you
2026-03-22 17:27:00 +00:00
parent 0dbe5fd229
commit f3572c646a
2 changed files with 14 additions and 3 deletions
+13 -2
View File
@@ -171,11 +171,22 @@
const savedBpm = localStorage.getItem('live-audio-bpm');
if (savedBpm) bpm = parseInt(savedBpm, 10) || 120;
const savedVol = localStorage.getItem('live-audio-volume');
// Don't create AudioContext here — no user gesture yet, browser will suspend it.
// Just store the desired volume; initAudio() will apply it when user interacts.
if (savedVol) _pendingVolume = parseFloat(savedVol) || 0.3;
const savedVoice = localStorage.getItem('live-audio-voice');
if (savedVoice) setVoice(savedVoice);
// If audio was enabled, wait for ANY user gesture to init context
if (audioEnabled) {
const unlockAudio = () => {
initAudio();
document.removeEventListener('click', unlockAudio, true);
document.removeEventListener('touchstart', unlockAudio, true);
document.removeEventListener('keydown', unlockAudio, true);
};
document.addEventListener('click', unlockAudio, true);
document.addEventListener('touchstart', unlockAudio, true);
document.addEventListener('keydown', unlockAudio, true);
}
}
// Export engine + helpers for voice modules
+1 -1
View File
@@ -90,7 +90,7 @@
<script src="nodes.js?v=1774126708" onerror="console.error('Failed to load:', this.src)"></script>
<script src="traces.js?v=1774135052" onerror="console.error('Failed to load:', this.src)"></script>
<script src="analytics.js?v=1774126708" onerror="console.error('Failed to load:', this.src)"></script>
<script src="audio.js?v=1774200342" onerror="console.error('Failed to load:', this.src)"></script>
<script src="audio.js?v=1774200420" onerror="console.error('Failed to load:', this.src)"></script>
<script src="audio-v1-constellation.js?v=1774199178" onerror="console.error('Failed to load:', this.src)"></script>
<script src="live.js?v=1774199178" onerror="console.error('Failed to load:', this.src)"></script>
<script src="observers.js?v=1774290000" onerror="console.error('Failed to load:', this.src)"></script>