Catch all OSC Messages / RegExpr on OSC Formatted strings

Hi there,

I’m trying to catch all incoming OSC Messages with no success.

First wildcards like /* and /? don’t work on the OSCDecode Node, but are stated to work in the OSC standard.

Second I’m trying to RegExpr on the #bunlde string of the OSCEncoder, with no success.

The bundle message with all characters looks like this

  • bundle#0#0#0#0#0#0#0#0#1#0#0#0$/hello/what#0,s#0#0soever#32but#32its#32ok#0#0#0

Now if I RegExpr on it with this expression
/(.*?)#
I get 'hello/what returned, which is the OSC address.

But! This doesn’t work when the output of OSCEncoder is connected directly to the RegExpr Node, only when the string is stored in a StringIOBox (and the connection to OSCEncoder cut). I assume there is some reformatting from UTF to ASCII going on, which the RegExpr isn’t capable of. Is there a way of doing this manually?

THX
Eno

oi eno,

the problem with RegExpr might be, that the # in the osc messages are not that ascii sybol but rather ‘escapes’, e.g. ‘#0’ is the ascii symbol for 0;

osc syntax is structured in 4 (and sometimes 8) bytes. might be easier for manual parsing, if you first split the message accordingly

e.g. for bundled messages get rid of the 16 characters in the beginning (#bundle and timetag), what you have left are the osc messages with an integer in the beginning (padded with #0 to be 4 bytes length), which tells you the lenght of each message…

osc specs

might be easier to solve in a plugin because of that byte-length hassle

Check out https://github.com/elliotwoods/VVVV.Nodes.OSC for an alternative workflow for osc in vvvv (it just wraps vvvv’s own c# osc api mostly)
Its designed to be more high level / cleaner to use than oscencode, etc

Uses global channels and a ‘Sift’ node (which specifically you want to separate out and not use)

To comment on this further:
is there any chance that the original OSC nodes - that still work well enough to my taste - could implement * and ? wildcards, so they live up to the standard?

@elliot: why didn’t you simply create a node that creates and outputs an ‘OSCPacket’, instead of only providing the S and R nodes?

for my understanding * and ? in the osc standard are meant to work the other way round: you can send a message to
/*/foo
and it will be matched by decoders set to
/bla/foo
as well as
/blabla/foo

see?

And does this work with the existing nodes?

yes, all those work with current OSCDecoder (Network)

  1. ‘?’ in the OSC Address Pattern matches any single character
  2. ‘*’ in the OSC Address Pattern matches any sequence of zero or more characters
  3. A string of characters in square brackets (e.g., “string”) in the OSC Address Pattern matches any character in the string. Inside square brackets, the minus sign (-) and exclamation point (!) have special meanings:
  • two characters separated by a minus sign indicate the range of characters between the given two in ASCII collating sequence. (A minus sign at the end of the string has no special meaning.)
  • An exclamation point at the beginning of a bracketed string negates the sense of the list, meaning that the list matches any character not in the list. (An exclamation point anywhere besides the first character after the open bracket has no special meaning.)
  1. A comma-separated list of strings enclosed in curly braces (e.g., “{foo,bar}”) in the OSC Address Pattern matches any of the strings in the list.
  2. Any other character in an OSC Address Pattern can match only the same character.

via: http://opensoundcontrol.org/spec-1_0