i-score-old / i-score

an interactive intermedia sequencer
www.i-score.org
23 stars 5 forks source link

OSC learning : some nodes are not recorded #51

Closed avilleret closed 9 years ago

avilleret commented 10 years ago

Dans mon setup, j'ai un patch pd qui reçoit de l'osc, j'ai une fonction "populate" qui permet d'envoyer l'arborescence de mon application à i-score. Ça envoie en fait tous les paramètres une fois pour que i-score puisse apprendre. Dans i-score, tous les paramètres n'apparaîssent pas, il en manque beaucoup. Ça arrive très souvent (je ne dis pas tout le temps car il m'est arrivé une fois de voir tous mes nodes se créer correctement une seule fois)

J'ai fait un pach de test pureadata, il utilise la bibliothèque osc de mrpeach, mais notez que la version dans les dépôts Debian (et donc Ubuntu) est buggée.

Tout cela sous Ubuntu 14.10 64bit avec Pd 0.46-2 et i-score 0.2b5

avilleret commented 10 years ago

le patch est ici : https://github.com/avilleret/i-score/tree/dev/test/learn_bug

avilleret commented 10 years ago

sous OSX avec le patch suscité, j'obtiens le crashlog suivant : https://gist.github.com/avilleret/e71286d909877e27e0da

est-ce lié à #41 ?

avilleret commented 10 years ago

since #41 reports this could be related to bundle I disabled it in PureData and I got this crash log : https://gist.github.com/avilleret/b461e1abaf90f90e8f4d Note that i-score doesn't crash so often on Ubuntu, but wrong tree is recorded.

C'est pour ça que j'ai ouvert ce ticket. Mais là je me demande pourquoi j'ai écrit en anglais tout d'un coup...

bltzr commented 10 years ago

et si tu fais plusieurs passes pour apprendre le namespace ? parce qu'après, une fois sauvé, tu n'as plus besoin de faire de learn, il le garde dans le fichier. et du coup, ça peut te permettre de bosser en attendant qu'on règle ça....

avilleret commented 10 years ago

bah oui mais je suis en phase de développement, le namespace change toutes les 2 minutes...

bltzr commented 10 years ago

et il ne prend pas les nouveaux trucs au fur et à mesure, même quand ils ne sont pas nombreux ? je pensais que le problème venait du fait qu’il y en avait beaucoup d’un coup Théo, tu peux jeter un oeil demain ?

theod commented 10 years ago

oui je regarderai demain. par contre, question con, comment on fait pour télécharger les patchs depuis la page github (voir le dossier directement). Il me montre le texte mais je ne trouve pas le moyen de télécharger le fichier (et si je copie/colle le texte dans texteedit il me mets pleins de backslash à la fin !)

jln- commented 10 years ago

quand tu visionnes le fichier, tu as un bouton raw qui affiche en texte simple (que tu peux ensuite copier/coller)

avilleret commented 10 years ago

Sinon tu peux aussi ajouter mon dépôt a ton git et faire un checkout de ma branche. Ou encore faire un cherry-pick de mon commit dans la branche que tu veux. Le 6 nov. 2014 12:03, "Julien Rabin" notifications@github.com a écrit :

quand tu visionnes le fichier, tu as un bouton raw qui affiche en texte simple (que tu peux ensuite copier/coller)

— Reply to this email directly or view it on GitHub https://github.com/i-score/i-score/issues/51#issuecomment-61963685.

theod commented 10 years ago

euh… sinon je veux bien les fichiers par mail je crois que ça ira plus vite :-) merci !

avilleret commented 10 years ago

do it yourself http://antoine.villeret.free.fr

2014-11-06 12:11 GMT+01:00 theod notifications@github.com:

euh… sinon je veux bien les fichiers par mail je crois que ça ira plus vite :-) merci !

— Reply to this email directly or view it on GitHub https://github.com/i-score/i-score/issues/51#issuecomment-61964436.

theod commented 10 years ago

ok j'ai compris :-)

theod commented 10 years ago

je viens de tester 3 fois avec succès le learn (du moins je crois donc je mets un screenshot pour être sure. les noeuds repliés sont identiques à ceux dépliés). capture d ecran 2014-11-06 a 12 36 00

