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
[email protected]
https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
_______________________________________________
chuck-users mailing list
[email protected]
https://lists.cs.princeton.edu/mailman/listinfo/chuck-users