[chuck-users] function for creating 8 bit waveforms from expressions

Joel Matthys jwmatthys at yahoo.com
Fri Dec 27 19:16:59 EST 2013


Of course this isn't exactly what you asked about, since it takes in an 
8-bit number and you want to take in a number [0-8000], but maybe this 
will get you started.

Maybe Steve can help with how to pass an expression as a reference, 
which would make it possible to change the expression on the fly.

Joel

On 12/27/2013 06:13 PM, Joel Matthys wrote:
> On 12/27/2013 05:08 PM, Steve Morris wrote:
>>
>> It is a mystery to many of us exactly why users are not allowed to 
>> know how to do this. Questions to this list are basically ignored 
>> except by other users. I suspect that ChucK developers don't read 
>> this list and the real point of this list is to hope users will 
>> support each other and stop bothering the developers. It is also 
>> possible that there are no real developers, that ChucK development 
>> consists of an occasional  grad student who shows interest for a 
>> while then moves on to more productive endeavors.
>>
>
> There is a ChuGen example in the examples/extend folder; it's 
> extremely straight-forward. I know the devs read this list, but 
> honestly this is exactly the kind of question we as a community should 
> be able to help with. Let's light some candles rather than curse the 
> darkness.
>
> Now, ChuGen takes floats in the range [-1,1] for its calculations, but 
> you want to work on 8-bit ints, so you'll have to have functions that 
> convert itof and ftoi. Then you can write your expression to work on 
> those samples directly. A Phasor UGen then provides the 0-1 samples 
> in. Try this:
>
> -- 
> // ChuGen
> // Create new UGens by performing audio-rate processing in ChucK
>
> class MyFunc extends Chugen
> {
>     8 => int _b; // default 8 bits
>
>     fun float tick(float in)
>     {
>         ftoi (in, _b) => int ival; // convert in sample to int
>         my_expression(ival) % (1 << _b) => int fval; //calculate and 
> mod into range
>         return (itof (fval, _b)); // convert back to float
>     }
>
>     // your custom expression goes here
>     fun int my_expression (int t)
>     {
>         return t * ( t >> 8 * ( t >>15 | t >> 8) & 20 | ( t >>19) * 5 
> >> t | t >> 3);
>     }
>
>     // helper function to convert float [0,1] to b bits
>     fun int ftoi (float in, int b)
>     {
>         return (in * (1 << b)) $ int;
>     }
>
>     // helper function to convert b bit integer to float [-1,1]
>     fun float itof (int in, int b)
>     {
>         return (in * 1.0 / (1 << (b-1))) - 1;
>     }
>
>     // allow user to set number of bits
>     fun void bits (int b)
>     {
>         b => _b;
>     }
> }
>
> // phasor powers the function with numbers ascending 0-1
> Phasor p => MyFunc f => dac;
> 1 => p.freq;
>
> while(true) 1::second => now;
>
> /// END ///
>
> Joel
> _______________________________________________
> chuck-users mailing list
> chuck-users at lists.cs.princeton.edu
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users



More information about the chuck-users mailing list