C++ : Communication OSC

Ce wiki a été archivé en 2018.

Le nouveau wiki se trouve à: ressources.labomedia.org

Les fonctionnalités sont désactivées: vous pouvez faire une recherche sur Google site:https://wiki.labomedia.org et découvrir La Labomedia.

De Centre de Ressources Numériques - Labomedia
Aller à : navigation, rechercher

Installation de OSCPack

Télécharger OSCPack

cd
wget http://oscpack.googlecode.com/files/oscpack_1_1_0.zip

Dézipper l'archive

unzip oscpack_1_1_0.zip 

Installation

cd oscpack_1_1_0
sudo make install

Après l'installation, nous pouvons nettoyer les fichiers superflus

cd
rm -r oscpack_1_1_0
rm oscpack_1_1_0.zip 

Réception OSC

Dans le répertoire de votre choix, créer un fichier avec

sudo nano main.cpp

Coller dedans le code source suivant

#include <iostream>
#include <cstring>
#include "osc/OscReceivedElements.h"
#include "osc/OscPacketListener.h"
#include "ip/UdpSocket.h"

using namespace std;
using namespace osc;

#define PORT 7001

class ReceveurOSC : public OscPacketListener {
protected:

    virtual void ProcessMessage(const ReceivedMessage& m, const IpEndpointName& remoteEndpoint) {
        (void) remoteEndpoint; // Supprime les avertissements pour les paramètres non-utilisés
		
        try {
            if (strcmp( m.AddressPattern(), "/test") == 0 ) {
                ReceivedMessageArgumentStream args = m.ArgumentStream();
		osc::int32 valeur;
                args >> valeur >> EndMessage;
                cout << "Réception à l'adresse '/test1' d'un message avec comme valeur : " << valeur << endl;
            }
        } catch(Exception& e) {
            cout << "Erreur pendant le traitement OSC : "
			<< m.AddressPattern() << ": " << e.what() << endl;
        }
    }
};

int main(int argc, char* argv[]) {
    (void) argc; // Supprime les avertissements pour les paramètres non-utilisés
    (void) argv; // Supprime les avertissements pour les paramètres non-utilisés

    ReceveurOSC receveur;
    UdpListeningReceiveSocket s(IpEndpointName(IpEndpointName::ANY_ADDRESS, PORT), &receveur);
    s.RunUntilSigInt();

    return 0;
}

Sauvegarder

Ctrl-o

Quitter

Ctrl-x

Pour lancer la compilation

g++ -Wall -o ReceveurOSC main.cpp -loscpack -I /usr/local/include/oscpack

Pour exécuter le programme

./ReceveurOSC

Pour tester le programme, voici un émetteur de message OSC sous Processing

import oscP5.*;
import netP5.*;
  
OscP5 oscP5;
NetAddress myRemoteLocation;

String adresseDeLaRaspberry = "192.168.2.3";

void setup() {
  size(400,400);
  frameRate(25);
  oscP5 = new OscP5(this,7000);
  myRemoteLocation = new NetAddress(adresseDeLaRaspberry, 7001);
}

void draw() {
  background(0);  
}

void mousePressed() {
  OscMessage myMessage = new OscMessage("/test");
  myMessage.add((int)mouseX);
  oscP5.send(myMessage, myRemoteLocation); 
}