genish.js
Version:
54 lines (41 loc) • 1.16 kB
JavaScript
let gen = require('./gen.js'),
floor= require('./floor.js'),
sub = require('./sub.js'),
memo = require('./memo.js')
let proto = {
basename:'wrap',
gen() {
let code,
inputs = gen.getInputs( this ),
signal = inputs[0], min = inputs[1], max = inputs[2],
out, diff
//out = `(((${inputs[0]} - ${this.min}) % ${diff} + ${diff}) % ${diff} + ${this.min})`
//const long numWraps = long((v-lo)/range) - (v < lo);
//return v - range * double(numWraps);
if( this.min === 0 ) {
diff = max
}else if ( isNaN( max ) || isNaN( min ) ) {
diff = `${max} - ${min}`
}else{
diff = max - min
}
out =
` var ${this.name} = ${inputs[0]}
if( ${this.name} < ${this.min} ) ${this.name} += ${diff}
else if( ${this.name} > ${this.max} ) ${this.name} -= ${diff}
`
return [ this.name, ' ' + out ]
},
}
module.exports = ( in1, min=0, max=1 ) => {
let ugen = Object.create( proto )
Object.assign( ugen, {
min,
max,
uid: gen.getUID(),
inputs: [ in1, min, max ],
})
ugen.name = `${ugen.basename}${ugen.uid}`
return ugen
}