summaryrefslogtreecommitdiff
path: root/client/lib/kalimba.js
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2018-08-12 15:16:16 +0200
committerJules Laplace <julescarbon@gmail.com>2018-08-12 15:16:16 +0200
commit86213c887b101044ae2f3ea393fee927842dbde2 (patch)
tree72e903084c6f19eb8f15640c1d354b9226dea591 /client/lib/kalimba.js
inequality sonification project
Diffstat (limited to 'client/lib/kalimba.js')
-rw-r--r--client/lib/kalimba.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/client/lib/kalimba.js b/client/lib/kalimba.js
new file mode 100644
index 0000000..8e3c087
--- /dev/null
+++ b/client/lib/kalimba.js
@@ -0,0 +1,46 @@
+import Tone from 'tone'
+import { choice } from './util'
+
+const player_count = 2
+
+const compressor = new Tone.Compressor(-30, 3).toMaster()
+
+const samples = [
+ { root: 226, fn: 'samples/380737__cabled-mess__sansula-01-a-raw.wav', },
+ { root: 267, fn: 'samples/380736__cabled-mess__sansula-02-c-raw.wav', },
+ { root: 340, fn: 'samples/380735__cabled-mess__sansula-03-e-raw.wav', },
+ { root: 452, fn: 'samples/380733__cabled-mess__sansula-06-a-02-raw.wav', },
+// { root: 507, fn: 'samples/380734__cabled-mess__sansula-07-b-h-raw.wav', },
+// { root: 535, fn: 'samples/380731__cabled-mess__sansula-08-c-raw.wav', },
+// { root: 671, fn: 'samples/380732__cabled-mess__sansula-09-e-raw.wav', },
+]
+
+samples.forEach((sample) => {
+ sample.players = []
+ sample.index = -1
+ for (let i = 0; i < player_count; i++) {
+ let fn = sample.fn
+ if (window.location.href.match(/asdf.us/)) {
+ fn = '//asdf.us/kalimba/' + fn
+ }
+ let player = new Tone.Player({
+ url: fn,
+ retrigger: true,
+ playbackRate: 1,
+ })
+ player.connect(compressor)
+ sample.players.push(player)
+ }
+})
+
+function play (freq) {
+ const best = { sample: choice(samples) }
+ best.sample.index = (best.sample.index + 1) % player_count
+
+ const player = best.sample.players[ best.sample.index ]
+ player.playbackRate = freq / best.sample.root
+ player.start()
+}
+
+export default { play }
+