UNPKG

genish.js

Version:
55 lines (36 loc) 1.32 kB
'use strict' const gen = require( './gen.js' ), data = require( './data.js' ), poke = require( './poke.js' ), peek = require( './peek.js' ), sub = require( './sub.js' ), wrap = require( './wrap.js' ), accum= require( './accum.js'), memo = require( './memo.js' ) const proto = { basename:'delay', gen() { let inputs = gen.getInputs( this ) gen.memo[ this.name ] = inputs[0] return inputs[0] }, } const defaults = { size: 512, interp:'none' } module.exports = ( in1, taps, properties ) => { const ugen = Object.create( proto ) let writeIdx, readIdx, delaydata if( Array.isArray( taps ) === false ) taps = [ taps ] const props = Object.assign( {}, defaults, properties ) const maxTapSize = Math.max( ...taps ) if( props.size < maxTapSize ) props.size = maxTapSize delaydata = data( props.size ) ugen.inputs = [] writeIdx = accum( 1, 0, { max:props.size, min:0 }) for( let i = 0; i < taps.length; i++ ) { ugen.inputs[ i ] = peek( delaydata, wrap( sub( writeIdx, taps[i] ), 0, props.size ),{ mode:'samples', interp:props.interp }) } ugen.outputs = ugen.inputs // XXX ugh, Ugh, UGH! but i guess it works. poke( delaydata, in1, writeIdx ) ugen.name = `${ugen.basename}${gen.getUID()}` return ugen }