I've made it in this way:
SinOsc s1 => g => dac;
220.0 => s1.freq;
spork ~ loop1();
SinOsc s2 => g ;
spork ~ loop2();
0.4 => g.gain ;
0.01 => g.mix;
spork ~ loop3();
<<<"waiting on main shred">>>;
2::minute => now;
fun void loop3()
{
for (0 => int ca; ca < 10; ca++)
{ 0.2 => g.gain;
10::second => now;
0.0 => g.gain;
1::second => now;
0.2 => g.gain;
10::second => now;
0.0 => g.gain;
1::second => now;
}
}
fun void loop1()
{
<<<"sporked loop1">>>;
for (0 => int i; i < 21; i++)
{
Std.rand2f(130.0, 440.0) => s1.freq;
0.2 => s1.gain;
0.5::second => now;
0.0 => s1.gain;
0.5::second => now;
}
<<<"loop1 done">>>;
}
fun void loop2()
{
<<<"sporked loop2">>>;
for (0 => int i; i < 21; i++)
{
Std.rand2f(130.0, 440.0) => s2.freq;
0.2 => s2.gain;
0.5::second => now;
0.0 => s2.gain;
0.5::second => now;
}
}
Is it a good way, or are there other ways more elegant and simpler?