summaryrefslogtreecommitdiff
path: root/client/index.js
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2018-03-06 13:28:12 +0100
committerJules Laplace <julescarbon@gmail.com>2018-03-06 13:28:12 +0100
commit25fec83f6f7db468721a38adb2c84a0c0a2121f1 (patch)
tree5ea8b40951e98639b88b0378618a9ca2f835de7a /client/index.js
displaying waveform and spectrogram
Diffstat (limited to 'client/index.js')
-rw-r--r--client/index.js106
1 files changed, 106 insertions, 0 deletions
diff --git a/client/index.js b/client/index.js
new file mode 100644
index 0000000..b1351fc
--- /dev/null
+++ b/client/index.js
@@ -0,0 +1,106 @@
+import Tone from 'tone'
+
+import Sampler from './lib/sampler'
+
+import draw from './draw'
+import keys from './lib/keys'
+import color from './lib/color'
+import mouse from './lib/mouse'
+
+import { Hall } from './lib/hall'
+
+import {
+ browser, requestAudioContext,
+ randint, randrange, choice, clamp, lerp, dist, shuffle,
+ isMobile,
+} from './lib/util'
+
+const root = 440
+const s = 50
+const w = window.innerWidth
+const h = window.innerHeight
+const ws = w/s, hs = h/s
+
+const HALLWAY_LENGTH = 147
+const SPEAKER_COUNT = 16
+
+let notes = [299, 336, 374, 399, 449, 498, 561, 598].map(i => i/2)
+notes = notes.concat(notes.map(i => i/2))
+notes = notes.concat(notes.map(i => i*2))
+notes = shuffle(notes)
+
+let samplers = {}
+let sampler
+
+requestAudioContext( () => {
+ samplers.smash = new Sampler('samples/smash/g{}.mp3', 12)
+ // samplers.glass = new Sampler('samples/glass/0{}Particle.mp3', 20)
+ // samplers.kalimba = new Sampler('samples/kalimba/380731__cabled-mess__sansula-08-c-raw.wav', 10)
+ samplers.choice = (m,n) => {
+ const r = Math.random()
+ if (r < m) return samplers.smash
+ if (r < m+n) return samplers.kalimba
+ return samplers.glass
+ }
+ Tone.Buffer.on('load', function(){
+ console.log('all buffers are loaded.')
+ redraw()
+ })
+})
+
+
+const hall = new Hall ({
+ length: HALLWAY_LENGTH,
+ speakers: SPEAKER_COUNT,
+})
+
+function redraw(){
+ draw.clear()
+}
+
+keys.listen(index => {
+ // trigger(Math.random(), ((index+7) % SPEAKER_COUNT) / SPEAKER_COUNT, 0, samplers.smash)
+ const sample = samplers.smash.choice()
+ const buf = sample.players[0]._buffer.get()
+ if (! buf) return
+ const pcm = buf.getChannelData(0)
+ const sr = buf.sampleRate
+ const duration = buf.duration
+ console.log(buf)
+ console.log(duration.toFixed(2) + " s.")
+ draw.clear()
+ draw.waveform(pcm)
+ draw.spectrum(pcm)
+})
+
+mouse.register({
+ down: (x, y) => {
+ redraw()
+ },
+ move: (x, y, dx, dy) => {
+ },
+ up: (x, y) => {
+ },
+})
+
+let timeout, px = 0, py = 0
+function play(x, y){
+}
+function trigger(x, y, t, sampler){
+ t = t || 0
+ t += Tone.now()
+ sampler = sampler || last_dist > 40
+ ? samplers.choice(0.2, 0.2)
+ : samplers.choice((1-y) * 0.2, y*0.02)
+ const freq = notes[Math.floor(x * notes.length)]
+ const speaker = hall.play(sampler, y, freq, x, t)
+
+ draw.triangle(
+ lerp(x, 0, 1) * window.innerWidth,
+ lerp(y, 0, 1) * window.innerHeight - 20,
+ 40
+ )
+}
+
+
+