theod commented 10 years ago

j'ai eu cependant une fois où il y as eu un paramètre supplémentaire nommé "P .dfont" (?) donc peut-être que certaines infos autres que les adresses sont envoyées et ça crée des bugs … capture d ecran 2014-11-06 a 12 39 18

theod commented 10 years ago

alors du coup peut-être est-ce due au fait que je teste sur Mac et pas sur Linux (avec Pd 0.43.4-extended) ?

avilleret commented 10 years ago

non j'ai testé aussi de mon côté sous OSX 10.10 avec Pd-extended 0.43-4 et i-score 0.2b5 et ça crash (cf les backtrace dans cette issue)

quelle version de i-score utilises-tu ? 0.2b5 ? ou une version de dev ?

est-ce que la branche dev est fonctionnelle ? / est-ce que ça vaut le coup que je fasse un build de mon côté avant de faire des rapport de bugs ?

theod commented 10 years ago

effectivement je travaille sur la branche dev. on fait en sorte que la branche dev soit stable et on travaille sur des branches qui en partent et y reviennent. après c'est bien de tester la version distribuée mais peut-être faut-il faire plus de pré-release (pascal ?)

avilleret commented 10 years ago

bon je vais utiliser la branche dev alors par contre je ne pourrai plus faire de test sous OS X dans un premier temps je vais seulement compiler sous linux

bltzr commented 10 years ago

non, stop ! pas dev il est instable à cause d’un mauvais merge essaie master, plutôt… ou, mieux release/0.2

bltzr commented 10 years ago

en fait, la branche dev a pas mal de trucs en cours, car la branche condition_edition a été mergée dedans, au lieu du contraire… donc c’est assez buggé, en fait…

ce que je vais faire dans l’heure qui suit, c’est de passer tous les commits récents (avant ce merge) dans la branche release/0.2, donc je te conseille de plutôt essayer de là..

sinon, JM a fait des installers ubuntu - pour répondre à Théo : on n’a pas fait de pré-releases récemment car on essayait d’avoir de les générer par script, et ça a pris du temps… mais maintenant ça devrait aller mieux...=

bltzr commented 10 years ago

et, sinon, chez moi ça marche (mais pas avec le bundle, seulement quand je clique sur le message get) j’ai essayé sur dev, et ça marche par contre ça ne marche pas sur release/0.2 donc j’essaye de faire des cherry-picks de tous les nouveaux commits et je vous dis

avilleret commented 10 years ago

bah désolé pascal mais c'est déjà compilé :-) et je peux dire que ça ne marche pas sur la branche dev sous Ubuntu du moins, ça a fonctionné une fois et une seule, plus jamais depuis...

enfin sur la branche dev... je ne sais pas trop ce que j'ai compilé... j'ai suivi le Readme dans OSSSIA/OSSIA/README.md après vérification les dossier i-score et Jamoma sont sur la branche dev, donc j'imagine que le binaire qui est apparu est lui aussi issu de cette branche. Au démarrage il me dit :

*** Initialisation of Score environnement ***
Score -- Version 0.2
bltzr commented 10 years ago

en fait, après d’avantage d’essais, ça ne marche pas à tous les coups sur dev non plus… en fait, on dirait que ça marche mieux vers le début qu’ensuite… bizarre !!!

en tous cas, c’est toujours JamomaFoundation qui a l’air de déconner…

et, sinon, j’ai cherry-picker toutes les nouveautés dans release/0.2, donc mieux vaut utiliser celle-à que dev=

bltzr commented 10 years ago

du moins, ça a fonctionné une fois et une seule, plus jamais depuis…

la même pour moi…

avilleret commented 10 years ago

avec un fresh build de release/0.2 ça ne marche pas mieux

aussi, le learn ne fonctionne qu'une seule fois, ensuite impossible de rajouter un noeud automatiquement

avilleret commented 10 years ago

j'ai trouvé un workaround provisoire au lieu d'envoyer tous les paramètre en une seule fois, je délaye chaque message aléatoirement ça à l'air de marcher pour l'instant

bltzr commented 10 years ago

cool !

On 06 Nov 2014, at 15:57, Antoine Villeret notifications@github.com wrote:

