On m'a expliqué comment utiliser trigger pour envoyer une même valeur vers plusieurs directions dans le bon ordre, ou bien deux valeurs dont une connue au préalable, mais :
Peut-on faire l'équivalent lorsque aucune des valeurs ne sont connues au préalable ?
Pas sûr que cette précision soit utile mais le contexte est le suivant (et ce n'est sans doute pas très clair puisqu'il s'agit d'une abstraction qui en appelle une autre, mais on peut quand même voir à peu près) :
Le cas se présente deux fois :
La première fois (A) ça marche sans que je sache pourquoi.
En revanche la seconde fois (B) ça ne marche pas, et je vois pas pourquoi non plus. (On m'a parlé de l'ordre de création des fils mais cela ne m'a pas permi de changer les choses ici.)
Hors ligne
Il te manque des trigger à plein d'endroits !
après [inlet] à gauche il faut [t f f] à toi de déterminer l'ordre selon ce qu'il se passe dans ton patch.
après [% 12] en haut il faut un [t f f f], même chose pour l'ordre.
après [12__15 ....] il faut que ton [outlet] reçoive aussi depuis [t b f] > Il y a donc un f à ajouter das ce trigger.
D'autre part, pourquoi utilises tu [+ ] si tu ne fais pas d'addition ? Si c'est pour stocker une valeur temporairement, je te conseille de faire comme tout le monde et de prendre [f ] à la place.
Hors ligne
Merci pour ces remarques. J'ai ajouté les triggers. En revanche je ne sais pas encore si ça marche mieux car entre temps un autre problème est survenu. Il n'est surement pas lié au précédent mais je suppose qu'il risque d'être plus difficile à résoudre (le midi ne marche plus).
Hors ligne
J'ignore d'où venait le problème midi, mais il n'est pas réapparu après fermeture de ce qui pouvait être fermé, puis ouverture de ce qui avait été fermé. Donc nous dirons que ce problème n'a jamais existé et je n'avais rien dit (dans la mesure où c'est comme ça que les gouvernements résolvent les problèmes qu'ils ne maîtrisent pas je suppose que cette méthode doit être la bonne).
Donc j'ai ajouté les trigger en choisissant les ordres de priorité qui m'ont semblé convenir, toutefois le résultat est le même. (Diagramme
D'après ses choix il me semble que le la multiplication devrait s'effectuer avec les deux valeurs les plus récentes (c'est le cas pour la valeur de gauche mais pas pour celle de droite).
Hors ligne
Normal !
Si tu suis ce qui arrive de ton inlet :
Première branche : [% 12] puis entrée froide du [- ]
Seconde branche : [% 12] puis [outlet]
Troisième branche : [% 12] puis [select] puis [12_15] puis entrée chaude puis froide de [pow] puis entrée chaude du [* ] (alors que tu n'as rien mis de nouveau dans l'entrée froide, puisque le [- ] du dessus n'a encore rien envoyé, c'est certainement là ton problème) puis [outlet]
Dernière branche : entrée chaude du [- ], puis entrée froide du [* ]
Hors ligne
Moi j'inverserai les deux fils qui arrivent sur [* ].
C'est l'arrivée d'une information sur l'entrée de gauche, dite chaude, qui déclenche le "calcul". Donc comme te le fait remarquer dwan, le calcul de la multiplication a lieu avant la soustraction juste au dessus, donc la valeur qui sort du [mtof] est celle du cycle de calcul précédent qui est en stock dans l'entrée froide de [* ].
Hors ligne
pob a écrit:
Moi j'inverserai les deux fils qui arrivent sur [* ].
Génial.
Avec le message de dawn j'avais compris le problème, mais je voyais vraiment pas la solution.
Donc merci pour les deux messages.
Entre les deux messages il m'est venu une autre question sur le sujet : si j'ai bien compris (pour une abstraction comme pour un objet) les outlet envoient leurs données de droite à gauche. A priori je suppose que cet ordre d'envoie est géré automatiquement par le programme (mais sinon il me semble que mon abstraction devrait continuer à être fautive).
Hors ligne
Hors ligne
pob a écrit:
http://fr.flossmanuals.net/puredata/ch018_le-flot-de-donnees
Et c'est en français...
Ma réponse est tardive, mais merci pour la piqûre de rappel.
J'avais plus ou moins déjà lu ce passage, puisque j'ai tenté de commencer avec ce manuel. Honnêtement je ne considère pas qu'il s'agisse d'un bon manuel pour débutants. Trop peu explicite pour être compréhensible lors d'une première lecture (trop dépourvu d'exemples par exemple). Quant à l'utilité d'une deuxième lecture, a priori je vois pas trop non plus. J'ai pu comprendre le passage cité mais j'aurais difficilement pu le retrouver seul (même si le contraire est théoriquement possible). Donc un manuel malgré lequel je n'aurais pas pu démarrer sans être aider sur ce forum.
Il est vrai que même avec un bon manuel, sans être aidé en général on n'arrive même pas à configurer un logiciel. Alors comme sans ça je n'aurais peut-être pas osé commencer, finalement pourquoi pas.
Voilà à quoi ressemble mon abstraction maintenant :
(Il en faudrait plus pour me vexer, mais j'espère qu'on va pas me dire qu'il aurait fallu mettre des trigger aux inlet de droites par exemple.)
Hors ligne
lionmarron a écrit:
Entre les deux messages il m'est venu une autre question sur le sujet : si j'ai bien compris (pour une abstraction comme pour un objet) les outlet envoient leurs données de droite à gauche.
Pour un objet, habituellement oui : pour une abstraction, pas forcément. Et même pour un objet, ça dépend de ce qui sort des outlets : la gauche peut sortir un float en continu, et la droite uniquement un bang de temps en temps. les deux ne seront pas forcément synchrones et ordonnés.
lionmarron a écrit:
A priori je suppose que cet ordre d'envoie est géré automatiquement par le programme (mais sinon il me semble que mon abstraction devrait continuer à être fautive).
L'ordre d'envoi des données par les outlets est géré par le type qui patche Si tu veux que ça sorte de gauche à droite, tu peux, si tu veux que ça sorte alternativement à gauche puis à droite, tu peux. Tu patches, tu décides ! Pd ne fera rien pour toi de ce côté-là.
Quant à diagnostiquer un patch via capture d'écran, il y a des limites... Sans connaître le comportement que tu attends de ton patch, c'est dur de te dire s'il y a un problème ou pas. Dans l'absolu, effectivement, il est impossible de prédire comment sera distribué une info arrivant depuis une de tes inlets de droite...
Hors ligne
dwan a écrit:
Pour un objet, habituellement oui : pour une abstraction, pas forcément. Et même pour un objet, ça dépend de ce qui sort des outlets : la gauche peut sortir un float en continu, et la droite uniquement un bang de temps en temps. les deux ne seront pas forcément synchrones et ordonnés.
A bien y réfléchir, le contraire serait illogique effectivement.
dwan a écrit:
Quant à diagnostiquer un patch via capture d'écran, il y a des limites...
Sûrement. En fait une question que je me pose :
Ne serait-il pas parfois plus simple d'utiliser un langage de programmation écrit. La programmation graphique avec des fils a des avantages de lisibilité dans beaucoup de cas, mais peut-être pas dans tous, et, parfois, elle risque peut-être d'être plus répétitive ou plus longue.
J'ai une abstraction qui fait ça par exemple :
On ne voit pas tout mais on peut comprendre que ce qu'il s'agit de faire est visiblement simple, alors qu'il faut assez longtemps pour le dessiner. Et les modifications risquent d'être plus fastidieuses que s'il s'agissait de reprendre du code.
Hors ligne
dès que tu commences à faire du copier-coller et à tirer plein de fils que même une araignée elle s'en mordrait les boules, faut que ça fasse dring-dring :
ALERTE ABSTRACTION
Là ça me paraît évident, tu as un schéma qui se répète : inlet suivie d'un select auquel sont accrochés 15 messages. Chaque grappe commence à une note midi (je pense que c'en est une) de la forme x*10+2 et se termine à x*10+2+14. Donc tu fais une abstraction qui prend en arguments x et le nombre de notes y, tu fais en sorte de ne garder de ce qui vient de ton inlet que ce qui est compris entre 0 et y, tu ajoutes ensuite ce chiffre à x*10+2 et tu sors le résultat.
Pas si compliqué !
genre
Dernière modification par dwan (2013-02-08 14:01:22)
Hors ligne
dwan a écrit:
Là ça me paraît évident, tu as un schéma qui se répète : inlet suivie d'un select auquel sont accrochés 15 messages. Chaque grappe commence à une note midi (je pense que c'en est une) de la forme x*10+2 et se termine à x*10+2+14.
Ce sont pas des notes midi non. De même qu'une note midi se distingue de la précédente par un intervalle d'un 12e d'octave, ici ce sont des intervalles d'un 118e d'octave qui sont numérotés. Et comme 118intervalles / 12touches ne tombe pas juste, ce qu'il s'agit de faire n'est pas aussi régulier qu'il ne semble sur la partie de fenêtre capturée. Il n'y a pas toujours 15 messages par exemple (parfois 16).
Voilà une capture d'écran du patch principal :
Je sais pas si on peut comprendre facilement ce que fait ce patch. Pour moi c'est évident (mais il y a environs 30 ans que j'ai envisagé de diviser l'octave en 118 parties égales, alors je sais pas si le fait que ce soit évident pour moi signifiera que ce soit évident pour tout le monde).
La présentation est assez "spider" mais j'ai compris seulement hier comment réaliser des connections sans fils (et j'ai pas trop envi de le modifier pour ça).
Le problème vient plutôt du fait que nous sommes encore très loin de ce que je voudrais faire (il s'agit donc d'un essai pas forcément représentatif). C'est à dire quelque chose qui produise à la fois une partition d'un style non classique, et le code midi correspondant.
Dernière modification par lionmarron (2013-02-08 15:55:12)
Hors ligne
lionmarron a écrit:
dwan a écrit:
Là ça me paraît évident, tu as un schéma qui se répète : inlet suivie d'un select auquel sont accrochés 15 messages. Chaque grappe commence à une note midi (je pense que c'en est une) de la forme x*10+2 et se termine à x*10+2+14.
Ce sont pas des notes midi non.
Ça ne change pas grand-chose au problème de toute façon
lionmarron a écrit:
De même qu'une note midi se distingue de la précédente par un intervalle d'un 12e d'octave, ici ce sont des intervalles d'un 118e d'octave qui sont numérotés. Et comme 118intervalles / 12touches ne tombe pas juste, ce qu'il s'agit de faire n'est pas aussi régulier qu'il ne semble sur la partie de fenêtre capturée. Il n'y a pas toujours 15 messages par exemple (parfois 16).
D'où l'intérêt de modulariser ça sous forme d'abstraction !
[decoupe 52 15] te donnerait tes notes de 52 à 66, et [decoupe 52 16] de 52 à 67 par exemple.
Dernière modification par dwan (2013-02-08 16:12:15)
Hors ligne
Juste au cas où, je confirme que ce que propose Dwan est on ne peut plus rationnel par rapport au patch de l'image 12-15.png
Concernant...
citation :
Ne serait-il pas parfois plus simple d'utiliser un langage de programmation écrit.
... tout à fait, PureData est un outils parmi d'autres pour arriver à ses fins.
Par ailleurs, il existe un moyen de tisser des patchs automatiquement (si tu as besoin de 1600 abstractions avec des arguments différents, il ne serait pas très raisonnable de les créer "à la main").
Cela s'appelle le patchage dynamique, mais il est important d'avoir certaines bases pour s'y pencher...
Bon courage...
Hors ligne
Pages: 1 2