Bonjour,
Comment faire pour envoyer un message d'une abstraction à une autre quand un étage d'abstraction les sépare.
J'ai par exemples cet emboitage d'abstractions :
- Base
- abstraction01 $0 1
- abstraction02 $0 1
- abstration03 $0 1
Si je veux par exemple envoyer un message depuis "Base" vers "abstraction03" (qui est dans "abstraction02), comment procéder ?
Je n'ai pas de problème quand les abstractions sont d'un étage voision.
Si je veux par exemple envoyer un message de "Base" vers "abstraction01", je fais :
- dans "Base" : [s $0-message]
- dans "abstraction01" : [r $1-message]
… et ça marche.
En fait, dès qu'il y a plus d'un étage d'abstractions en poupée russe et que les abstractions que je veux faire communiquer sont séparées, je n'arrive à rien.
Y a-t-il une solution ? Je suppose qu'il me manque quelques bases, mais les renseignements sont assez difficiles à trouver.
Merci d'avance pour vos lumières
Hors ligne
Attention réponse
[r $1$2-message]
Je te laisse te dépatouiller avec ça.
Mais, au vue de là où tu es arrivé, tu devrais t'en sortir.
Si vraiment tu galères, je prendrais le temps de te faire un patch d'exemple.
Bon courage.
Hors ligne
Merci beaucoup, je vais expérimenter ça !
C'est le genre d'exemple qui m'a vraiment manqué pour avancer avec Puredata
J'avais bien acheté le bouquin "Loadbang", de Jehannes Kreidler, mais je n'y ai rien trouvé d'un peu approfondi sur ces problèmes de $.
Hors ligne
Bon, j'ai expérimenté un peu et ça avance. Il me reste un problème : Quand j'utilise $0 dans la création de l'instance d'une abstraction.
Dans le patch (simpliste aussi) que je joints, je n'arrive pas à trouver la solution pour envoyer un message du niveau 1 au niveau 3.
Comment faire ?
Hors ligne
L'archive est vide chez moi...
Essaye en .zip... pour voir...
Sinon, pour ce qui est du $0 (nombre aléatoire unique donné à la création), tu n'as pas vraiment moyen de le récupérer si ce n'est en le renvoyant du 3 vers le 1 à l'initialisation...
C'est pourquoi j'attribue moi-même un "ID" à mes abstraction via les arguments...
ID qui me sert aussi à obtenir un comportement spécifique des boites les unes par rapport aux autres (typiquement, construire une grille dans GEM).
Pourquoi es-tu attaché au $0 ?
Pour tous messages internes à une abstraction de "second niveau" [s $1$2 toto], [s $1$2 tata], [r $1$2 toto], [r $1$2 tata] fonctionnent...
Dernière modification par Olivier (2012-01-11 12:15:33)
Hors ligne
Ben… d'après ce que j'ai compris, $0 permet que la référence soit unique, et donc d'éviter la communicution entre deux patchs ouverts avec des référence semblables.
Mais je vais creuser un peu dans ta direction.
Sinon, je joints de nouveau le fichier, cette fois en .zip.
Hors ligne
Je vois...
Mais en fait, si tu n'arrives pas à résoudre ton problème c'est que quand tu dis :
citation :
Je n'ai pas de problème quand les abstractions sont d'un étage voisin.
Et bien tu te trompes...
Ton [r $1-message] dans ton "abstraction01" est en fait aussi atteint dans toutes tes abstraction02, 03, 04...
C'est comme si tu avais mis [s message] dans "base" et [r message] dans les abstractions.
Essaye... tu va t'en rendre compte par toi-même.
Le $0 permet effectivement d'obtenir un numéro unique pour ne pas que les abstractions interfèrent entre elles.
C'est l'équivalent de la notion de "local" dans d'autre langage...
Si tu veux obtenir ce numéro colle un [init $0] dans tes abstraction avec une boite nombre en dessous et relance ton patch.
Tu obtiendras ainsi ce fameux numéro unique que tu pourras utiliser dans "base" si tu le souhaites...
Mon point de vue, si tu veux être méthodique, est de privilégier la numérotation "à la mano" de tes abstractions de manière à pouvoir atteindre rigoureusement et très précisément tes boites.
Par "à la mano", j'entends "en suivant une méthode qui t'est propre"... car ça n'empêche pas le patchage dynamique (bien au contraire, ça le facilite).
Comme dis dans mon précédent message, je t'invite à rendre local tes send et receive avec des $1$2 plutôt qu'avec un très fastidieux $0... (mais uniquement si tu as besoin de les atteindre de l'extérieur, car sinon, le $0 est tout à fait approprié)
D'autant qu'après tu peux avoir des $1$2$3$4...
Bon courage.
EDIT :
Cela peut apparaître compliquer mais dis toi qu'une fois que tu auras compris ça, tu auras fait un très grand pas vers l'architecturisation de tes patchs...
BONUS :
1 ) Ne pas commencer la numérotation des abstractions par "0" car "03" sera transmis comme "3" et la communication ne se fera pas... (à moins de transmettre un nombre arbitraire avant "903", par exemple).
2 ) Si $1$2 donne 23, tu obtiens un vrai float avec 2 comme dizaine et 3 comme unité... étonnant non ?
Dernière modification par Olivier (2012-01-11 14:28:56)
Hors ligne
Pour fabriquer des envois avec deux variables, je conseillerais d'utiliser un séparateur explicite comme un tiret "-". Cela permet d'envoyer un message à l'abstraction 23-1 et non 231.
Pour créer des envois de façon dynamique à deux variables, j'avais fait ce petit patch il y a bien longtemps. Je l'ai remanié un peu si ça peut aidé :
Dernière modification par jerome (2012-01-15 20:52:07)
Hors ligne
Pages: 1