[chuck-users] can there be many ::ms in while?

2g electriclightheads at gmail.com
Thu Aug 2 16:53:57 EDT 2007


oh
maybe in the second way
am just looping the 1st while only?

maybe it was a bit too early for me to ask things on the list
(only i can do is modifying the tut)
i thought
100::ms => now;
was something like "100msec later do ..." or "every 100msec do ..."
but i happened to find that in () expression of while

mmm
i'll go through a bit more ahead in the manual
yes
then i'll find Blit-UGen waiting for me?

On 8/2/07, Martin Ahnelöv <operagasten at gmail.com> wrote:
> tor 2007-08-02 klockan 07:34 +0900 skrev 2g:
> > have just started coding on chuck
> > was looking for way to let s1 have 3 overtones
> > flying around him
> > i know it should be something other than rand2f to handle integers
> > but my q is about ::ms in while
> >
> > i wonder which one of these are the right way to use them
> > i thought the latter might be safe but it seems to give one never
> > changing long note
> > and maybe only one another is floating around
> > but none of them give me an error
> >
> >
> > style one:
> >
> > SinOsc s1 => PRCRev g => dac;
> > SinOsc s2 => g;
> > SinOsc s3 => g;
> > SinOsc s4 => g;
> > .25 => g.gain => g.mix;
> > while( true ) {
> >         500::ms => now;
> >         Std.rand2f(30.0, 220.0) => s1.freq;
> >         170::ms => now;
> >         s1.freq() * Std.rand2f(8.0, 16.0) / 8.0 => s2.freq;
> >         75::ms => now;
> >         s2.freq() * Std.rand2f(16.0, 32.0) / 16.0 => s3.freq;
> >         111::ms => now;
> >         s2.freq() * Std.rand2f(16.0, 32.0) / 16.0 => s4.freq;
> > }
> >
> >
> > style two:
> >
> > SinOsc s1 => PRCRev g => dac;
> > SinOsc s2 => g;
> > SinOsc s3 => g;
> > SinOsc s4 => g;
> > .25 => g.gain => g.mix;
> > while( true ) {
> >         200::ms => now;
> >         Std.rand2f(30.0, 220.0) => s1.freq;
> > }
> > while( true ) {
> >         170::ms => now;
> >         s1.freq() * Std.rand2f(8, 16) / 4.0 => s2.freq;
> > }
> > while( true ) {
> >         75::ms => now;
> >         s2.freq() * Std.rand2f(16, 32) / 8.0 => s3.freq;
> > }
> > while( true ) {
> >         111::ms => now;
> >         s2.freq() * Std.rand2f(16, 32) / 8.0 => s4.freq;
> > }
> >
>
> Okey, I'm gonna teach you something about while-loops. A while loop will
> do whatever is in the brackets behind the statements until the
> expression inside the parenthesis is false. When it is false, it
> continues to the next thing after the close bracket (in your case the
> next while-loop).
>
> illustrated with chuck-code:
>
> 1 => int i;
>
> while (i < 10) {
>         <<<i>>>; //print i
>         i + 1 => i;
> }
> <<<"done">>>;
>
> Notice how it prints the numbers 1 to 9, and finally "done"?
>
> Now, look at your second example. Does the expression never return
> false? No, because you have hard coded "true" inside it.
>
> So, your first one should work as you want it, and your second won't.
> (Yes, you can advance time how many times as you want in whatever
> code-context you want)
>
> By the way, have you checked out the Blit-UGen? I think that one might
> satisfy your needs.
>
>
> Hope that helps,
> Gasten
>
> _______________________________________________
> chuck-users mailing list
> chuck-users at lists.cs.princeton.edu
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
>


-- 
2g
http://micro.ispretty.com


More information about the chuck-users mailing list