genish.js
Version:
51 lines (40 loc) • 1.18 kB
JavaScript
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
}