UNPKG

genish.js

Version:
51 lines (40 loc) 1.18 kB
'use strict' let gen = require( './gen.js' ), history = require( './history.js' ), sub = require( './sub.js' ), add = require( './add.js' ), mul = require( './mul.js' ), memo = require( './memo.js' ), delta = require( './delta.js' ), wrap = require( './wrap.js' ) let proto = { basename:'rate', gen() { let inputs = gen.getInputs( this ), phase = history(), inMinus1 = history(), genName = 'gen.' + this.name, filter, sum, out gen.closures.add({ [ this.name ]: this }) out = ` var ${this.name}_diff = ${inputs[0]} - ${genName}.lastSample if( ${this.name}_diff < -.5 ) ${this.name}_diff += 1 ${genName}.phase += ${this.name}_diff * ${inputs[1]} if( ${genName}.phase > 1 ) ${genName}.phase -= 1 ${genName}.lastSample = ${inputs[0]} ` out = ' ' + out return [ genName + '.phase', out ] } } module.exports = ( in1, rate ) => { let ugen = Object.create( proto ) Object.assign( ugen, { phase: 0, lastSample: 0, uid: gen.getUID(), inputs: [ in1, rate ], }) ugen.name = `${ugen.basename}${ugen.uid}` return ugen }