Andrew, It is possible to send multiple (mixed) values in one OSC message. Here is a chunk of code I'm working on to let ChucK send data to Processing. ... // send the OSC data xmit.startMsg( "osc_data", "iiff" ); // <----- note the second string here -- it can be a combination of "i" and "f" and other things col => xmit.addInt; // col is an int declared above this code chunk row => xmit.addInt; // ditto // normalize the 'color' data (values[col][row] / Math.pow(2, bit_depth) + 1) / 2 => float color; color => xmit.addFloat; sounding => xmit.addFloat; // once the last element is added (the "iiff" from above) the message goes out ... For more details, check out the osc examples that come with ChucK, along with the specs on this page: http://opensoundcontrol.org/spec-1_0-examples#OSCstrings I have had good luck this week getting ChucK and Processing to play nice together, for what it is worth. Good night, - Greg On Jan 21, 2009, at 12:29 AM, Andrew McPherson wrote:
Hi all,
What are the ways to communicate between ChucK and external programs? Specifically, my code has a lot of parameters to adjust in real time, and a GUI would be a nice way to do that. I could put the GUI together in PD or Cocoa, but how can I transmit the data to ChucK?
The two ways I have found to receive external data are MIDI and OSC. MIDI control changes can be a little coarse in terms of resolution (even with 14-bit values), and for most programs it'll need some sort of loopback driver to handle the routing.
OSC seems closer to a generic way of interchanging data, but it looks like I would have to spork a different thread for each parameter I want to receive (since they'd have different addresses), and that I can only receive one value per OSC event. If I wanted, say, to receive 3 floats as part of one message, is there a way to do that?
Is there a way to read directly from a pipe to another process? I'm thinking of a setup where an event is signaled when new data is available at the input. Any other thoughts on how to approach this task?
Thanks much, Andrew
P.S. Semi-related to the above: is there a way to wait on 2 events simultaneously? Thinking of something like these:
midiEvent || oscEvent => now; // wait for whichever comes first midiEvent || 200::ms => now; // wait with a timeout_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users