1
votes

max / msp: choix aléatoire de coll en fonction de sa longueur

Un nombre variable de listes est stocké dans un objet coll . Ensuite, une série de franges est fournie à un générateur d'entiers aléatoires. À chaque coup, l'entier généré décidera de la liste qui sortira du coll . Évidemment, ce nombre doit être compris entre 1 et la longueur variable de la coll . Cela signifie que le générateur RND doit prendre en compte toute longueur modifiée du coll avant de générer l'entier. Donc, je suppose que nous avons un circuit comme celui-ci:

  1. Un message de type loadbang ' length ' doit entrer l'objet coll pour qu'il affiche sa longueur. .
  2. Ce numéro de longueur doit entrer dans l'entrée droite d'un objet " entre " (RND gen.) pour définir son maximum.
  3. Un bang dans l'entrée gauche de l'objet " entre " générera un entier aléatoire.
  4. L'entier retournera dans le coll et le fera afficher la liste stockée correspondante.
  5. La liste de sortie sera envoyée à un mécanisme d'itération qui lira et affichera ses atomes un par un.
  6. Lorsque le dernier atome de la liste actuelle est sorti, un nouveau bang sera envoyé à l'objet ' between ' afin qu'une nouvelle liste soit sélectionnée et le le processus sera répété (étapes 3 à 6).

Le problème avec le processus ci-dessus est qu'il tombe sur la fonctionnalité de l'objet coll : un coll génère à la fois sa longueur et toutes les données stockées à partir du même point de vente ( pourquoi, je me demande?), mais dans des processus comme ci-dessus, la longueur de la coll ne doit être sortie qu'une seule fois (au début de la session) et elle ne doit alimenter que le ' entre '(il ne doit jamais atteindre le mécanisme d'itération, car il n'est pas pertinent). Par conséquent, les itinéraires de la longueur de la colonne et ses données doivent être différents, bien qu'ils soient tous des entiers et qu'ils sortent tous du même point de vente.

Des idées, s'il vous plaît?


1 commentaires

Pouvez-vous publier un extrait de code?


3 Réponses :


1
votes

Avez-vous étudié l'objet grab ? Son câblage est un peu contre-intuitif, mais c'est un objet utile pour beaucoup de choses, y compris agir comme un «disjoncteur» dans le genre de situation que vous décrivez.

La configuration d'un objet grab vous permet de diriger un message vers l'entrée d'un objet, puis de collecter uniquement la sortie associée à ce message, sans affecter les autres patchcords qui peut être connecté à la même prise.


3 commentaires

grab fait effectivement le travail. Pour une raison quelconque, je l'avais ignoré jusqu'à présent. Jamais trop tard. Merci.


Hé @ spra… je viens de remarquer votre réponse (oui, 2 mois plus tard!) Pourriez-vous voter et marquer ma réponse comme acceptée, s'il vous plaît?


Salut RiqueW, Je viens de remarquer votre commentaire 7 mois plus tard! :-) Alors, maintenant, j'ai le record! Je pensais que je n'avais pas le droit de voter en raison de mes ... informations d'identification inexistantes (j'avais vu un tel message il y a longtemps). Mais je viens de cliquer sur cette flèche vers le haut et maintenant il montre 1 vote. Désolé d'être si tard et merci encore.



0
votes

J'ai résolu ce problème ces derniers jours en utilisant un gswitch2 et un objet déclencheur pour l'ouvrir et le fermer de chaque côté du message: [t 0 longueur 1]

Le coll est branché sur le gswitch donc ses messages sont acheminés vers les fonctions de longueur juste pour le moment où ils sont nécessaires, et sinon acheminés vers les objets qui ont besoin du contenu du coll.

-exeterdown


1 commentaires

Je ne sais pas comment cela fonctionne. L'objet déclencheur = [t 0 longueur 1] signifie qu'avec chaque signal entrant, il ouvrira la première sortie de gswitch, puis il émettra 'length' puis ouvrira la seconde sortie de gswitch. Mais le prochain signal entrant fera de même, ce qui n'est pas ce que nous voulons. Ce que nous voulons, c'est un mécanisme de commutation qui n'émet la longueur du collecteur qu'une seule fois, pas sur chaque signal. Je n'ai donc pas pu résoudre le problème à votre manière. Peut-être que je n'ai pas compris votre circuit. Si vous pensez pouvoir le décrire de manière plus analytique, je pourrais peut-être le reproduire.



1
votes

J'ai publié une réponse avec une solution que j'ai proposée pour vous, mais un modérateur l'a supprimée.

J'ai donc pris une capture d'écran et j'espère que cela vous aidera.

Essentiellement, vous pouvez avoir des tas de messages différents (ajout d'entrées, sélection d'entrées, suppression, renumérotation ...) aller dans coll, et seuls ceux qui sortent de coll passent par le commutateur 1-in-2-out.

/ p>

Le paramètre par défaut pour le commutateur serait d'acheminer la sortie de coll vers un multislider, une boîte de message ou n'importe où.

Cependant, dans le cas où vous souhaitez capturer la longueur en sortie du coll, utilisez: [trigger 0 length 1] - 0 et 1 vont à l'entrée gauche du commutateur, et 'length' va à la coll.

  • envoyez d'abord le commutateur un 1 pour acheminer la sortie coll vers l'endroit où vous en avez besoin
  • puis envoyez au coll la invite de longueur - il passera la deuxième sortie du commutateur
  • puis fermez la porte avec un 0 - ramenant la sortie de coll à sa place normale

Chaque fois que vous avez besoin de la longueur mise à jour (comme après avoir ajouté ou supprimé une entrée), vous envoyez simplement ce module de déclenchement un coup. patch screenshot


1 commentaires

Maintenant je vois ce que tu veux dire. Oui, c'est aussi une bonne solution. Merci pour la capture d'écran.