diff --git a/popup.js b/popup.js index 90ebc2c..37a841e 100644 --- a/popup.js +++ b/popup.js @@ -1,24 +1,17 @@ -let audioContext; -let oscillatorLeft; -let oscillatorRight; -let gainNode; +let audioContext = new (window.AudioContext || window.webkitAudioContext)(); +let oscillatorLeft, oscillatorRight, gainNode; let isPlaying = false; -function startBinauralBeats(frequency, delta, volume) { - if (audioContext) { - audioContext.close(); - } - - audioContext = new (window.AudioContext || window.webkitAudioContext)(); - +function startBinauralBeats() { oscillatorLeft = audioContext.createOscillator(); oscillatorRight = audioContext.createOscillator(); gainNode = audioContext.createGain(); - oscillatorLeft.frequency.setValueAtTime(frequency, audioContext.currentTime); - oscillatorRight.frequency.setValueAtTime(frequency + delta, audioContext.currentTime); + oscillatorLeft.type = 'sine'; + oscillatorRight.type = 'sine'; - gainNode.gain.setValueAtTime(volume, audioContext.currentTime); + updateFrequencies(); + updateVolume(); oscillatorLeft.connect(gainNode); oscillatorRight.connect(gainNode); @@ -31,24 +24,29 @@ function startBinauralBeats(frequency, delta, volume) { } function stopBinauralBeats() { - if (oscillatorLeft) { - oscillatorLeft.stop(); - } - if (oscillatorRight) { - oscillatorRight.stop(); - } + oscillatorLeft.stop(); + oscillatorRight.stop(); isPlaying = false; } +function updateFrequencies() { + let frequency = parseFloat(document.getElementById('frequencySlider').value); + let delta = parseFloat(document.getElementById('deltaSlider').value); + oscillatorLeft.frequency.setValueAtTime(frequency, audioContext.currentTime); + oscillatorRight.frequency.setValueAtTime(frequency + delta, audioContext.currentTime); +} + +function updateVolume() { + let volume = parseFloat(document.getElementById('volumeSlider').value); + gainNode.gain.setValueAtTime(volume, audioContext.currentTime); +} + document.getElementById('togglePlayPause').addEventListener('click', function() { if (isPlaying) { stopBinauralBeats(); this.textContent = 'Play'; } else { - let frequency = Number(document.getElementById('frequencySlider').value); - let delta = Number(document.getElementById('deltaSlider').value); - let volume = Number(document.getElementById('volumeSlider').value); - startBinauralBeats(frequency, delta, volume); + startBinauralBeats(); this.textContent = 'Pause'; } }); @@ -56,22 +54,21 @@ document.getElementById('togglePlayPause').addEventListener('click', function() document.getElementById('frequencySlider').addEventListener('input', function() { document.getElementById('frequencyDisplay').textContent = `Frequency: ${this.value} Hz`; if (isPlaying) { - oscillatorLeft.frequency.setValueAtTime(Number(this.value), audioContext.currentTime); + updateFrequencies(); } }); document.getElementById('deltaSlider').addEventListener('input', function() { document.getElementById('deltaDisplay').textContent = `Delta: ${this.value} Hz`; if (isPlaying) { - let frequency = Number(document.getElementById('frequencySlider').value); - oscillatorRight.frequency.setValueAtTime(frequency + Number(this.value), audioContext.currentTime); + updateFrequencies(); } }); document.getElementById('volumeSlider').addEventListener('input', function() { document.getElementById('volumeDisplay').textContent = `Volume: ${Math.round(this.value * 100)}%`; if (isPlaying) { - gainNode.gain.setValueAtTime(Number(this.value), audioContext.currentTime); + updateVolume(); } }); @@ -86,7 +83,6 @@ document.getElementById('randomize').addEventListener('click', function() { document.getElementById('deltaDisplay').textContent = `Delta: ${randomDelta} Hz`; if (isPlaying) { - oscillatorLeft.frequency.setValueAtTime(randomFrequency, audioContext.currentTime); - oscillatorRight.frequency.setValueAtTime(randomFrequency + randomDelta, audioContext.currentTime); + updateFrequencies(); } });