summaryrefslogtreecommitdiff
path: root/client/lib/sampler.js
diff options
context:
space:
mode:
Diffstat (limited to 'client/lib/sampler.js')
-rw-r--r--client/lib/sampler.js23
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;
}
}