j'ai trouvé un workaround provisoire au lieu d'envoyer tous les paramètre en une seule fois, je délaye chaque message aléatoirement ça à l'air de marcher pour l'instant

— Reply to this email directly or view it on GitHub https://github.com/i-score/i-score/issues/51#issuecomment-61990401.

avilleret commented 9 years ago

Est-ce qu'il y a eu des changements là dessus qu'il faudrait tester ? De mon côté le workaround ne fonctionne pas à tout les coups. Notamment j'ai remarqué qu'il faut que fasse les choses dans un certain ordre pour que ça se passe bien : 1- ouvrir i-score et ajouter un device OSC et activer le learn 2- ouvrir le patch Puredata 3- dumper tous les paramètres en OSC

Et je n'arrive pas à le faire planter dans GDB sous Ubuntu.

avilleret commented 9 years ago

En faisant encore des tests, je me rends compte qu'une chose : Lorsqu'un paramètre est ajouté, apparemment i-score reconstruit toute l'arborescence et à chaque node, j'ai un message New node created Du coup, lorsque je les 296 paramètres de mon applications, il rafraichit 296 fois le namespace et j'ai donc 1+2+3+4+5+...+296 soit plus de 160000 fois le message New node created.

Et si je mets mes 296 paramètres dans un bundle, i-score en rate plein. Et enfin, si je dump tous mes paramètre en même temps dans un même bundle (donc les timetags sont censés être tous identiques), i-score ne comprends rien du tout.

