hi all first of all thanks for the answers Kassen wrote:
here i am again with a couple of questions : A : is it possible to quit Chuck from Chuck? I need to quit chuck when a certain osc message arrives, and i was wondering if there is a command to do this.
How about using the comand (forgot it's name) to call something from the OS and use it to call "chuck --kill"?
B: can i store references to functions in variables? similar to the python: def myfunc(): dowhatever myvar = myfunc myvar()
I don't think so, since they aren't objects they can't be asigned (to my knowledge). As a work around you could write a function that would have the new name and just pass on the variables to the older one? I don't realy understand the purpose from your example though.
I explain below my problem and why i wanted to assign a function to a variable i am trying to understand how to structure a complex OSC communication with several incoming message types. Because i am new to ChucK i am still trying to understand the chuckian way of doing things, and my paradigm at the moment is python which is the language i use all the time. I am using something like this to deal with the OSC at the moment but which few more message types ///////////////////////////////////////////// // two type of incoming messages in this example -> /pitch and /quit 1 => float pitch; OscRecv recv; 9000 => recv.port; recv.listen(); recv.event("/pitch, f") @=> OscEvent pitch_osc; recv.event("/quit, i") @=> OscEvent quit_osc; spork ~ oscshred(pitch_osc, "pitch"); spork ~ oscshred(quit_osc, "quit"); fun void oscshred(OscEvent e, string s){ while(true){ e => now; while(e.nextMsg() != 0){ if (s=="quit"){ <<<"quiting chuck here">>>; } if (s=="pitch"){ e.getFloat() => pitch; // put incoming value into var <<<"pitch", pitch>>>; } } } } //main loop while ( true ){ 0.2::second => now; } ///////////////////////////////////////////////// So for each message i spork a shred with the event and a string as id, then i check for the string id when a message arrives and trigger some action. It looks stupid to me to have to check for the string value in all of them. Another issue that sounds weird as well is that I need to have few more messages (around 40). The only difference between all those shreds is the action the need to perform so i wanted to declare a variable for each and pass it as a reference when sporking the shread. Something like fun quit(){Machine.crash();} spork ~ oscshred(quit_osc, quit); //passing ref to function fun void oscshred(OscEvent e, func f){ while(true){ e => now; while(e.nextMsg() != 0){ f(); //triggering function, different for each } } But this is impossible then. Couple of more questions, this time about OSC. is it possible to receive arrays? is it possible to check for the beginning of the address and redirect the rest? (like in PD with the OSCroute object, it checks for first part of address, in /sampler6/pitch would check for /sampler6 and if this matches then it sends the rest somewhere else. Sorry if the questions are stupid i am just trying to get my head around Chuck. thanks enrike
Hope that was of some help, Kas.
------------------------------------------------------------------------
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users