Problems receiving arrays of numbers via OSC

Hello,

I posted this to bugs, but am cross-posting, just in case there is a mistake in my patch that I am not aware of. (Unlikely, but perhaps there are limitations in the AsValue object).

When repeatedly receiving an osc message (’/contours’) followed by an array of ca 1 - 30 random integers of the range of 0-99, at the rate of between 4 and 20 messages per second, it happens at irregular intervals that some of the integers received by vvvv have large values (above 99), that differ from the values sent. The same error occurs if sending an array of floats. It is independent of whether the size of the array sent is constant or if it changes. It may sometimes take several minutes before the error appears, but usually it is quite frequent (several times a minute).

I have tested this by sending such test data from SuperCollider, from Processing, and from PD (Pure Data), all of these running on a Mac. The same error occurs with all three of the above environments, so it is highly unlikely that the error is on the senders side.

I have tried changing the buffer size and the discard/concatenate mode on UDP but this did not have any effect.

Also, I tried testing if all numbers of the received spread are less than (<) 100 with a less-than node object, but it seems to have a bug too: Try running for example a linear spread of 10 or more elements with a range of -8 to 8 and testing for < 10: not all comparisons will return “1”. The range of the spread may have to be different for the error to appear.

The test programs in SuperCollider and Processing and the vvvv patch are included below here, but can also can be downloaded from:

http://earlab.org/uploads/vvvv/osc_receive_bug/

Thanks in advance,

Iannis Zannos

/**
Debugging glitches in values sent to vvvv from SuperCollider.
Trying to see if the same glitches will appear when sending continuously arrays
of 16 random integer values from 0 to 99, via Processing.
(as this happens from SuperCollider)

based on:

  • oscP5sendreceive by andreas schlegel
  • example shows how to send and receive osc messages.
  • oscP5 website at http://www.sojamo.de/oscP5
    */

import oscP5.;
import netP5.
;

OscP5 oscP5;
NetAddress myRemoteLocation;

void setup() {
size(400,400);
frameRate(25);
/* start oscP5, listening for incoming messages at port 12000 */
oscP5 = new OscP5(this, 10000);
// address of vvvv here:
myRemoteLocation = new NetAddress(“192.168.5.66”, 9001);
}

void draw() {
OscMessage myMessage = new OscMessage("/contours");

for(int i=0; i<16; i++) {

myMessage.add(round(random(0, 99)));
};

oscP5.send(myMessage, myRemoteLocation);

background(0);
}

oscreceivedebug.zip (7.5 kB)