Chargement...
 
Skip to main content

7 - Développer/traduire/documenter/annoncer une application


OSC Ardour RESOLU

France
Je travail sur une appli qui doit piloter Ardour avec OSC.
J'utilise Liblo pour OSC. Ex :

Copy to clipboard
int sendOSCMessage(){ lo::Address a("localhost", "3819"); a.send("/strip/fader", "if", 1, 0.4); return 0; }

Pas de soucis, cela fonctionne.

Si je lance oscdump sur le port 8000 dans un terminal et que je fais
oscsend 127.0.0.1 3819 /strip/list dans un autre terminal, j'obtiens en dump :

Copy to clipboard
#reply ssiiiiii "MT" "MIDI" 0 36 1 0 1 0 #reply ssiiiiii "MT" "MIDI 3" 0 8 1 0 2 0 #reply ssiiiiii "MT" "MIDI 1" 0 36 1 0 3 0 #reply ssiiiiii "MT" "MIDI 2" 0 64 1 0 4 0 #reply ssiiiiii "AT" "Audio" 18 18 1 0 5 0 #reply ssiiiiii "AT" "Audio 1" 2 8 0 0 6 0 #reply shhi "end_route_list" 48000 10944593 0


ce qui est conforme.

Comment puis-je récupérer ces infos, ou tout autre feedback d'Ardour, en utilisant Liblo dans mon code?

Par ailleurs, Ardour peut-il retourner les valeurs de ses réglages : slader par exemple?


Merci
France
Il faut que tu instancies un serveur liblo, et que tu lui associes des méthodes qui répondent au message réponse que ardour émet.

Je lis l'en-tête de la bibliothèque liblo (en C) et j'y trouve un exemple que voici, qui montre le procédé d'envoi-réponse.
Copy to clipboard
* serv = lo_server_new(NULL, err); * lo_server_add_method(serv, "/reply", "ss", reply_handler, NULL); * lo_send_from(t, serv, LO_TT_IMMEDIATE, "/foo/bar", "ff", 0.1f, 23.0f);


Avec "/reply" et "ss" la signature de la méthode, mais toi ce sera autre chose sans doute, d'après la sortie de oscsend.
Aussi c'est possible de définir une méthode "attrape-tout" en passant des NULL, ce qui est pratique afin de recevoir tout message qui arrive.

Enfin ça ne suffit pas tout à fait pour que cela fonctionne, il faut aussi que tu fasses tourner la réception de message du serveur dans une boucle, par exemple à l'aide d'une tâche dédiée (thread). voir "lo_server_wait"
Ceci permet de mettre en marche les callback ("reply_handler").
France
Euh La!!! J'ai un peu l'impression qu'on me parle chinois. Je vais réfléchir à la bête!!!
Merci pour ta réponse.
France
Bon. De retour.
J'avais un problème avec Liblo qui m'envoyé un message d'erreur lors de la compilation d'un serveur en raison d'un set_callbacks non reconnu.
J'ai recompilé liblo et j'ai fait un petit test à partir de l'exemple du serveur pour c++ :

Copy to clipboard
int argc, void *data, void *user_data); lo::ServerThread st(8000); if (!st.is_valid()) { std::cout << "Nope." << std::endl; return 1; } st.set_callbacks([&st](){printf("Thread init: %p.\n",&st);}, [](){printf("Thread cleanup.\n");}); std::cout << "url: " << st.url() << std::endl; std::atomic<int> received(0); st.add_method("/strip/gain", "if", [&received](lo_arg **argv, int) {std::cout << "/strip/gain (" << (++received) << "): " << argv[0]->i<<" arg:" << argv[1]->f << std::endl;}); /* * Start the server. */ st.start();


et là, merveille lorsque je fais dans un terminal :

oscsend 127.0.0.1 3819 "/strip/gain" if 2 -56.02

Ardour me positionne bien le gain de la piste, que je récupère également comme retour dans mon serveur.

/strip/gain (232): 3 arg:-1.00114 par exemple

De même, Ardour me communique bien les réglages du volume de mes pistes.
je considère donc le problème résolu, même s'il reste beaucoup à faire.

Cordialement
France
Chouette que tu aies trouvé une solution.

Note modération : le sujet étant résolu, merci d'ajouter un [RÉSOLU] (ou un [CONTOURNÉ], ou bien encore un [ABANDONNÉ]) dans le titre de ton premier message. Voir ce paragraphe du manuel du site pour davantage d'informations.