/ofxOscQuery

ofx Addon for OSCQuery support

Primary LanguageC++OtherNOASSERTION

ofxOscQuery

Introduction

This openFrameworks addon allows to create an OSCQuery server, based on the specifications available at: https://github.com/Vidvox/OSCQueryProposal.

What will this addon do ?

It will expose all of your ofParameters (and ofPArameterGroups) as a tree of OSC nodes, create OSC senders and receivers, and implement an OSCQuery server in order to manage queries and replies.

Basically it is a wrapper for libossia (safeC++ API) but it follows OSC Query’s dialect instead of ossia’s. Though, as does ossia, it covers all the features from the OSCQuery specifications (including listening, and notification for path changes).

Here is a video showing the addon in use with two other apps (VDMX and Vezér)

This addon works in a similar way to ofxOscParameterSync from the ofxOsc addon:

  • declare an ofxOscQueryServer in your ofApp,
  • set it up by attaching it to an ofParameterGroup, and declaring OSC and WS ports.
  • All children ofParameters and ofParameterGroups will then be scanned recursively, exposed to the OSCQuery protocol
  • libossia will manage all network communication and queries from then on.
  • supplementary OSCQuery attributes can be set to the OSCQuery nodes attached to ofParameters and ofParameterGroups

Here is a video showing how to add OSCQuery support to one of of's "vanilla" examples

This is all demonstrated in example-singleServer - further documentation is included in the source, and in particular in ofxOssiaNode, which is the core of it all.

Several Servers can be set up in the same ofApp by attaching them to several ofParameterGroups (see example-twoServers). As mentioned in the Roadmap below, another option will soon be added (without breaking the current usage) for managing this better: by using one pool object for holding several servers. Stay tuned!

OSCQuery Clients

Several client examples are provided in the example-singleServer folder: for pure-data, Max, and with a simple html example.

It's also possible to view the ofApp's namespace as JSON by opening a browser (preferably FireFox for pretty formatting), by opening the URL: http://yourServersIP:port/ - the default port (e.g. in example-singleServer being 5678).

One can also download mrRay's (from VidVox) nice OSCQueryBrowser for more advanced browsing.

Of course it really gets interesting when trying to control your ofApp, which you can do with those OSCQuery-supporting sequencers:

Compatibility

  • Works with of 0.10 - for 0.9.8, see specific legacy release
  • 0.9.8 version works with ofNode (aka with cmake), 1.0.0 doesn't since ofNode hasn't been ported to 0.10 (yet)
  • Available for:
    • macOS,
    • Linux (tested on Ubuntu and archlinux, should work on other distros with gcc >= 6)
    • Windows (32 and 64 bits)
  • ARM (aka raspberry Pi) should come soon
  • CodeBlocks support for Win should be doable if one wants to investigate on that - Please feel free to ask for help and guidance in the issue, and as always, PRs are welcome!

Dependencies

A compiled version of libossia is included in the release.

Roadmap

  • add a, more generic, ofxOscQuery object, that acts as a pool of servers, and allows to add them dynamically
  • make the OSC Query namespace dynamic (i.e. adding OSC nodes when adding ofParameters and ofParameterGroups)
    • first manually by adding a method to add specific nodes (should come soon)
    • then automatically by adding some listener to ofParameterGroup when a new child ofParameter is created

Version history

Version 1.0 (09/2018):

Operational version, complying with the official OSC Query specs.

  • updated with the final 1.0 version of the OSC Query specifications
  • updated for of 0.10
  • methods have been added to manage OSC Query Attributes
  • the findNode method has been replaced by subscripting

version 0.9.8 (09/2018)

Legacy release for openframworks 0.9.8 - Same as version 1.0, except that it will build in 0.9.8

Version 0.1 (04/2018):

Initial version of the addon, with only basic functionality