And finally (?), in case anyone finds this thread and not the electro-music forum postings, I found the listenAll() method of OscIn in Appendix D of Ajay Kapur, Perry Cook, Spencer Salazar & Ge Wang, _Programming for Musicians and Digital Artists_. It seems to solve the problem: OscIn oin; OscMsg msg; 12001 => oin.port; oin.listenAll(); while (true) { oin => now; while ( oin.recv(msg) ) { <<< "got message:", msg.address, msg.typetag >>>; for(int n; n < msg.numArgs(); n++) { if(msg.typetag.charAt(n) == 'i') // integer <<< "arg", n, ":", msg.getInt(n) >>>; else if(msg.typetag.charAt(n) == 'f') // float <<< "arg", n, ":", msg.getFloat(n) >>>; else if(msg.typetag.charAt(n) == 's') // string <<< "arg", n, ":", msg.getString(n) >>>; } } 1::ms => now; } Ben On 8/22/14, 3:43 PM, Ben Steinberg wrote:
(Never mind, I take back the last bit about recompiling with lower numbers -- I was testing from the command line with miniAudicle still open and bound to the port.)
Ben
On 8/22/14, 3:21 PM, Ben Steinberg wrote:
At Joel's and antimon's suggestion at electro-music, I tried OscRecv instead of OscIn -- all 16 listeners worked. Recompiling with 256 makes the original code work, as Joel said; my attempts to recompile with lower numbers (24, 32, 72) did not -- no listeners worked.
Ben
On 8/22/14, 2:43 PM, Ben Steinberg wrote:
Wow, thanks! I'll see about getting a dev environment together and recompiling with something like 32 or 64 --
Ben
On 8/22/14, 2:38 PM, Joel Matthys wrote:
It looks to me like the limit of 12 is hard-coded in src/ulib_opsc.cpp, line 201:
m_inMsgBuffer(CircularBuffer<OscInMsg>(12)),
I raised it to 256 and recompiled and your example worked correctly.
I can definitely see the value of allowing more than 12 addresses on the same port. I'm not sure the memory impact though.
Joel --
On 08/22/2014 12:25 PM, Ben Steinberg wrote:
I've posted about this to the electro-music forum: http://electro-music.com/forum/viewtopic.php?p=402793
In trying to write some code for the Illucia dtr, I found that adding addresses to an OscIn object appeared not to work after twelve addresses. I wrote a test program that wasn't illucia-specific; the following code starts 16 OSC transmitters and 16 receivers. When you run it, you can see that transmitters 0-15 all transmit, but only receivers 0-11 receive.
for ( 0 => int i ; i < 16 ; i++ ) { spork ~ output(i); spork ~ input(i); }
while ( true ) { 1::second => now; }
fun void output(int number) { 12008 => int port; "localhost" => string hostname; OscOut xmit; xmit.dest(hostname, port); while (true) { Math.random2f(5.5, 8.5) => float wait; wait::second => now; xmit.start("/tester/what/" + number); Math.random2f(0.0, 1.0) => float temp => xmit.add; xmit.send(); <<< "sent", number, temp >>>; } }
fun void input(int number) { OscIn oin; OscMsg msg; 12008 => oin.port; oin.addAddress("/tester/what/" + number + ", f"); float val; while (true) { oin => now; while ( oin.recv(msg) != 0 ) { msg.getFloat(0) => val; <<< "received", number, val >>>; } 5::ms => now; } }
I'm running ChucK 1.3.4 on Mavericks, with and without miniAudicle. _______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users