Pages: 1 2
Bonjour,
Voilà qu'avec un ami qui s'y connait un petit peu nous avons tenté de coder un élément indispensable à la suite de mon projet artistique. Cependant nous avons buté.
Votre aide serait la bienvenue si quelqu'un à la solution.
Je vous explique ma démarche (s'il y a des floues n'hesitez pas à me demander ^^ )
Voici la structure que doit prendre le code
Les chiffres sont alloués aux lettres de cette facon :
A = 1 pour les nombres cela donne 2 chiffres : 10 donne 1 et 0
B = 2
C = 3
...
J = 10
Ces chiffres de 0 à 9 correspondent à des couleur definit comme ci :
Le 7 et 8 ne correspondent à rien je les ai donc alloué à du gris
Donc je résume la chose avec le mot de départ du code : INFINI
les fiches identitaires sont situées à droite du spectre chromatique
Voilà ! avec mon ami nous avons réussis à allouer les variables correctement pour générer la "fiche" du mot infini
Seulement quand il s'agit de lancer la boucle on s'est retrouvé coincé surement due au fait qu'on ne sait pas vraiment comment faire des groupes de variables ou autre ....
Bref si vous étes arrivé là c'est que vous avez tout lus c'est que vous êtes vaillant ! : p en espérant que quelqu'un puisse m'offfrir une vision divine sur la manière de coder ca
Merci d'avance.
Bien à vous cher codeur !
Stéphane.
Hors ligne
J'ai deux questions
1) Ça s'arrête quand ?
2) Tu affiches les résultats sous quelle forme ?
Hors ligne
^^
Alors :
1) si c'est une boucle techniquement ca s'arrete quand on stoppe manuellement la boucle sinon ca s'arrete pas
2) j'aimerais d'une part lancer le code et que ca genere une suite de chiffre dans un fichier txt par exemple, d'autre part j'aimerais par la suite ajouter une variable qui donne des couleurs à ces chiffres généré puis un son etc peut etre en incorporant le code dans pure data : )
Mais pour ca j'ai besoin de l'aide d'un codeur qui saurait manipuler des groupes de variables ...
Hors ligne
Voici le code qui répond aux contraintes :
String[] couleur = {"blanc", "jaune", "rouge", "bleu", "orange", "violet", "vert", "gris", "gris", "noir"}; String test; void setup() { size(200, 200); test = "infini"; println(test); } void draw() { test = motNombre(test); println(test); test = nombreCouleur(test); println(test); } String motNombre(String mot) { mot = mot.toLowerCase(); String resultat = ""; for (int i = 0; i < mot.length(); i++) { int c = (int)mot.charAt(i) - 96; resultat += Integer.toString(c); } return resultat; } String nombreCouleur(String nombre) { String resultat = ""; for (int i = 0; i < nombre.length(); i++) { int c = (int)nombre.charAt(i) - 48; resultat += couleur[c]; } return resultat; }
Mais les chaines générées grandissent à très grandes vitesses, trop.
Hors ligne
c'est à dire trop ?
Cela à t'il un rapport avec les performance de l'ordinateur qui va générer le "code"
Cela reste t'il envisageable sur 30 min par exemple ?
En tout cas merci pour une reponse aussi rapide et d'avoir pris le temps de me lire
Bien à vous cher codeur !
Hors ligne
Oui trop vite pour écrire les résultats dans un fichier
Par exemple au bout de 10 tours de boucle en majorant le tout
c'est à dire dans le pire cas tu auras environ (2*10^9 *n) chiffres !
+ tout ceux des tours précédents c'est énorme
Hors ligne
Pour te donner une idée avec le script ci-joint, le fichier 14 fait 11Mo au bout de 2minutes de traitement.
String[] couleur = { "blanc", "jaune", "rouge", "bleu", "orange", "violet", "vert", "gris", "gris", "noir" }; String test; InputStream input; OutputStream output; int compteur; void setup() { size(200, 200); output = createOutput("data0.txt"); test = "infini"; try { for (int i = 0; i < test.length(); i++) { output.write(test.charAt(i)); } } catch (IOException e) { e.printStackTrace(); } finally { try { output.close(); } catch (IOException e) { e.printStackTrace(); } } println(test); compteur = 0; //noLoop(); } void draw() { println(compteur); output = createOutput("data" + (compteur + 1) + ".txt"); input = createInput("data" + compteur + ".txt"); try { int data = input.read(); int[] dataSortie; while (data != -1) { if ((compteur % 2) == 0) { dataSortie = motNombre(data); for (int i = 0; i < dataSortie.length; i++) { output.write(dataSortie[i]); } } else { dataSortie = nombreCouleur(data); for (int i = 0; i < dataSortie.length; i++) { output.write(dataSortie[i]); } } data = input.read(); } } catch (IOException e) { e.printStackTrace(); } finally { try { output.close(); input.close(); } catch (IOException e) { e.printStackTrace(); } } compteur++; } int[] motNombre(int lettre) { int[] resultat; lettre -= 96; //println(lettre); if (lettre < 10) { resultat = new int[1]; resultat[0] = 48 + lettre; } else { resultat = new int[2]; resultat[0] = 48 + lettre / 10; resultat[1] = 48 + lettre % 10; } return resultat; } int[] nombreCouleur(int nombre) { String nomCouleur = couleur[nombre - 48]; int[] resultat = new int[nomCouleur.length()]; for (int i = 0; i < nomCouleur.length(); i++) { resultat[i] = (int)nomCouleur.charAt(i); } return resultat; }
Hors ligne
ok, merci d'avoir pris ce temps pour me le montrer.
Dans le pire des cas je ferais un fichier qui n'aura tourné que 5 min ca suffira à générer la quantité de chiffre nécessaire, je ferais ensuite tourné ce meme fichier en boucle.
Est ce difficile de générer une lecture de ces dit-nombres pour associer chaque chiffres à une couleur et un son ? et de faire tourner tout ca en boucle ? A partir du fichier qui à été généré par le code ci dessus j'imagine.
Cordialement,
S
Hors ligne
Ce sketch Processing génère les fichiers directement. Ce qui apparaît en console est l'indice des fichiers créés au fur et à mesure
Pour faire apparaître les fichiers, va dans le menu Processing : Sketch > Show Sketch Folder
Bon courage.
Hors ligne
Super ca marche, qui plus est cela me genere le fichier texte et le fichier chiffre !
OO grand merci pour ton aide !
Hors ligne
Et du coup, qu'est ce qui est le plus simple :
Intégrer directement au code une variable qui génére un rectangle de couleur en fonction du chiffre généré ainsi qu'une note musicale
Ou
reprendre les fichiers .txt dans un autre skecth pour lors de la lecture de ce dit fichier lui donner les variables de: un chiffre=une couleur=une note musicale
Amicalement,
Stéphane.
Peut être dois je m'orienter vers pure data pour la lecture du fichier.txt contenant les chifffres ?
Dernière modification par zalicks (2014-05-11 16:08:35)
Hors ligne
Bonjour,
Comme la construction n'évolue pas dans le temps, je pense qu'il vaut mieux réaliser le fichier. Puis dans second temps le lire et l'interpréter.
Processing peut lire les fichiers .txt, je le fait déjà dans le code proposé :
input = createInput("data" + compteur + ".txt");
Avec l'objet InputStream que l'on peut lire caractère par caractère.
http://www.processing.org/reference/createInput_.html
Ensuite il faut affecter un son et une couleur à chaque caractère.
Hors ligne
Merci beaucoup je vais me pencher la dessus !
Hors ligne
Bonjour,
Comme tu as eu le malheur de t'égarer du côté de PureData, voici le code pour lire un fichier texte avec création d'une note et d'une couleur.
J'ai stocké les fréquences des notes dans un tableau ainsi que les couleurs. Comme cela le caractère lu, qui correspond à un chiffre, donnera aussitôt la note et la couleur voulue.
import ddf.minim.*; import ddf.minim.ugens.*; Minim minim; AudioOutput sortieSon; Oscil onde; InputStream input; int[] frequence = { 110, 220, 330, 440, 550, 660, 770, 770, 880, 990 }; color[] couleur = { color(255), color(255, 255, 0), color(255, 0, 0), color(0, 0, 255), color(255, 127, 0), color(127, 0, 255), color(0, 255, 0), color(127), color(127), color(0) }; int indice; void setup() { size(200, 200); minim = new Minim(this); sortieSon = minim.getLineOut(); onde = new Oscil(0, 0.5f, Waves.TRIANGLE); onde.patch(sortieSon); frameRate(5); indice = 0; input = createInput("data13.txt"); } void draw() { background(couleur[indice]); onde.setFrequency(frequence[indice]); try { indice = input.read() - 48; } catch (IOException e) { e.printStackTrace(); } }
Ci-joint le fichier texte lu à placer dans le répertoire data du sketch :
Dernière modification par Mushussu (2014-05-22 13:21:30)
Hors ligne
Pages: 1 2