import Tone from 'tone' import { lerp, choice } from './util' const player_count = 2 const filter_count = 3 const crossfaders = [] export default class Sampler { constructor(path, count){ this.samples = (() => { let s = '', a = [] for (let i = 1; i < count; i++) { const s = i < 10 ? '0' + i : i; a.push({ root: 100, fn: path.replace(/{}/, s) }) } return a })() this.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 = 'http://asdf.us/glass/' + fn.replace('wav','mp3') } let player = new Tone.Player({ url: fn, retrigger: true, playbackRate: 1, }) sample.players.push(player) } }) } choice(){ return choice(this.samples) } play(freq, time, output) { const best = this.choice() best.index = (best.index + 1) % player_count const player = best.players[ best.index ] freq = freq || best.root time = time || Tone.now() player.playbackRate = freq / best.root if (player.loaded) { player.stop() player.disconnect() player.connect(output) player.start(time) } else { console.log('loading') } return player } }