/*
// Using adsr envelopes
// Start synths in sequence (takes a while to start)
loop( () => {
for(let i=0; i<5; i++) {
sine.play( (tick) => (40 + tick), {env:adsr, attack:30, release:30});
sleep(12);
}
});
*/
const tri = synth.def( (phase,env) => Math.asin(Math.sin(2*Math.PI*phase)) * env.value);
// Using manually-defined envelopes by setting options.amp to be a function of tick
for(let i=0; i<5; i++) {
tri.play( (t) => (40 + (t + 12*i)%60),
{env:one, amp: (t) => Math.sin(Math.PI*(t+12*i)/60)**4} );
}