Bonjour,
Je cherche à envoyer des données via OSC depuis un programme écrit en C++ vers SuperCollider. Côté SuperCollider, tout va bien puisque je déjà transférais des données entre ce dernier et PD ou P5. Par contre, je commence à travailler de plus en plus avec OpenCV depuis des programmes que j'écris en C++ et j'aimerais bien exploiter certaines données dans dans SuperCollider, mais je ne trouve pas de librairie OSC pour le C++ (je débute dans ce langage). Alors, si quelqu'un à déjà transféré des données de cette façcon, je serais bien heureux de savoir comment on s'y prend
Merci
Hors ligne
Hors ligne
Oui, j'ai regardé "oscpack", mais ça fais 4 ans que rien n'a été mis à jour sur cette page et plusieurs liens ne fonctionnent malheureusement plus (http://ross.smartelectronix.com/index.c … ase_1_0_2/). J'ai récupéré le dernier snapshot, mais je n'arrive pas faire marcher le "test" qui est fournis
En gros, peux-être que je ne place juste pas les fichier .cpp et les header à la bonne place. J'ai mis les fichiers à côté de mon "main.cpp" pour commencé et les ai inclus simplement (add... + #include "osc/....h"), mais je n'arrive pas faire fonctionné le tout, alors je me suis dis que c'était peux-être désuet à l'heure actuelle? Enfin, j'ai utilisé jusqu'à maintenant des librairies fournis en framework (qt, opencv, etc) et je n'ai pas beaucoup d'expérience encore en C++. As-tu une idée de l'endroit où je dois déposer la librairie pour qu'elle soit reconnue?
Merci pour l'info
Hors ligne
Tiens, j'ai trouvé WOscLib qui semble très bien.
http://wosclib.sourceforge.net/
De plus, tous mes fichiers sont reconnus sans problème
Hors ligne
J'y connais rien en C comme en C++ mais je connais juste ce projet nommé Liblo http://liblo.sourceforge.net/
avec des wrappers perl et python , j'ai déjà utilisé celui du python, plutôt bien, je ne sais pas si c'est compliqué de wrapper du C pour C++ ??
Hors ligne
Merci pour l'info Oli44
Liblo semble effectivement bien, mais est en C. Quant à WOscLib, tout est prêt pour le C++. Il ne me reste donc qu'à comprendre comment bien l'utiliser et envoyer les valeurs issues d'une cam (OpenCV) vers SC.
Je garde tout de même Liblo en tête, au cas ou j'aurais un projet ultérieur en C.
Hors ligne
En fait, je suis tombé aussi sur un message (sur le forum de PD) où j'ai trouvé ce code C++ qui n'emploie que les librairies standard (si je ne me trompe pas, voir ci-dessous). Enfin, je lance le programme et aucun message d'erreur... Je vais donc regarder aussi vers cette direction.
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
#define SOCKET_ERROR -1
#define BUFSIZE 4096
int main(int argc, char **argv){
int sockfd, portno=3000, protocol;
struct sockaddr_in server;
struct hostent *hp;
char *hostname;
hostname = "127.0.0.1";//localhost="127.0.0.1"
protocol = SOCK_STREAM;
sockfd = socket(AF_INET, protocol, 0);
if (sockfd < 0){
exit(1);
}
server.sin_family = AF_INET;//connect socket using hostname
hp = gethostbyname(hostname);
if (hp == 0){
exit(1);
}
memcpy((char *)&server.sin_addr, (char *)hp->h_addr, hp->h_length);
server.sin_port = htons((unsigned short)portno); //assign client port number
connect(sockfd,(struct sockaddr *) &server, sizeof (server));//connect
//now loop reading stdin and sending it to socket
while (1){
char buf[BUFSIZE], *bp, nsent, nsend;
fgets(buf, BUFSIZE, stdin);
nsend = strlen(buf);
for (bp = buf, nsent = 0; nsent < nsend;){
int res = send(sockfd, buf, nsend-nsent, 0);
if (res < 0){
exit(1);
}
send(sockfd, ";", 1, 0);
nsent += res;
bp += res;
}
}
}
Hors ligne
C'est d'ailleurs sa librairie que j'emploie je crois (mrpeach) pour envoyer mes données de PD vers SC en OSC
Je communiquerai avec lui si je ne parviens pas à passer mes donner avec la WOscLib.
Merci pour l'info.
Hors ligne