Skip to content
bind OSC messages and values with only writing tiny code on setup once.
C++ Makefile C
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


easy utility for publish/subscribe OSC message.


  • ofxOsc


  • this addon is tested with oF0.9.8~
  • if you use oF0.9.0~, then you can use std::function<void(ofxOscMessage &)>! detail: API Reference
  • if you use oF~0.8.4, then you can use branch:v0_1_x_oF084
  • if you have challange spirit, please use dev/vX.Y.Z branch.
  • if you want to join development ofxPubSubOsc, open the issue and post the PR for dev/vX.Y.Z.


How to use

class ofApp : public ofBaseApp {
	int foo;
	ofColor c;
	ofPoint p;
	void setup() {
		ofxSubscribeOsc(9005, "/foo", foo);
		ofxSubscribeOsc(9005, "/color", c);
		ofxSubscribeOsc(9005, "/p", p);
		ofxPublishOsc("localhost", 9006, "/fps", &ofGetFrameRate);
		ofxSubscribeOsc(9005, "/lambda", [](const std::string &str){
			ofLogNotice() << "receive " << str;
		ofxSubscribeOsc(9005, "/trigger_event", [](){
			ofLogNotice() << "receive trigger_event";
	void update() {
		// do NOTHING about OSC on update!!!
	void draw() {
		ofDrawCircle(p, 5);

Simple API Reference

API Reference is imperfect now.

If you want to use advanced features, see Advanced


  • void ofxSubscribeOsc(int port, const string &address, SupportedType &value);

bind a value to the argument(s) of OSC messages with an address pattern address incoming to port.

See more ofxSubscribeOsc

  • ofxUnsubscribeOsc(int port, const string &address);

unbind from OSC messages with an address pattern address incoming to port.

  • ofxUnsubscribeOsc(int port);

unbind from OSC messages with any address patterns incoming to port.

See class ofxOscSubscriberManager, class ofxOscSubscriber


  • void ofxPublishOsc(const string &ip, int port, const string &address, SupportedType &value, bool whenValueIsChanged = true);

publish value as an OSC message with an address pattern address to ip:port every time the value has changed. If whenValueIsChanged is set to false, then the binded value is sent every frame after App::update.

See more ofxPublishOsc, ofxPublishOscIf

  • void ofxUnpublishOsc(const string &ip, int port, const string &address);

unbind a publisher sending OSC message with an address pattern address to ip:port.

  • void ofxUnpublishOsc(const string &ip, int port);

unbind all the publishers sending to ip:port.

See class ofxOscPublisherManager, class ofxOscPublisher


  • void ofxRegisterPublishingOsc(const string &ip, int port, const string &address, SupportedType &value)
  • void ofxPublishRegisteredOsc(const string &ip, int port, const string &address)

register value as an OSC message with an address pattern address to ip:port. and publish when call ofxPublishRegisteredOsc(ip, port, address).

  • void ofxUnregisterPublishingOsc(const string &ip, int port, const string &address)

unregister OSC message with an address pattern address to ip:port.

  • void ofxUnregisterPublishingOsc(const string &ip, int port)

unregister all the messages sending to ip:port.

NOTE: registable type is same to ofxPublishOsc. see more ofxPublishOsc.


  • void ofxSendOsc(const string &ip, int port, const string &address, Arguments && ... arguments)

Supported types

  • Arithmetic is any type of Int32, Int64 or Float

Arithmetic (Int32, Int64, Float)

  • bool (published as Int32)
  • unsigned char, char (published as Int32)
  • unsigned short, short (published as Int32)
  • unsigned int, int (published as Int32 or Int64 (if sizeof(int) == 8 then Int64))
  • unsigned long, long (published as Int64 or Int64 (if sizeof(int) == 8 then Int64))
  • unsigned long long, long long (published as Int64)
  • float (published as Float)
  • double (published as Float)

NOTE: long double is not guaranteed

String (String)

  • string

openframeworks basic types


  • ofVec2f (published as Float * 2)


  • ofVec3f (= ofPoint) (published as Float * 3)


  • ofVec4f (published as Float * 4)
  • ofColor (published as Int32 * 4)
  • ofShortColor (published as Int32 * 4)
  • ofFloatColor (published as Float * 4)
  • ofQuaternion (published as Float * 4)
  • ofRectangle (published as Float * 4)


  • ofMatrix3x3 (published as Float * 9)


  • ofMatrix4x4 (publish as Float * 16)


  • ofBuffer

ofParameter with supported types

  • ofParameter<SupportedType>

NOTE: we only support subscribing ofParameterGroup. See How to subscribe ofParameterGroup

array/vector of supported types

  • SupportedType[size]
  • vector<SupportedType>

if you use vector<SomeType> vec;, when vec will be resized every receiving OSC messages.

NOTE: do NOT use vector<vector<SupportedType>>, vector<SupportedType>[size]



  • std::function<R(Arguments ...)>;
  • std::function<R(ofxOscMessage &)>
  • pair of U &that, T (U::\*callback)(Arguments ...);
  • pair of U \*that, T (U::\*callback)(Arguments ...);

Arguments ... are all of types we can use in


  • std::function<T()>;
  • pair of U &that, T (U::\*callback)();
  • pair of U \*that, T (U::\*callback)();

Update history

2018/05/08 ver 0.3.0

  • refactor all for C++11
  • add ofxSendOsc
  • ofxSubscribeOsc got more flexible.
    • multi arguments
    • multi arguments callback
  • add ofxOscMessageEx

2016/01/25 ver 0.2.2 release

  • bugfix: about ofQuaternion's operator>>, operator<< (issued by musiko. thanks!!!)

2016/01/04 ver 0.2.1 release

  • critical bugfix, hehe
  • enable subscribe lambda has argument is not ofxOscMessage.
  • enable subscribe method has no argument
  • update exmaples (xcodeproj) for oF0.9.0
  • some cleaning source and doxygen

Older update histories

about Versioning

ofxPubSubOsc uses Mood Versioning. maybe, 1.0.0. will not come.


MIT License.


  • ISHII 2bit [ISHII Tsuubito Program Office]
  • i[at]

Supporting Contributor

Special Thanks

At the last

Please create a new issue if there is a problem.

And please throw a pull request if you have a cool idea!!

If you get happy with using this addon, and you're rich, please donation for support continuous development.

Bitcoin: 17AbtW73aydfYH3epP8T3UDmmDCcXSGcaf

You can’t perform that action at this time.