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

Ronni Montoya ronni.montoya at gmail.com
Sat Dec 28 09:58:32 EST 2013


Hi , i been trying to run the code Joel posted.
Im still noobie and i havent worked with classes before on chuck.

I created 2 .ck files, one called MyFunc.ck with the class and another
called Phasor.ck with the rest of the code.

ive tried "chuck MyFunc.ck Phasor.ck" in my commnand line but im
getting this error message:


[Phasor.ck]:line(1): undefined type 'MyFunc'...
[Phasor.ck]:line(1): ... in declaration ...



any idea what am i doing wrong?


2013/12/27, Joel Matthys <jwmatthys at yahoo.com>:
> 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
>
> _______________________________________________
> 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