summaryrefslogtreecommitdiff
path: root/client/lib/sampler.js
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2018-03-02 17:21:12 +0100
committerJules Laplace <julescarbon@gmail.com>2018-03-02 17:21:12 +0100
commit45d1be31d98ea6f52c4a12571f41e60226ea1046 (patch)
tree92228d63675ae1060d3a6aeab56508b4b8d57229 /client/lib/sampler.js
parentc5d09fb560580403bb248146dd375dd7af14dff8 (diff)
build
Diffstat (limited to 'client/lib/sampler.js')
-rw-r--r--client/lib/sampler.js50
1 files changed, 45 insertions, 5 deletions
diff --git a/client/lib/sampler.js b/client/lib/sampler.js
index c1faa7e..b392caf 100644
--- a/client/lib/sampler.js
+++ b/client/lib/sampler.js
@@ -1,17 +1,22 @@
import Tone from 'tone'
-import { choice } from './util'
+import { lerp, choice } from './util'
+import output from './output'
const player_count = 2
+const filter_count = 3
+
+const notes = [299, 336, 374, 399, 449, 498, 561, 598].map(i => i/2)
-const compressor = new Tone.Compressor(-30, 3).toMaster()
const reverb = new Tone.Freeverb({
roomSize: 0.2,
dampening: 12000,
-}).connect(compressor)
+}).connect(output)
+
+const crossfaders = []
export default class Sampler {
constructor(path, count){
- this.samples = (()=>{
+ this.samples = (() => {
let s = '', a = []
for (let i = 1; i < count; i++) {
const s = i < 10 ? '0' + i : i;
@@ -22,6 +27,8 @@ export default class Sampler {
this.samples.forEach((sample) => {
sample.players = []
+ sample.filters = []
+ sample.crossfaders = []
sample.index = -1
for (let i = 0; i < player_count; i++) {
let fn = sample.fn
@@ -33,8 +40,32 @@ export default class Sampler {
retrigger: true,
playbackRate: 1,
})
- player.connect(reverb)
+
+ let crossFade = new Tone.CrossFade(0.5)
+ sample.crossfaders.push(crossFade)
+
+ let wet = new Tone.Gain(1)
+
+ player.connect(crossFade, 0, 0)
+ wet.connect(crossFade, 0, 1)
+
+ crossFade.connect(output)
+
+ let filter, note
+ let filters = sample.filters = []
+ for (let j = 0; j < filter_count; j++) {
+ note = choice(notes)
+ filter = new Tone.Filter({
+ frequency: filter_count * j * note,
+ Q: 5 * (filter_count-j) + 20,
+ })
+ player.connect(filter)
+ filter.connect(wet)
+ filters.push(filter)
+ }
+ // player.connect(reverb)
sample.players.push(player)
+ sample.filters.push(filters)
}
})
@@ -44,6 +75,7 @@ export default class Sampler {
best.sample.index = (best.sample.index + 1) % player_count
const player = best.sample.players[ best.sample.index ]
+ const crossfader = best.sample.crossfaders[ best.sample.index ]
freq = freq || best.sample.root
time = time || Tone.now()
@@ -54,6 +86,14 @@ export default class Sampler {
} else {
console.log('loading')
}
+
+ crossfader.fade.value = lerp(x_pos, 0.0, 1.0)
+
return player
}
}
+
+let x_pos = 0.5
+document.body.addEventListener('mousemove', (e) => {
+ x_pos = (e.pageX / window.innerWidth)
+}) \ No newline at end of file