genish.js
Version:
34 lines (26 loc) • 1.01 kB
JavaScript
{
'use jsdsp'
// create a sample increment for our master oscillator
freq = param( 'freq', 110 )
incr = freq / gen.samplerate
// sweep our slave oscillator between 220-660 Hz
// and back over two seconds
syncSweep = peek( [220,880], abs( phasor( .5 ) ) )
// create our master ramp oscillator
master = counter( incr, 0, 1 )
// hard-sync works by forcing a slave oscillator to reset
// its phase whenever a master oscillator completes a cycle.
// The counter ugen provides a wrap property that changes from
// zero to one for a single sample whenever it wraps. We use this
// value to reset our phasor.
slave = phasor( syncSweep, master.wrap )
play( (master + slave) * .01 )
}
// create some notes for our master oscillator to play
notes = [110,165,220]
count = 0
interval = setInterval( ()=> {
freq.value = notes[ count++ % notes.length ]
}, 500 )
// clear setInterval whenever genish.js is cleared
utilities.clear.callbacks.push( ()=> clearTimeout( interval ) )