Est-ce qu'il ne faudrait pas : 1- mettre un speed limiter sur le rafraichissement de l'arborescence, pour éviter que ça ne fasse trop souvent (d'ailleurs est-ce que les quelques crash qui ont été reportés, ne seraient pas du à des buffer overflow ?) 2- lorsque les paramètres font parti d'un bundle attendre la fin du bundle pour les traiter tous ensemble et ne rafraichir qu'une seule fois l'arborescence

enfin c'est juste des pistes de réflexion...

theod commented 9 years ago

effectivement, le callback vers i-score devrait mettre à jour un drapeau pour dire qu'il y a eu un changement et la maquette de vrai aller vérifier que ce drapeau est levé toute les ~200 ms par exemple (puis rabaisser ce drapeau).

qu'en penses-tu @jcelerier ? je peux m'occuper de créer ce drapeau côté Engine.

Grizix commented 9 years ago

Il faudrait surtout que le moteur sache interpréter un bundle non ?

Le 1 décembre 2014 17:55, theod notifications@github.com a écrit :

effectivement, le callback vers i-score e vrai mettre à jour un drapeau pour dire qu'il y a eu un changement et la maquette de vrai aller vérifier que ce drapeau est levé toute les ~200 ms par exemple (puis rabaisser ce drapeau).

qu'en penses-tu @jcelerier https://github.com/jcelerier ? je peux m'occuper de créer ce drapeau côté Engine.

— Reply to this email directly or view it on GitHub https://github.com/i-score/i-score/issues/51#issuecomment-65095796.

theod commented 9 years ago

le moteur sais interpréter un bundle ! c'est OSCpack qui s'en occupe et split le bundle en plusieurs messages qui sont envoyés successivement. le problème c'est que quand il y en a beaucoup d'un coup, l'interface se rafraichît autant de fois qu'il reçoit de message.

Grizix commented 9 years ago

C'est ça, il faudrait que la sémantique de bundle, ou au moins les informations de timestamp, puissent remonter via le moteur jusqu'à l'interface peut-être.

Le 2 décembre 2014 10:32, theod notifications@github.com a écrit :

le moteur sais interpréter un bundle ! c'est OSCpack qui s'en occupe et split le bundle en plusieurs messages qui sont envoyés successivement. le problème c'est que quand il y en a beaucoup d'un coup, l'interface se rafraichît autant de fois qu'il reçoit de message.

— Reply to this email directly or view it on GitHub https://github.com/i-score/i-score/issues/51#issuecomment-65203677.

Clément Bossut

bltzr commented 9 years ago

du coup, il n'y a rien de simple que l'on puisse faire pour cela, n'est-ce pas ?

avilleret commented 9 years ago

je pense que l'idée de @theod est bonne : lever un drapeau lorsque le namespace est mis à jour et une fonction poll vérifie ce drapeau toutes les 200ms pour mettre à jour l'interface.

mais encore une fois vu que ça concerne 0.2, peut-être que c'est pas trop la peine d'embêter les dev avec ça et que ceux qui ont besoin de régler le problème (c'est à dire moi) trouvent un workaround... (en fait je pense me pencher sur ce problème dès que j'aurai un peu de temps et lorsque j'aurai terminé le CMake de JamomaMax)

jcelerier commented 9 years ago

ça me semble bien! pour clément : c'est l'api qui poll et qui push ou bien c'est l'api qui met le drapeau (dans le Device j'imagine) que l'interface va lire régulièrement ? (la seconde solution me semble mieux).

jm


Jean-Michaël Celerier http://www.jcelerier.name

2014-12-09 14:59 GMT+01:00 Antoine Villeret notifications@github.com:

je pense que l'idée @theod https://github.com/theod est bonne : lever un drapeau lorsque le namespace est mis à jour et une fonction poll vérifie ce drapeau toutes les 200ms pour mettre à jour l'interface.

mais encore une fois vu que ça concerne 0.2, peut-être que c'est pas trop la peine d'embêter les dev avec ça et que ceux qui ont besoin de régler le problème (c'est à dire moi) trouve un workaround... (en fait je pense me pencher sur ce problème dès que j'aurai un peu de temps et lorsque j'aurai terminer le CMake de JamomaMax)

— Reply to this email directly or view it on GitHub https://github.com/i-score/i-score/issues/51#issuecomment-66285933.

Grizix commented 9 years ago

Ohla, hola, on cherche une solution pour 0,2 ou pour 0,3, je suis perdu ...

Le 9 décembre 2014 20:36, Jean-Michaël Celerier notifications@github.com a écrit :

ça me semble bien! pour clément : c'est l'api qui poll et qui push ou bien c'est l'api qui met le drapeau (dans le Device j'imagine) que l'interface va lire régulièrement ? (la seconde solution me semble mieux).

jm


Jean-Michaël Celerier http://www.jcelerier.name

2014-12-09 14:59 GMT+01:00 Antoine Villeret notifications@github.com:

je pense que l'idée @theod https://github.com/theod est bonne : lever un drapeau lorsque le namespace est mis à jour et une fonction poll vérifie ce drapeau toutes les 200ms pour mettre à jour l'interface.

mais encore une fois vu que ça concerne 0.2, peut-être que c'est pas trop la peine d'embêter les dev avec ça et que ceux qui ont besoin de régler le problème (c'est à dire moi) trouve un workaround... (en fait je pense me pencher sur ce problème dès que j'aurai un peu de temps et lorsque j'aurai terminer le CMake de JamomaMax)

— Reply to this email directly or view it on GitHub https://github.com/i-score/i-score/issues/51#issuecomment-66285933.

— Reply to this email directly or view it on GitHub https://github.com/i-score/i-score/issues/51#issuecomment-66343192.

theod commented 9 years ago

au départ la solution que je proposais était pour 0.2 mais c'est certainement un problème qui sera aussi vrai entre l'API et 0.3 donc à spécifier dans l'API.

theod commented 9 years ago

@avilleret : effectivement si tu as une solution côté client on va faire sans en attendant 0.3.

Grizix commented 9 years ago

Pour moi, la solution de drapeau était un bout de scotch. Dans 0.3, on devrait pouvoir juste gérer correctement un bundle de bout en bout et s'assurer que tous les messages soient traités correctement.

2014-12-11 10:56 GMT+01:00 theod notifications@github.com:

@avilleret https://github.com/avilleret : effectivement si tu as une solution côté client on va faire sans en attendant 0.3.

— Reply to this email directly or view it on GitHub https://github.com/i-score/i-score/issues/51#issuecomment-66596079.

avilleret commented 9 years ago

j'ai implémenté la solution de clément à ma manière, ça fonctionne pour moi, j'espère que j'ai rien cassé...

theod commented 9 years ago

@cbossut : je réagis à "Dans 0.3, on devrait pouvoir juste gérer correctement un bundle de bout en bout et s'assurer que tous les messages soient traités correctement" parce que j'ai regardé comment sont géré les bundles aujourd'hui. Avec l'utilisation de la librairie OSCPack, les bundles sont bien reçus mais c'est la librairie OSCPack qui s'occupe de splitter le bundle en plusieurs messages et de les transmettre en tant que message. Du coup côté client de la librairie, on ne voit pas la différence entre la réception d'un message et d'un bundle. Je ne sais pas comment fonctionne les autres librairies OSC sur ce sujet mais si on ne trouve pas d'autres librairies qui fonctionne autrement il va falloir modifier une librairie existante pour gérer nous-même la réception des bundles ce qui signifie devoir maintenir du code supplémentaire. Par ailleurs la notion de bundle me semble très orientée OSC et n'est pas présente dans tous les protocoles comme MIDI ou DMX donc est-ce que cette notion ne va pas complexifier l'API inutilement ?

avilleret commented 9 years ago

je pense que c'est un faux problème, les bundles sont déjà gérés correctement le bug venait simplement de l'implémentation du rafraichissement du namespace qui n'était pas thread safe l'implémentation que j'en faite n'est peut être pas idéale (notamment la varialbe globale statique see https://github.com/i-score/i-score/blob/dev/headers/data/Maquette.hpp#L82) mais a le mérite de fonctionner pour 0.2

Grizix commented 9 years ago

Bon, je ne connais pas OSCpack, et il faudrait sûrement plancher sur tout ça, mais j'ai la sensation qu'il va nous falloir user quand même de la sémantique de bundle, pour les conditions par exemple, et aussi en envoi, pour les enveloppes. Je regarderai à l'occasion. En MIDI, effectivement, le bundle n'existe pas, c'est un des motifs de la naissance de l'OSC. Le workaround est de mettre la même date à plusieurs messages. En DMX, j'en sais rien.

Le 12 décembre 2014 12:18, Antoine Villeret notifications@github.com a écrit :

je pense que c'est un faux problème, les bundles sont déjà gérés correctement le bug venait simplement de l'implémentation du rafraichissement du namespace qui n'était pas thread safe l'implémentation que j'en faite n'est peut être pas idéale (notamment la varialbe globale statique see https://github.com/i-score/i-score/blob/dev/headers/data/Maquette.hpp#L82) mais a le mérite de fonctionner pour 0.2

— Reply to this email directly or view it on GitHub https://github.com/i-score/i-score/issues/51#issuecomment-66760772.

avilleret commented 9 years ago

Le DMX est un protocol série où les valeurs de tous les canaux sont envoyées les unes à la suite des autres dans ce qu'on appelle une trame DMX. La trame pourrait s'apparenter à un bundle dans le concept puisqu'elle permet, comme le bundle, d'envoyer séquentiellement (donc à des temps physiques différents puisque la liaison est sérielle (en opposition à une transmission parallèle)) des valeurs dont les temps logiques sont identiques. Il n'y a pas à ma connaissance de tel concept en MIDI puisque les événements MIDI sont envoyés sans aucune information sur leur temporalité (une note midi n'a pas de durée).

Grizix commented 9 years ago

Ah, effectivement, dans l'utilisation du protocole, je ne sais pas, mais dans la norme des fichiers MIDI, comme on spécifie le délai avec le dernier message, on peut spécifier un délai de 0 pour que les messages arrivent en même temps.

Le 12 décembre 2014 17:17, Antoine Villeret notifications@github.com a écrit :

Le DMX est un protocol série où les valeurs de tous les canaux sont envoyées les unes à la suite des autres dans ce qu'on appelle une trame DMX. La trame pourrait s'apparenter à un bundle dans le concept puisqu'elle permet, comme le bundle, d'envoyer séquentiellement (donc à des temps physiques différents puisque la liaison est sérielle (en opposition à une transmission parallèle)) des valeurs dont les temps logiques sont identiques. Il n'y a pas à ma connaissance de tel concept en MIDI puisque les événements MIDI sont envoyés sans aucune information sur leur temporalité (une note midi n'a pas de durée).

— Reply to this email directly or view it on GitHub https://github.com/i-score/i-score/issues/51#issuecomment-66794511.