From d82f99fd89e23fdb62598b616e39537360a10f74 Mon Sep 17 00:00:00 2001 From: julian laplace Date: Sat, 5 Jul 2025 14:14:08 +0200 Subject: better toggling --- client/lib/organ.js | 13 ++++++++++--- client/lib/util.js | 5 ++++- 2 files changed, 14 insertions(+), 4 deletions(-) (limited to 'client/lib') diff --git a/client/lib/organ.js b/client/lib/organ.js index f67a3e8..9d0ac90 100644 --- a/client/lib/organ.js +++ b/client/lib/organ.js @@ -1,4 +1,5 @@ import Tone from "tone"; +import { roundFreq } from "./util"; const oscillators = {}; @@ -8,11 +9,17 @@ let lastPlayed; function load(out) { output = out; } + +function isPlaying(freq) { + const rounded = roundFreq(freq); + const osc = oscillators[rounded]; + return osc && osc.playing; +} function play(freq) { if (!output) { return; } - const rounded = Math.floor(freq); + const rounded = roundFreq(freq); const osc = (oscillators[rounded] = oscillators[rounded] || {}); if (!osc.el) { osc.el = new Tone.Oscillator(freq, "sine"); @@ -25,7 +32,7 @@ function play(freq) { } function pause(freq) { - const rounded = Math.floor(freq); + const rounded = roundFreq(freq); if (!oscillators[rounded]) return; const osc = (oscillators[rounded] = oscillators[rounded] || {}); if (osc.el) osc.el.stop(); @@ -33,4 +40,4 @@ function pause(freq) { return osc; } -export default { load, play, pause, oscillators }; +export default { load, isPlaying, play, pause, oscillators }; diff --git a/client/lib/util.js b/client/lib/util.js index b1ce162..7fad313 100644 --- a/client/lib/util.js +++ b/client/lib/util.js @@ -18,6 +18,9 @@ function choice(a) { function mod(n, m) { return n - m * Math.floor(n / m); } +function roundFreq(freq) { + return Math.round(freq * 100); +} function requestAudioContext(fn) { if (window.location.protocol !== "https:") { @@ -62,4 +65,4 @@ function requestAudioContext(fn) { } } -export { choice, mod, browser, requestAudioContext }; +export { choice, mod, browser, roundFreq, requestAudioContext }; -- cgit v1.2.3-70-g09d2