diff examples/05-Communication/OSC/render.cpp @ 464:8fcfbfb32aa0 prerelease

Examples reorder with subdirectories. Added header to each project. Moved Doxygen to bottom of render.cpp.
author Robert Jack <robert.h.jack@gmail.com>
date Mon, 20 Jun 2016 16:20:38 +0100
parents
children 5779ed0562ac
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/05-Communication/OSC/render.cpp	Mon Jun 20 16:20:38 2016 +0100
@@ -0,0 +1,111 @@
+/*
+ ____  _____ _        _    
+| __ )| ____| |      / \   
+|  _ \|  _| | |     / _ \  
+| |_) | |___| |___ / ___ \ 
+|____/|_____|_____/_/   \_\
+
+The platform for ultra-low latency audio and sensor processing
+
+http://bela.io
+
+A project of the Augmented Instruments Laboratory within the
+Centre for Digital Music at Queen Mary University of London.
+http://www.eecs.qmul.ac.uk/~andrewm
+
+(c) 2016 Augmented Instruments Laboratory: Andrew McPherson,
+  Astrid Bin, Liam Donovan, Christian Heinrichs, Robert Jack,
+  Giulio Moro, Laurel Pardue, Victor Zappi. All rights reserved.
+
+The Bela software is distributed under the GNU Lesser General Public License
+(LGPL 3.0), available here: https://www.gnu.org/licenses/lgpl-3.0.txt
+*/
+
+
+#include <Bela.h>
+#include <OSCServer.h>
+#include <OSCClient.h>
+
+OSCServer oscServer;
+OSCClient oscClient;
+
+// this example is designed to be run alongside resources/osc/osc.js
+
+// parse messages recieved by OSC Server
+// msg is Message class of oscpkt: http://gruntthepeon.free.fr/oscpkt/
+void parseMessage(oscpkt::Message msg){
+    
+    rt_printf("recieved message to: %s\n", msg.addressPattern().c_str());
+    
+    int intArg;
+    float floatArg;
+    if (msg.match("/osc-test").popInt32(intArg).popFloat(floatArg).isOkNoMoreArgs()){
+        rt_printf("recieved int %i and float %f\n", intArg, floatArg);
+    }
+    
+}
+
+bool setup(BelaContext *context, void *userData)
+{
+    // setup the OSC server to recieve on port 7562
+    oscServer.setup(7562);
+    // setup the OSC client to send on port 7563
+    oscClient.setup(7563);
+    
+    // the following code sends an OSC message to address /osc-setup
+    // then waits 1 second for a reply on /osc-setup-reply
+    bool handshakeRecieved = false;
+    oscClient.sendMessageNow(oscClient.newMessage.to("/osc-setup").end());
+    oscServer.recieveMessageNow(1000);
+    while (oscServer.messageWaiting()){
+        if (oscServer.popMessage().match("/osc-setup-reply")){
+            handshakeRecieved = true;
+        }
+    }
+    
+    if (handshakeRecieved){
+        rt_printf("handshake recieved!\n");
+    } else {
+        rt_printf("timeout!\n");
+    }
+    
+	return true;
+}
+
+void render(BelaContext *context, void *userData)
+{
+    // recieve OSC messages, parse them, and send back an acknowledgment
+    while (oscServer.messageWaiting()){
+        parseMessage(oscServer.popMessage());
+        oscClient.queueMessage(oscClient.newMessage.to("/osc-acknowledge").add(5).add(4.2f).add(std::string("OSC message recieved")).end());
+    }
+}
+
+void cleanup(BelaContext *context, void *userData)
+{
+
+}
+
+/* ------------ Project Explantation ------------ */
+
+/**
+\example 05-OSC
+
+Open Sound Control
+------------------
+
+This example shows an implementation of OSC (Open Sound Control) which was 
+developed at UC Berkeley Center for New Music and Audio Technology (CNMAT).
+
+It is designed to be run alongside resources/osc/osc.js
+
+The OSC server port on which to receive is set in `setup()` 
+via `oscServer.setup()`. Likewise the OSC client port on which to 
+send is set in `oscClient.setup()`.
+
+In `setup()` an OSC message to address `/osc-setup`, it then waits 
+1 second for a reply on `/osc-setup-reply`.
+
+in `render()` the code receives OSC messages, parses them, and sends 
+back an acknowledgment.
+*/