diff options
Diffstat (limited to 'client/lib/sampler.js')
| -rw-r--r-- | client/lib/sampler.js | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/client/lib/sampler.js b/client/lib/sampler.js index 08f253d..69da86e 100644 --- a/client/lib/sampler.js +++ b/client/lib/sampler.js @@ -5,6 +5,8 @@ import Tone from "tone"; +let root = 440; + let output; let ready; let current = ""; @@ -72,14 +74,19 @@ export function loadSampleFromFile(file, url) { /** * Player */ -let last = 440; +let last = [1, 440]; -function play(freq) { - last = freq; +function stop() { + for (const sample of Object.values(samples)) { + sample.players.forEach((player) => player.stop()); + } +} +function play(interval, root) { + last = [interval, root]; const sample = samples[current]; sample.index = (sample.index + 1) % sample.players.length; const player = sample.players[sample.index]; - player.playbackRate = freq / sample.root; + player.playbackRate = (interval * root) / sample.root; player.start(); } @@ -87,7 +94,7 @@ function pause() { // no-op } -export default { load, play, pause }; +export default { load, play, pause, stop }; // for help tuning function keydown(e) { @@ -99,12 +106,14 @@ function keydown(e) { case 38: // up e.preventDefault(); sample.root -= step; - play(last); + stop(); + play(last[0], last[1]); break; case 40: // down e.preventDefault(); sample.root += step; - play(last); + stop(); + play(last[0], last[1]); break; } } |
