Ryan (& Kas?),
You're just making swells, right? In that case, the only change should
be that you need to provide ramp-down time of e.duration() => now.
Also, make sure you scale the gain so that you keep the overall power
of the signal below 1.0.
One other thing, though, is that you don't need to reconnect the e =>
dac every time--just do this (with my personal favorite trick, the
array of SinOscs)
SinOsc s[4];
Envelope e => Gain g => dac;
1.0 / s.size() => g.gain; // scales gain to 0.25 for 4 SinOscs.
for (int i; i < s.size(); i++) {
s[i] => e;
}
Makes it easy to change the gains, too, with
for (int i; i < s.size(); i ++) {
Std.rand2f(0, 1) => s[i].gain;
}
and then once you expand from 4 to 100 SinOscs you'll only have to
change the one line of code.
Andrew
2009/11/25 Kassen
Ryan,
When we just want to change a volume (not necessarily start a "new note" as such) it may be better to instead use Envelope.target( float value ). This will ramp to the new value over the set .duration() without any need for further attention and -barring very short set durations- won't cause clicks.
The "rate" your question refers to is set by Envelope.duration( dur ). Something like 50::ms would be my starting point in looking for a good value. You may well be able to get away with a shorter duration.
Hope that helps, Kas.
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users