[chuck-dev] ugen design question
Ge Wang
gewang at CS.Princeton.EDU
Sat Aug 19 15:17:15 EDT 2006
Hi Brad!
> However, ideally I'd like the function to deliver/update the incoming
> value whenever it came from max/msp, something like this:
>
> (i.e. no loop in the script, but during execution any change coming
> from
> maxin.inletval would indeed affect the sineosc frequency).
If I understand this correctly, then you might make maxinlet a chuckian
Event (as Perry pointed out like the OSC-related objects, as well as
MIDI, HID, and a few other objects in ChucK). In that case, you can
write code that looks like:
// infinite event loop
while( true )
{
// wait on event
inlet => now;
// set freq
inlet.inletval => s.freq;
}
This would only fire as updates came in from the inlet object. It
should work, but the code ain't pretty. Look in chuck_lang.* and
midiio_rtmidi.* for MidiIn related-stuff. I think the crucial
components are:
1. the class 'maxinlet' should extend "Event" in the
type_engine_import_class_begin
2. the actual C++ class that does the work should extend Chuck_Event,
or at least hold a pointer to a Chuck_Event to be notified on event
3. the actual C++ class may want to have a circular buffer of some kind
for incoming events
4. as events come in, they get put on the buffer, and
.queue_broadcast() should be called on the Chuck_Event to be notified -
the rest is handled by chuck
5. the chuckian class 'maxinlet' should also implement the can_wait()
function.
Wow, yuck - what a disaster. Needless to say, we hope to improve this
for the upcoming import mechanism...
Best,
Ge!
More information about the chuck-dev
mailing list