summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/draw.js35
-rw-r--r--client/index.js14
-rw-r--r--client/lib/sampler.js8
3 files changed, 43 insertions, 14 deletions
diff --git a/client/draw.js b/client/draw.js
index 0a86d4a..d3affbd 100644
--- a/client/draw.js
+++ b/client/draw.js
@@ -6,25 +6,48 @@ import {
import mouse from './lib/mouse'
import color from './lib/color'
+let w, h
+let rx, ry
+
const canvas = document.createElement('canvas')
const ctx = canvas.getContext('2d')
+
document.body.appendChild(canvas)
+document.body.addEventListener('resize', resize)
+resize()
+recenter()
+requestAnimationFrame(animate)
-let w, h
function resize(){
w = canvas.width = window.innerWidth
h = canvas.height = window.innerHeight
}
-document.body.addEventListener('resize', resize)
-resize()
-
+function recenter(){
+ rx = randint(w), ry = randint(h)
+}
+function animate(t){
+ requestAnimationFrame(animate)
+ ctx.save()
+ ctx.globalAlpha = 0.0001
+ ctx.translate(w/2, h/2)
+ ctx.rotate(0.1)
+ ctx.translate(-rx, -ry)
+ ctx.drawImage(canvas, 0, 0)
+ ctx.restore()
+}
function clear(n){
ctx.fillStyle = 'rgba(255,255,255,' + (n || 0.5) + ')'
ctx.fillRect(0,0,w,h)
+ recenter()
+}
+function triangle(px,py,r){
+ setTimeout( () => tri(px,py,r), Math.random()*10)
+ // setTimeout( () => tri(px,py,r), Math.random()*200)
+ // setTimeout( () => tri(px,py,r), Math.random()*300)
}
-function triangle(px, py, r) {
+function tri(px, py, r) {
ctx.save()
- ctx.globalCompositeOperation = 'difference'
+ ctx.globalCompositeOperation = 'multiply'
ctx.fillStyle = color((px+py)/(w+h), 0, 1, 1)
function p(){
let theta = randrange(0, Math.PI*2)
diff --git a/client/index.js b/client/index.js
index fbe0491..0b5f16b 100644
--- a/client/index.js
+++ b/client/index.js
@@ -21,10 +21,11 @@ const ws = w/s, hs = h/s
let samplers = {}
requestAudioContext( () => {
- samplers['smash'] = new Sampler('samples/smash/g{}.mp3', 12)
- samplers['glass'] = new Sampler('samples/glass/0{}Particle.mp3', 90)
})
+samplers['smash'] = new Sampler('samples/smash/g{}.mp3', 12)
+samplers['glass'] = new Sampler('samples/glass/0{}Particle.mp3', 90)
+
let last_index = 0
keys.listen(index => {
index = Math.abs(index+10)
@@ -63,20 +64,21 @@ mouse.register({
move: (x, y, dx, dy) => {
let count = Math.abs(dx + dy) / 40
if (count < 1) return
- count = clamp(count, 1, 5)
+ count = clamp(count, 1, 10)
if (Math.abs(dx) + Math.abs(dy) > 100) {
samplers['smash'].play(randrange(50, 300) + 100 * (x/window.innerWidth + y/window.innerHeight), 0)
draw.clear()
draw.triangle(x, y, 500)
}
let now = Tone.now()
- let when, i
+ let when, i, player
for (i = 0; i < count; i++) {
when = Math.random()/2000 + (i+ Math.random()/10)/randrange(2,5)
- samplers['glass'].play(
- 100 * randrange(2,5) / randrange(2,5),
+ player = samplers['glass'].play(
+ 100 * randrange(2,5) / randrange(2,5) * randrange(0.5,1.5),
now + when
)
+ player.volume.value = -i*i
}
setTimeout( () => {
draw.triangle(x, y, Math.abs(dx) + Math.abs(dy))
diff --git a/client/lib/sampler.js b/client/lib/sampler.js
index b658596..a0f4dfd 100644
--- a/client/lib/sampler.js
+++ b/client/lib/sampler.js
@@ -4,7 +4,10 @@ import { choice } from './util'
const player_count = 2
const compressor = new Tone.Compressor(-30, 3).toMaster()
-const reverb = new Tone.JCReverb(0.4).connect(Tone.Master)
+const reverb = new Tone.Freeverb({
+ roomSize: 0.2,
+ dampening: 12000,
+}).connect(compressor)
export default class Sampler {
constructor(path, count){
@@ -30,7 +33,7 @@ export default class Sampler {
retrigger: true,
playbackRate: 1,
})
- player.connect(compressor)
+ player.connect(reverb)
sample.players.push(player)
}
})
@@ -47,5 +50,6 @@ export default class Sampler {
player.playbackRate = freq / best.sample.root
player.start(time)
+ return player
}
}