OfxPubSubOsc
bind OSC messages and values with only writing tiny codes on setup once.
Install / Use
/learn @2bbb/OfxPubSubOscREADME
ofxPubSubOsc
easy utility for publish/subscribe OSC message.
Dependencies
- ofxOsc
Notice
- 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.
TOC
- How to use
- Simple API Reference
- Supported types
- Update history
- License
- Author
- Supporting Contributor
- Special Thanks
- At the last
<a name="HowToUse">How to use</a>
class ofApp : public ofBaseApp {
int foo;
ofColor c;
ofPoint p;
public:
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() {
ofSetColor(c);
ofDrawCircle(p, 5);
}
};
<a name="SimpleAPI">Simple API Reference</a>
API Reference is imperfect now.
If you want to use advanced features, see Advanced
<a name="SimpleAPI_ofxSubscribeOsc">ofxSubscribeOsc</a>
- 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.
- if you want to pick up OSCs which do not match the subscribed addresses, see ofxSetLeadkedOscPicker
See class ofxOscSubscriberManager, class ofxOscSubscriber
<a name="SimpleAPI_ofxPublishOsc">ofxPublishOsc</a>
- 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
<a name="SimpleAPI_ofxRegisterPublishingOsc">ofxRegisterPublishingOsc</a>
- 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.
<a name="SimpleAPI_ofxSendOsc">ofxSendOsc</a>
- void ofxSendOsc(const string &ip, int port, const string &address, Arguments && ... arguments)
<a name="SupportedTypes">Supported types</a>
- Arithmetic is any type of Int32, Int64 or Float
<a name="SupportedTypes_Arithmetic">Arithmetic (Int32, Int64, Float)</a>
bool(published as Int32)unsigned char,char(published as Int32)unsigned short,short(published as Int32)unsigned int,int(published as Int32 or Int64 (ifsizeof(int) == 8then Int64))unsigned long,long(published as Int64 or Int64 (ifsizeof(int) == 8then Int64))unsigned long long,long long(published as Int64)float(published as Float)double(published as Float)
NOTE: long double is not guaranteed
<a name="SupportedTypes_String">String (String)</a>
string
<a name="SupportedTypes_ofBasic">openframeworks basic types</a>
Arithmetic[2]
ofVec2f(published as Float * 2)
Arithmetic[3]
ofVec3f(=ofPoint) (published as Float * 3)
Arithmetic[4]
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)
Arithmetic[9]
ofMatrix3x3(published as Float * 9)
Arithmetic[16]
ofMatrix4x4(publish as Float * 16)
Blob
ofBuffer
<a name="SupportedTypes_ofParameter">ofParameter with supported types</a>
ofParameter<SupportedType>
NOTE: we only support subscribing ofParameterGroup. See How to subscribe ofParameterGroup
<a name="SupportedTypes_ArrayVector">array/vector of supported types</a>
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]
<a name="SupportedTypes_Callback">Callback</a>
Subscribe
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
Publish
std::function<T()>;- pair of
U &that,T (U::\*callback)(); - pair of
U \*that,T (U::\*callback)();
<a name="UpdateHistory">Update history</a>
2021/09/30 ver 0.3.3
- fixed bug on ver 0.3.2 (issued by hanasaan. thanks!!!)
2021/09/26 ver 0.3.2 [Deprecated!!]
- fixed constructor of ofxOscMessageEx
- fixed some constness about notify, read
2020/04/15 ver 0.3.1
- added ofxSubscribeAllOsc, ofxSubscribeAllOscForPort
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
Older update histories
about Versioning
ofxPubSubOsc uses Mood Versioning. maybe, 1.0.0. will not come.
<a name="License">License</a>
MIT License.
<a name="Author">Author</a>
- ISHII 2bit [ISHII Tsuubito Program Office]
- i[at]2bit.jp
<a name="SuppotingContributor">Supporting Contributor</a>
<a name="SpecialThanks">Special Thanks</a>
- HIGA Satoru
- SHIMIZU Motoi
- IWATANI Nariaki
- USAMI Takuto
- HORII Satoshi
- TOMOTO Yusuke
- HANAI Yuuya
- musiko
- TAESU Yuma
- HAYASAKA Akira
- ASAI
- Aris Bezas
- moebiussurfing
<a name="AtTheLast">At the last</a>
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
