let container = document.querySelector('#youare-container'); let audio = document.querySelector('#youare-audio'); let ovlap = document.querySelector('#youare-overlap'); let micon = document.querySelector('#youare-micon'); // Overlap global. Can probably be done better. // https://github.com/Endermanch/youareanidiot.cc 🤫 let overlap = false; function audioPlay() { if (!overlap) { audio.currentTime = 0; audio.play(); } else { ovlap.currentTime = 0; ovlap.play(); } container.removeEventListener('click', audioPlay); audio.addEventListener('timeupdate', audioOverlap); ovlap.addEventListener('timeupdate', audioOverlap); container.classList.remove('clicky'); micon.src = "/images/speaker.avif"; } function audioStop() { audio.currentTime = 0; audio.pause(); ovlap.currentTime = 0; ovlap.pause(); container.addEventListener('click', audioPlay); audio.removeEventListener('timeupdate', audioOverlap); ovlap.removeEventListener('timeupdate', audioOverlap); container.classList.add('clicky'); micon.src = "/images/speakerm.avif"; } function audioSwitch() { if ( audio.duration > 0 && audio.paused && ovlap.duration > 0 && ovlap.paused ) { audioPlay(); } else { audioStop(); } } /* * [Aug 2023] Finally, after 3 years have passed, I made the overlapping mechanism. * Audio overlapping is necessary for historic accuracy. The original flash version used to randomly overlap the song over itself. * I also think it sounds funnier and less respectful when overlapped. * Despite the constants .45 and .5, the JS audio jank at times makes it sound nice and random. */ function audioOverlap() { if (!overlap && audio.currentTime > audio.duration - .45) { ovlap.currentTime = 0; ovlap.play(); overlap = true; } if (overlap && ovlap.currentTime > ovlap.duration - .5) { audio.currentTime = 0; audio.play(); overlap = false; } } container.addEventListener('click', audioPlay); container.addEventListener('click', () => { container.classList.remove('clicky'); }); micon.addEventListener('click', audioSwitch);